2

我有一个自定义的 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 文件,我认为最好的方法是运行命令行命令通过 grunt 编译 sass 但是我想在屏幕上获得某种输出工作正常。这段代码是否有任何理由不打印通过 grunt/nodejs 运行 unix 命令的结果?

4

1 回答 1

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: 为什么我的异步任务没有完成?

于 2012-08-19T14:55:06.777 回答