包含Gruntfile并在另一个文件中运行任务

时间:2015-04-10 15:07:14

标签: node.js gruntjs

我有一个使用Grunt的应用程序,我在终端中启动,我想通过另一个应用程序运行任务。 所以我想知道如何将我的Gruntfile.js包含到这个其他应用程序中,并运行任务。

现在这个新应用程序非常基本,使用NodeJS创建一个简单的本地网页,并带有一个启动任务的按钮。

Gruntfile(我想运行"存档"任务)

module.exports = function (grunt) {
require('time-grunt')(grunt);
require('jit-grunt')(grunt, {
    ngtemplates: "grunt-angular-templates"
});

var Generator = require("./generator.js")(grunt);
var generator = new Generator();
generator.printLogo();

// Build
grunt.registerTask("build", function (fileType) {
    //definition of build task
    grunt.task.run(tasks);
});

// Archive Task.
grunt.registerTask("archive", ["build", "compress", "clean:post-rsync"]);
};

其他文件:(我尝试了一个要求,它似乎有效,但我无法运行Gruntfile的"存档"任务。)

 var grunt = require('grunt');
 var gruntfile = require('./Gruntfile.js')(grunt);
 var app = express();

 app.get('/', function(req, res){
    res.render('test.ejs');
 });

 app.post('/create', function(req, res){
     //run grunt task "archive" here

     //gruntfile.grunt.registerTask("archive", ["build"]);
     res.redirect('/');
 });

 app.listen(8080);

你知道我怎么能在我的gruntfile中运行这个其他文件中的任务? (函数printLogo()正在运行,因此我确定包含Gruntfile)

非常感谢(我是Grunt的初学者,很抱歉,如果我错过了一些微不足道的事情)

3 个答案:

答案 0 :(得分:0)

您只需从节点运行命令即可。这样你就不必担心依赖关系了。除了编程之外,你就像通常那样产生咕噜声。

var spawn = require('child_process').spawn;

// This will run the 'archive' task of grunt
spawn('grunt', ['archive'], {
    cwd: 'path/to/grunt/project'
});

答案 1 :(得分:0)

Grunt是一个命令行工具,这里最干净的方法是重构你的Gruntfile并将你的任务逻辑提取到库中。

然后,您可以通过Gruntfile任务调用该库,也可以通过/create路径调用您的库。

答案 2 :(得分:0)

您可以使用grunt-hub插件:

grunt.initConfig({
  hub: {
    all: {
      src: ['../*/Gruntfile.js'],
      tasks: ['jshint', 'nodeunit'],
    },
  },
});