Gulp задача не работает при запуске из VS 2015 Explorer, но не из командной строки

У меня есть несколько задач Gulp для выполнения типичных действий clean, build, release для веб-сайта. Ничего особенного в моем сознании. (На самом деле он очень похож на скелет Aurelia TypeScript.)

Большая часть команды делает front-end разработку с помощью Gulp из командной строки PowerShell/Command и редактирования с помощью VS Code/Sublime. Некоторые из команд делают то же самое с помощью Visual Studio 2015.

Запуск задачи build из командной строки работает очень хорошо, но если мы запустим ее из Visual Studio Task Runner Explorer, это приведет к ошибке.

Однако выполнение других задач (например, clean) отлично работает как в командной строке, так и в проводнике запуска VS.

Интересно, что проводник Task Runner даже выводит копию процесса, который он вызывает для запуска задачи. Если я скопирую эту точную команду (см. Ниже) и запустив ее в командной строке, она выдаст ошибку не. Это происходит только при запуске из Project 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 оказался пустым в сообщении об ошибке/трассировке стека или связанных с ней поисковых запросах.

Что дает?

UPDATE: согласно @josh-graham, версия Node, вызываемая VS, приведена ниже.

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

Ответ 1

VS поставляется со старой версией Node.js и не указывает, будет ли обновление в ближайшее время, даже с Update 2 coming из. Вероятно, ваша система имеет более новую версию. Чтобы исправить это в Visual Studio, вам необходимо назначить приоритет PATH (если у вас есть node на вашей PATH). Просто найдите параметр "Внешние веб-инструменты" и переместите $(PATH) в начало следующего...

введите описание изображения здесь

Посмотрите это для более подробной информации - Настройте внешние веб-инструменты в Visual Studio 2015. Кроме того, извините за картину, но это, кажется, самый простой способ объяснить эту проблему.


Увидев, что этот ответ растет в популярности, чтобы помочь другим, я продолжал вникать в то, почему это все еще как-то проблема. Я просмотрел текущую Node.js Заметки для обновлений 3 и еще не видят никакой информации о версию в сводке обновлений следующим образом:

  • Быстрее, лучше ES6 IntelliSense
  • Более надежная отладка
  • Улучшено тестирование модулей (включая поддержку ленты)
  • .npm команда в других типах проектов

Чтобы спуститься по кроличьей дыре немного, чтобы увидеть, является ли их точный вариант выбора очевидным (что это не так), я сделал найти следующее на их репозиторий github...

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

Может ли это быть? Не уверен, но я думаю, что они все еще не находятся на борту с доставкой VS с более новыми версиями Node.js.

Ответ 2

Посмотрите, можете ли вы распечатать версию node, на которую обходит Visual Studio. Вероятно, версия node, используемая Visual Studio, отличается от версии, используемой на консоли. Коллекция Map выглядит так, как будто она была введена в node v4.0.0 https://nodejs.org/en/blog/release/v4.0.0/

Вы должны иметь возможность регистрировать версию node, используя

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