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.