自定义NodeJS Grunt命令

时间:2012-08-19 00:33:56

标签: javascript node.js gruntjs

我有一个自定义的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命令的结果?

1 个答案:

答案 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?