10 votes

Exécuter grunt depuis MSBuild

Ce fil ( Problème de capture de la sortie d'erreur ) vous donne un aperçu du problème auquel je suis confronté. J'essaie d'exécuter grunt depuis MSBuild et les erreurs de grunt ne s'affichent pas dans la fenêtre de sortie de Visual Studio. J'ai un projet .NET dans Visual Studio Express 2012 pour le Web. J'ai importé un projet externe dans le fichier de construction du projet avec la balise IMPORT et dans le projet importé, j'ai une tâche Exec qui tente d'exécuter grunt. Je veux évidemment voir les messages d'erreur que grunt produit dans ma fenêtre de sortie Visual Studio sans trop de problèmes. J'ai trouvé une solution de contournement extrêmement simple qui envoie au moins la sortie dans un fichier texte.

grunt.cmd > grunt-output.txt

Ce fichier de sortie se trouve quelque part dans le dossier de mon projet .NET. Un rafraîchissement rapide et un double clic me permettent d'ouvrir le fichier de sortie et de voir une version légèrement déformée de la sortie de Grunt dans Visual Studio.

Par exemple, j'exécute une tâche lint sur le fichier grunt.js, qui contient des éléments auxquels JSHint s'opposerait. J'ai délibérément omis de mettre un point-virgule après var hello et vous obtenez ainsi le message d'erreur Missing semicolon .

À partir de la ligne de commande, j'obtiens un message d'erreur joliment formaté.

Running "lint:files" (lint) task
Linting grunt.js...ERROR
[L2:C10] Missing semicolon.
var hello

<WARN> Task "lint:files" failed. Use --force to continue. </WARN>

Aborted due to warnings.

Lorsque je l'exécute depuis Visual Studio, le fichier de sortie contient ce format encombré :

    [4mRunning "lint:files" (lint) task[24m
     Linting grunt.js...[31mERROR[39m
     [31m[[39m[33mL2[39m[31m:[39m[33mC10[39m[31m][39m [33mMissing semicolon.[39m
     var hello[31m[7m [27m[39m

     [31m<[39m[33mWARN[39m[31m>[39m [33mTask "lint:files" failed. Use --force to continue.     [39m [31m</[39m[33mWARN[39m[31m>[39m

     [31mAborted due to warnings.[39m

Est-ce que quelqu'un sait ce que font tous ces crochets et ces chiffres, et est-ce que quelqu'un peut penser à un commutateur de ligne de commande, un commutateur grunt ou un commutateur node.js qui les interpréterait et les transformerait en formatage ? Ils ne ressemblent pas à une sorte d'encodage, mais plutôt à des balises qui suggèrent à l'environnement de la ligne de commande comment formater le message. Ne suggérez pas d'exécuter une sorte de fonction de remplacement par expression régulière. Je veux quelque chose de rapide et de facile, sinon cela deviendrait plus difficile que cela n'en vaut la peine.

MISE À JOUR : ce lien La sortie est coupée si elle est envoyée dans une autre application. indique un problème plus en amont dans le nœud qui remonte à 10 mois. Pendant que ce problème est résolu, il serait agréable d'obtenir au moins un fichier de sortie plus lisible.

8voto

DavidHyogo Points 1213

Ce fil de discussion sur le forum de grunt La redirection par tuyau de la sortie de Grunt est cassée résout parfaitement ce problème et fournit une solution de contournement rapide en attendant que le problème général soit résolu. Ce sont des codes d'échappement qui colorent la sortie et la solution consiste à utiliser l'option --no-color pour supprimer la coloration.

Lorsque je lance cette commande depuis MSBuild

grunt.cmd --no-color > grunt-output.txt

J'obtiens une sortie joliment formatée avec exactement le même contenu que la ligne de commande :

Running "lint:files" (lint) task
Linting grunt.js...ERROR
[L2:C10] Missing semicolon.
var hello 

<WARN> Task "lint:files" failed. Use --force to continue. </WARN>

Aborted due to warnings.

Je peux vivre sans la couleur. Ce serait bien si cela pouvait être envoyé à la fenêtre de sortie, cependant, parce que MSBuild jette ce qui semble être une erreur dans le processus de construction alors qu'en fait c'est juste JSHint qui me blesse avec tact à propos de mon JavaScript.

0voto

Paul0515 Points 444

En réponse à "Je veux évidemment voir les messages d'erreur que grunt produit dans ma fenêtre de sortie de Visual Studio sans trop de difficultés."

J'ai jeté un coup d'œil à VsCommandBuddy ... il vous aide à intégrer votre grunt (et toute autre commande d'ailleurs) directement dans Visual Studio. Les commandes sont configurées par solution/projet, et à l'heure où j'écris ces lignes, elles sont disponibles via les menus, la barre d'outils, les raccourcis et le lancement rapide ...

http://visualstudiogallery.msdn.microsoft.com/f5da988e-2ec1-4061-a569-46d09733c668

C'est un projet de type "gratte-moi la main". Il m'aide à faire avancer les choses. Dans chaque solution que j'ouvre dans Visual Studio, on me présente simplement toutes les commandes externes que j'ai mises en place pour cette solution / ou ce projet.

La sortie passe par la fenêtre de sortie comme souhaité. L'option no-color pour grunt supprime tout le bruit.

J'espère que ça aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X