web-dev-qa-db-fra.com

Gulp échouant lors de l'exécution à partir de VS 2015 Task Runner Explorer, mais pas à partir de l'invite de commande

J'ai certaines tâches Gulp à effectuer les actions clean, build, release typiques d'un site Web. Rien de particulièrement inhabituel dans mon esprit. (En fait, il ressemble beaucoup au squelette Aurelia TypeScript.)

La plupart des membres de l'équipe effectuent un développement frontal à l'aide de Gulp à partir d'une invite PowerShell/Command et d'une édition avec VS Code/Sublime. Une partie de l'équipe fait de même avec Visual Studio 2015.

L'exécution de la tâche build à partir de la commande Invite fonctionne parfaitement, mais si nous l'exécutons à partir de la tâche Run Runner Explorer de Visual Studio, une erreur se produit.

Toutefois, l'exécution des autres tâches (par exemple, clean) fonctionne à la fois à partir de la commande Invite et de VS Task Runner Explorer.

Fait intéressant, Task Runner Explorer génère même une copie du processus appelé pour exécuter la tâche. Si je copie cette commande exacte (voir ci-dessous) et l'exécute dans une invite de commande, il ne donne pas donne l'erreur. Cela se produit uniquement lorsqu'il est exécuté à partir de Task Runner Explorer et uniquement dans cette tâche.

Voici la ligne de commande de la tâche et la sortie d'erreur associée de 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)

Mon Google-Fu est arrivé vide sur le message d'erreur/trace de la pile ou des recherches connexes. 

Ce qui donne?

MISE À JOUR: Selon @ josh-graham, la version de Node invoquée par VS est répertoriée ci-dessous.

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

VS est livré avec une ancienne version de Node.js et n’indique pas si une mise à jour sera disponible prochainement, même avec Update 2 à paraître . Votre système a probablement une version plus récente. Pour résoudre ce problème dans Visual Studio, vous devez hiérarchiser votre PATH (en supposant que vous ayez un nœud sur votre PATH). Trouvez simplement l'option "Outils Web externes" et déplacez $ (PATH) en haut de la liste suivante ...

 enter image description here

Voir cela pour plus de détails - Personnaliser les outils Web externes dans Visual Studio 2015 . Aussi, désolé pour la photo, mais cela semble être le moyen le plus simple d’expliquer le problème.


Après avoir vu cette réponse devenir de plus en plus populaire pour aider les autres, j'ai continué à comprendre pourquoi cette question posait toujours problème. J'ai examiné les remarques actuelles de Node.js Tools pour la mise à jour 3 et encore ne vois aucune information concernant une version dans leur résumé des mises à jour comme suit ...

  • Plus rapide, meilleur ES6 IntelliSense
  • Débogage plus fiable
  • Expériences de tests unitaires améliorées (y compris la prise en charge de bandes)
  • Commande .npm dans plusieurs types de projets

Pour aller un peu plus loin dans le terrier du lapin pour voir si le choix de leur version exacte est flagrant (ce qui n’est pas le cas), j’ai trouvé trouve ce qui suit sur leur référentiel github ...

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

Est-ce que ça pourrait être ça? Pas sûr, mais je pense qu'ils ne sont toujours pas à bord avec VS qui expédie des versions plus récentes de Node.js.

44
scniro

Voyez si vous pouvez imprimer la version du nœud sur laquelle Visual Studio est en train d’acheter. Il est probable que la version de Node utilisée par Visual Studio soit différente de celle que vous utilisez sur la console. La collection Map semble avoir été introduite dans Node v4.0.0 https://nodejs.org/fr/blog/release/v4.0.0/

Vous devriez pouvoir enregistrer la version du noeud en utilisant

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

1
Josh Graham