直接从Node运行Grunt任务

时间:2013-07-09 14:47:52

标签: javascript node.js gruntjs

如何直接从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 个答案:

答案 0 :(得分:10)

更新

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


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

更新的代码:

var grunt = require('grunt');

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

grunt.tasks(['default']);

答案 1 :(得分: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);
      }
    });

答案 2 :(得分:1)

如果您执行以下操作该怎么办?

grunt.tasks("default");

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

答案 3 :(得分:-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中运行,我们仍然希望输出显示在控制台中。

Visualjeff