it-swarm.com.ru

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

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

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

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

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

Интересно, что Explorer 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, версия Node, вызываемого VS, приведена ниже.

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

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

 enter image description here

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


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

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

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

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

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

44
scniro

Посмотрите, сможете ли вы распечатать версию узла, на которую распространяется 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);

1
Josh Graham