web-dev-qa-db-fra.com

Utilisation de l'inspecteur de noeud avec les tâches Grunt

Est-ce que quelqu'un a utilisé node-inspector avec Grunt pour le débogage de l'application? Sinon, pouvez-vous recommander un outil de débogage pour les applications Grunt?

Je travaille avec nodejs pour une application côté serveur et j'ai Grunt pour utiliser des tâches séparées (car les utilisateurs peuvent exécuter des tâches séparément).

101
JuanO

Pour exécuter grunt dans le débogage, vous devez transmettre le script grunt au noeud de manière explicite:

node-debug $(which grunt) task

et mettez une ligne debugger; dans votre tâche. node-inspector ouvrira alors un navigateur avec des outils de débogage.

Modifier le 28 février 2014

node-inspector a ajouté la commande node-debug, qui lance le noeud dans un état --debug et ouvre le navigateur à la page node-inspector, en s'arrêtant lorsqu'il atteint la première ligne debugger ou le point d'arrêt défini.

Edit 30 janvier 2015

Sous Windows, les choses sont un peu plus compliquées. Voir la réponse de @ e.gluhotorenko pour des instructions.

135
David Souther

Solution Windows

Courir 

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

de cmd dans le répertoire avec votre Gruntfile.js. N'oubliez pas de mettre la ligne debugger; aux endroits nécessaires.

39

Pour déboguer, nous devons modifier le fichier grunt sous bin. Sur ma machine, grunt est installé globalement, je suis donc allé dans /usr/local/lib/node_modules/grunt/binJ'ai ouvert le fichier et modifié:

#!/usr/bin/env node

À

#!/usr/bin/env node --debug-brk

--debug-brk se cassera sur la première ligne de javascript.

Faire cela seul ne suffit pas cependant, car vous ne pourrez pas trouver votre fichier de tâche grognant dans l'inspecteur déroulant, vous devez donc modifier le fichier que vous souhaitez déboguer en ajoutant debugger; où vous voulez que le point d'arrêt se produise. Maintenant, vous pouvez cliquer sur Continuer après la première pause et vous interrompez la ligne debugger;

Joli kludgy, mais c'est la seule façon que j'ai trouvé jusqu'à présent.

7
user1577390

J'ai récemment créé grunt-node-inspector pour configurer facilement node-inspector avec le reste de votre flux de travail grunt. Vérifiez-le: https://github.com/ChrisWren/grunt-node-inspector

Voici une section d'un fichier Grunt qui illustre comment vous pouvez déboguer une tâche à l'aide de grunt-node-inspector, grunt-concurrent et grunt-Shell: https://github.com/CabinJS/Cabin/blob/master/ Gruntfile.js # L44-L77

6
ChrisWren

J'ai fait une tâche pour exécuter mon application et lancer node-inspector . C'est beaucoup mieux que la proposition actuelle, il vous suffit d'ajouter cette tâche dans le fichier grunt:

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });
4
olivier dufour