直接从Node运行Grunt Task

如何直接从Node执行一个Grunt任务,而无需将其退出到CLI?

我有以下“POC”代码; 然而,“东西”从来没有logging。

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来说很新,所以我可能错过了一些明显的东西。 我怀疑我用来“运行”任务的命令只是排队,而实际上并没有开始运行。 不过,我找不到手动运行的文档。

更新

虽然这是答案,但是Grunt有很多直接从Node运行的问题。 当这个咕task任务失败的时候,至less它会调用process.exit并很好的退出你的节点实例。 我不build议试图让这个工作。


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

更新的代码:

 var grunt = require('grunt'); grunt.registerTask('default', 'Log some stuff.', function() { console.log('stuff'); }); grunt.tasks(['default']); 

花了很多时间,最后我已经为我工作了

  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); } }); 

如果你做以下的事情呢?

 grunt.tasks("default"); 

我在我的一个项目中创build了一个Grunt runner,它执行一些parsing,然后调用上面的一行。 几乎你已经回答了,但支持一个Gruntfile.js

我们正在使用Jenkins作为我们的构build。 所以这里是我们如何使用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