在另一个文件中包含 G运行tfile 和 运行 任务

Include Gruntfile and run a task in an another file

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

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

G运行tfile(我要运行"archive"任务)

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

Other file : (我尝试了一个require,它似乎可以工作,但是我不能运行 G运行tfile的"archive"任务。)

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

你知道我怎么能把我的 g运行t 文件中的任务 运行 放到另一个文件中吗? (函数 printLogo() 正在运行,所以我确定包含 G运行tfile)

非常感谢(我是 G运行 的初学者,如有遗漏,请见谅)

您可以 运行 来自节点的命令。这样你就不必担心依赖关系等等。你只需像往常一样生成 g运行t,除了以编程方式。

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

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

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

然后您可以从您的 Gruntfile 的任务中调用该图书馆,并且您也可以从您的 /create 路线中调用您的图书馆。

您可以使用 grunt-hub 插件:

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