【问题标题】:Gulp task failing when run from VS 2015 Task Runner explorer, but not from command prompt从 VS 2015 Task Runner explorer 运行时 Gulp 任务失败,但不是从命令提示符
【发布时间】:2016-03-09 11:13:05
【问题描述】:

我有一些Gulp 任务来执行网站的典型cleanbuildrelease 操作。在我的脑海里没有什么特别不寻常的。 (实际上它与 Aurelia TypeScript 框架非常相似。)

团队中的大多数人在 PowerShell / 命令提示符下使用 Gulp 进行前端开发,并使用 VS Code / Sublime 进行编辑。一些团队使用 Visual Studio 2015 做同样的事情。

从命令提示符运行build 任务可以正常工作,但如果我们从 Visual Studio 的 Task Runner Explorer 运行它,它会给我们一个错误。

但是,在命令提示符和 VS Task Runner Explorer 中运行其他任务(例如 clean)都可以正常工作。

有趣的是,Task Runner 资源管理器甚至会输出它为运行任务而调用的进程的副本。如果我复制那个确切的命令(见下文)并在命令提示符下运行它,它确实 not 给出错误。它仅在从 Task Runner Explorer 运行时发生,并且仅发生在该一项任务中。

这是来自 Task Runner Explorer 的任务命令行和相关错误输出:

cmd.exe /c gulp -b "D:\Development\xxxx\WebSite" --color --gulpfile "D:\Development\xxxx\WebSite\Gulpfile.js" build
[20:40:42] Using gulpfile D:\Development\xxxx\WebSite\Gulpfile.js
[20:40:42] Starting 'build'...
[20:40:42] Starting 'clean'...
[20:40:42] Finished 'clean' after 5.74 ms
[20:40:42] Starting 'build-system'...
[20:40:42] Starting 'build-html'...
[20:40:42] Starting 'build-css'...
[20:40:42] Finished 'build-css' after 31 ms
[20:40:43] Finished 'build-html' after 162 ms
D:\Development\xxxx\WebSite\node_modules\gulp-tsb\lib\builder.js:153
        var newLastBuildVersion = new Map();
                                      ^
ReferenceError: Map is not defined
    at Object.build (D:\Development\xxxx\WebSite\node_modules\gulp-tsb\lib\builder.js:153:39)
    at Stream.<anonymous> (D:\Development\xxxx\WebSite\node_modules\gulp-tsb\lib\index.js:40:22)
    at _end (D:\Development\xxxx\WebSite\node_modules\through\index.js:65:9)
    at Stream.stream.end (D:\Development\xxxx\WebSite\node_modules\through\index.js:74:5)
    at DestroyableTransform.onend (D:\Development\xxxx\WebSite\node_modules\readable-stream\lib\_stream_readable.js:545:10)
    at DestroyableTransform.g (events.js:180:16)
    at DestroyableTransform.emit (events.js:117:20)
    at endReadableNT (D:\Development\xxxx\WebSite\node_modules\readable-stream\lib\_stream_readable.js:960:12)
Process terminated with code 8.
    at afterTick (D:\Development\xxxx\WebSite\node_modules\process-nextick-args\index.js:18:8)
    at process._tickCallback (node.js:419:13)

我的 Google-Fu 在错误消息/堆栈跟踪或相关搜索中显示为空。

什么给了?

更新:根据@josh-graham,下面列出了 VS 调用的 Node 版本。

[10:12:48] Starting 'clean'...
Version: v0.10.31
[10:12:48] Finished 'clean' after 42 ms

【问题讨论】:

    标签: javascript node.js visual-studio-2015 gulp task-runner-explorer


    【解决方案1】:

    VS 附带旧版本的 Node.js,并没有说明是否会很快更新,即使是 Update 2 coming out。您的系统可能有较新的版本。要在 Visual Studio 中解决此问题,您需要优先考虑 PATH(假设您的 PATH 上有节点)。只需找到“External Web Tools”选项,然后将 $(PATH) 移至以下顶部...

    更多详情请参阅 - Customize external web tools in Visual Studio 2015。另外,很抱歉这张图片,但这似乎是解释问题的最直接方式。


    在看到这个答案越来越受欢迎以帮助他人之后,我继续深入研究为什么这仍然是一个问题。我查看了当前的Node.js Tools remarks for update 3仍然在他们的更新摘要中没有看到任何有关版本的信息,如下所示...

    • 更快、更好的 ES6 IntelliSense
    • 调试更可靠
    • 改进的单元测试体验(包括磁带支持)
    • .npm 命令在更多项目类型中

    为了看看他们的确切版本选择是否非常明显(事实并非如此)我做了find the following on their github repository...

    this.versions = {node: '0.10.0', v8: '3.14.5.8'};
    

    会是这样吗?不确定,但我认为他们仍然不支持使用较新版本的 Node.js 发布 VS。

    【讨论】:

    • 哈哈...会不会同时发生!感谢您的明确答复。我会修改正确答案。此外,图片比 Mads 的帖子更容易理解。
    • 对于 google,我收到了这个错误:Node Sass 找不到当前环境的绑定:Windows 32-bit with Node.js 5.x
    • 这也适用于新发布的 Visual Studio 2017。
    • @AlenSiljak 哇,我们正处于主要节点模块仅支持 4.x 及更高版本的地步。老实说,我不明白微软的这一点
    • 我已经在 vs15 上检查过了,它就像魅力一样!但一定要在重新排序后再次重启vs
    【解决方案2】:

    看看你是否可以打印出 Visual Studio 正在输出的节点版本。 Visual Studio 使用的 Node 版本可能与您在控制台中使用的不同。 Map 集合看起来像是在 Node v4.0.0 中引入的 https://nodejs.org/en/blog/release/v4.0.0/

    您应该能够使用

    记录节点版本

    console.log('Version: ' + process.version);

    【讨论】:

    • 我想你可能在这里有所收获。输出的版本是v0.10.31 !?尽管安装了节点 v4.2.6,但仍然如此。现在让 VS 使用该程序...
    猜你喜欢
    • 2018-01-11
    • 2015-11-06
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2015-09-26
    • 2017-08-31
    相关资源
    最近更新 更多