8

如何直接从 Node 执行 Grunt 任务而不需要使用 CLI?

我有以下“POC”代码;但是,永远不会记录“东西”。

var grunt = require('grunt');

grunt.registerTask('default', 'Log some stuff.', function() {
    console.log('stuff');
});

grunt.task.run('default'); // This is probably not the right command

我对 Grunt 很陌生,所以我可能遗漏了一些明显的东西。我怀疑我用来“运行”任务的命令只是在排队,实际上并没有开始运行。不过,我找不到手动运行的文档。

4

4 回答 4

10

更新

虽然这是答案,但 Grunt 在直接从 Node.js 运行时有很多问题。其中最重要的是当 grunt 任务失败时,它会调用process.exit并很好地退出您的节点实例。我不建议尝试让它工作。


好吧,我只回答我自己的问题。我是对的,我的命令是错误的。

更新代码:

var grunt = require('grunt');

grunt.registerTask('default', 'Log some stuff.', function() {
    console.log('stuff');
});

grunt.tasks(['default']);
于 2013-07-09T15:00:43.960 回答
4

这需要很多时间,最后,我已经让它为我工作了

   var util = require('util')
    var exec = require('child_process').exec;
    var child = exec("/usr/local/bin/grunt --gruntfile /path/to/Gruntfile.js", function (error, stdout, stderr) {
      util.print('stdout: ' + stdout);
      util.print('stderr: ' + stderr);
      if (error !== null) {
        console.log('exec error: ' + error);
      }
    });
于 2016-04-20T15:22:24.827 回答
1

如果您执行以下操作会怎样?

grunt.tasks("default");

我在我的一个项目中创建了一个 Grunt 运行器,它进行一些解析,然后调用上面的行。几乎是您已经回答的内容,但支持Gruntfile.js.

于 2013-07-09T15:03:23.963 回答
-1

我们正在使用 Jenkins 进行构建。下面是我们使用 bash 解决问题的方法:

#!/bin/bash
export PATH=$PATH:/usr/local/bin
grunt full-build | tee /dev/stderr | awk '/Aborted/ || /Fatal/{exit 1}'
echo rv: $?
exit $?

使用 /dev/stderr 是因为我们在 Jenkins 中运行,我们仍然希望输出显示在控制台中。

视觉杰夫

于 2013-09-27T18:19:03.963 回答