我有一个自定义的grunt任务,如下所示:
grunt.registerTask('list', 'test', function()
{
var child;
child = exec('touch skhjdfgkshjgdf',
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
});
但是当我尝试运行pwd命令时,我无法获得任何输出。这样做的最终目标是能够用grunt编译sass文件,我认为最好的方法是通过运行命令行命令来编译sass通过grunt然而我想得到某种输出到屏幕上工作正常。有没有理由这段代码不会打印通过grunt / nodejs运行unix命令的结果?
答案 0 :(得分:3)
exec()
是异步的,所以你需要告诉grunt并在完成后执行回调:
grunt.registerTask('list', 'test', function()
{
// Tell grunt the task is async
var cb = this.async();
var child = exec('touch skhjdfgkshjgdf', function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
// Execute the callback when the async task is done
cb();
});
});
来自grunt docs: Why doesn't my asynchronous task complete?