Сбой задания Gulp при запуске из проводника VS 2015 Task Runner, но не из командной строки
У меня есть немного Gulp
задачи, чтобы сделать типичный clean
, build
, release
действия для сайта. Ничего особенно необычного в моей голове. (На самом деле это очень похоже на скелет Aurelia TypeScript.)
Большая часть команды занимается разработкой фронт-энда с использованием Gulp
из PowerShell / командной строки и редактирования с VS Code / Sublime. Некоторые из команды делают то же самое, используя Visual Studio 2015.
Запуск build
Задача из командной строки работает просто отлично, но если мы запустим ее из проводника задач Visual Studio, она выдаст нам ошибку.
Тем не менее, запуск других задач (например, clean
) прекрасно работает как из командной строки, так и из VS Task Runner Explorer.
Интересно, что проводник Task Runner даже выводит копию процесса, который он вызывает для запуска задачи. Если я копирую эту точную команду (см. Ниже) и запускаю ее в командной строке, она не выдает ошибку. Это происходит только при запуске из Проводника задач и только одной этой задачи.
Вот командная строка задачи и связанные с ней сообщения об ошибках из 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, версия Node, вызываемого VS, приведена ниже.
[10:12:48] Starting 'clean'...
Version: v0.10.31
[10:12:48] Finished 'clean' after 42 ms
2 ответа
VS поставляется со старой версией Node.js и не указывает, будет ли обновление в ближайшее время, даже если выйдет обновление 2. Ваша система, вероятно, имеет более новую версию. Чтобы исправить это в Visual Studio, вам нужно расставить приоритеты в вашем PATH (при условии, что у вас есть узел в вашем PATH). Просто найдите параметр "Внешние веб-инструменты" и переместите $(PATH) в верхнюю часть следующего...
Смотрите это для более подробной информации - Настройка внешних веб-инструментов в Visual Studio 2015. Кроме того, извините за картину, но, похоже, это самый простой способ объяснить проблему.
После того, как этот ответ стал популярным, чтобы помогать другим, я продолжал копаться в том, почему это все еще является проблемой. Я просмотрел текущие замечания по Node.js Tools для обновления 3 и до сих пор не вижу никакой информации о версии в их сводке обновлений следующим образом...
- Быстрее, лучше ES6 IntelliSense
- Более надежная отладка
- Улучшенный опыт модульного тестирования (включая поддержку ленты)
- Команда.npm в других типах проектов
Чтобы немного пройти по кроличьей норе, чтобы увидеть, является ли их точный выбор версии очевидным (а это не так), я нашел следующее в их репозитории github...
this.versions = {node: '0.10.0', v8: '3.14.5.8'};
Может ли это быть так? Не уверен, но я думаю, что они все еще не готовы к поставке VS с более новыми версиями Node.js.
Посмотрите, сможете ли вы распечатать версию узла, на которую распространяется 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);