直接从节点运行Grunt任务

Running a Grunt Task directly from Node

本文关键字:Grunt 任务 运行 节点      更新时间:2023-09-26

如何直接从Node执行Grunt任务而无需向CLI执行?

我有以下"POC"代码;但是,"stuff"永远不会被记录。

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在直接从Node运行时有很多问题。尤其是当grunt任务失败时,它会调用process.exit并很好地退出节点实例。我不建议尝试让它发挥作用。


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

更新代码:

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

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

我们使用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