从VS 2015 Task Runner资源管理器运行时,Gulp任务失败,但不是从命令提示符运行

时间:2016-03-09 11:13:06

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

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

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

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

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

有趣的是,Task Runner explorer甚至会输出它调用以运行任务的进程的副本。如果我复制那个确切的命令(见下文)并在命令提示符下运行它,它会给出错误。它只在从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

2 个答案:

答案 0 :(得分:44)

VS附带旧版本的Node.js,并未表明即使使用Update 2 coming out,更新是否会很快到来。您的系统可能有更新的版本。要在Visual Studio中修复此问题,您需要确定PATH的优先级(假设您的PATH上有节点)。只需找到“外部Web工具”选项,然后将$(PATH)移到以下顶部...

enter image description here

有关详细信息,请参阅此处 - Customize external web tools in Visual Studio 2015。此外,对图片感到抱歉,但这似乎是解释问题最直接的方式。

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

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

稍微走下兔子洞,看看他们的确切版本选择是否明显(不是这样)我做了find the following on their github repository ......

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

这可能吗?不确定,但我认为他们仍然没有使用更新版本的Node.js运送VS.

答案 1 :(得分:1)

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

中引入的

您应该能够使用

记录节点版本

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