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

我有一些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资源pipe理器甚至输出它调用来运行任务的进程的副本。 如果我复制精确的命令(见下文)并在命令提示符下运行它,它不会给出错误。 它只发生在从任务运行资源pipe理器运行,只有一个任务。

以下是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在错误消息/堆栈跟踪或相关search中已经空了。

是什么赋予了?

更新:根据@ josh-graham,由VS调用的节点的版本如下。

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

VS附带一个旧版本的Node.js,并不表示更新是否即将到来,即使更新2出现 。 你的系统可能有一个更新的版本。 要在Visual Studio中解决这个问题,您需要优先考虑PATH(假设您的PATH上有节点)。 只需find“外部Web工具”选项,并将$(path)移动到以下的顶部…

在这里输入图像描述

有关更多详细信息,请参阅此部分 – 在Visual Studio 2015中自定义外部Web工具 。 另外,对于这幅图片感到抱歉,但似乎是解释这个问题最直接的方法。


看到这个答案越来越受欢迎,以帮助别人,我继续挖掘为什么这仍然是一个问题。 我查看了当前的Node.js工具备注更新3 , 仍然没有看到任何有关更新摘要版本的信息,如下所示…

  • 更快,更好的ES6智能感知
  • 更可靠的debugging
  • 改进的unit testing经验(包括磁带支持)
  • .npm命令更多的项目types

去兔子洞一点点,看看他们的确切版本的select是明显的(这不是),我确实在他们的github存储库中find以下内容 …

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

这可以吗? 不确定,但我认为他们仍然没有与VS新版本的Node.js船上。

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

您应该可以使用logging节点版本

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