我添加了以下内容registerTask
调用此 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']);
新的debug
任务与现有的server
任务类似。但是,grunt server
命令运行 compile
、watch
和 runNode
任务,而 grunt debug
命令仅运行 runDebug
任务。
我在这里缺少什么?为什么 compile
和 watch
任务不使用 grunt debug
命令运行。
最佳答案
您的代码多次调用 this.async()
返回的 done()
函数。这可能会让 Grunt 感到困惑。我建议您调用一个名为 spawned()
的函数,而不是直接在回调中调用 done()
。该函数可能类似于:
var expected_spawns = 2;
function spawned() {
if (!--expected_spawns)
done();
if (expected_spawns < 0)
throw new Error("too many spawns!") // Or some of Grunt's fail functions.
}
这样 done()
将被调用一次。
关于javascript - Grunt registerTask() 未运行列表中的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761102/