如何直接从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很新,所以我可能会遗漏一些明显的东西。我怀疑我用来“运行”任务的命令只是将它排队,并且实际上并没有开始运行。但是,我找不到手动运行文档的文档。
答案 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