I have added the following registerTask
calls to this Gruntfile.js
grunt.task.registerTask('runDebug', 'Run the app with debug flag', function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node',
args: ['--debug', './node_modules/nodemon/nodemon.js', 'index.js'],
opts: {
stdio: 'inherit'
}
}, 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 working directory
}
},
function (error, result, code) {
if (error) {
grunt.log.write (result);
grunt.fail.fatal(error);
}
done();
});
grunt.log.writeln ('inspector started');
});
grunt.task.registerTask('debug', ['runDebug', 'compile', 'watch']);
The new debug
task is similar to the existing server
task. However, grunt server
command runs compile
, watch
, and runNode
tasks, whereas grunt debug
command only runs runDebug
task.
What am I missing here? Why aren't the compile
and watch
tasks run with grunt debug
command.
Your code is calling the
done()
function returned bythis.async()
more than once. This could be confusing Grunt. I would suggest calling a function of your own which could namedspawned()
instead of callingdone()
directly in your callbacks. The function could be something like:This way
done()
will be called once.