javascript - 包含多个生成任务的 Grunt 任务将只运行第一个任务

标签 javascript gruntjs spawn

我设置了以下三个任务,它们使用 grunt.util.spawn 来处理各种 Git 任务:

grunt.registerTask('git-add', function() {
  grunt.util.spawn({
    cmd : 'git',
    args: ['add', '.'],
  });
});

grunt.registerTask('git-commit', function(message) {
  grunt.util.spawn({
    cmd : 'git',
    args: ['commit', '-m', message],
  });
});

grunt.registerTask('git-push', function(origin, branch) {
  grunt.util.spawn({
    cmd : 'git',
    args: ['push', origin, branch],
  });
});

运行这些单独的工作作为方面,所以通过运行:

$ grunt git-add
$ grunt git-commit:"commit message"
$ grunt git-push:origin:"branch name"

我可以成功提交并推送我的更改。那么,当将这 3 个任务组合成它们自己的任务时,为什么只有第一个任务 (git-add) 得到运行?

var target = grunt.option('target');

grunt.registerTask('push-feature', [
  'git-add',
  'git-commit:' + target,
  'git-push:origin:feature/' + target
]);

我应该能够运行 $ grunt push-feature --target=12345,假设我的分支被称为 12345,运行所有这 3 个任务,但只有第一个 git-add 任务运行。如果我删除 git-add 任务,下一个 (git-commit) 是唯一执行的任务。

我错过了什么才能让这 3 个任务按顺序运行?

最佳答案

这可能是由于异步问题。

尝试在声明任务时将它们标记为异步,并使用 spawn 的回调选项。这是您的第一个任务的示例:

grunt.registerTask('git-add', function () {

    var done = this.async(); // Set the task as async.

    grunt.util.spawn({
        cmd: 'git',
        args: ['add', '.']   // See comment below about this line
    }, done);                // Add done as the second argument here.
});

另请注意,您有一个额外的逗号,可能会干扰操作:

args: ['add', '.'], // <- this comma should be dropped.

关于javascript - 包含多个生成任务的 Grunt 任务将只运行第一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593273/

相关文章:

javascript - 每次运行时清空 javascript 函数中的所有变量

java - 独立的前端应用程序 - 构建和部署策略

css - Grunt,css min 来连接并缩小所有 css

node.js - nodejs child_process.spawnSync 或 child_process.spawn 包裹在返回输出的可屈服生成器中

Python:使用 mpi4py 通过 spawn 将数组广播到其他脚本

javascript - ScrollMagic:将元素粘贴到粘性/固定元素的底部

javascript - 通过 ListView 从数据库中删除多个选定项目?

javascript - 学习 JavaScript、jQuery 和 JSON

javascript - 类型错误 : invalid 'in' operand a error when calling jQuery each inside RequireJS module

windows - 在 Node JS 上生成 (Windows Server 2012)