在Grunt中按顺序运行任务

时间:2015-09-16 18:28:53

标签: gruntjs grunt-contrib-concat grunt-contrib-copy

我的印象是在grunt.registerTask(taskName,taskList)中,taskList将按顺序运行(即一个完成,然后移动到下一个)。我猜那不是这样吗?

鉴于此任务:

grunt.registerTask('local-debug', [
    'clean',
    'concat:local',
    'ngconstant:common',
    'targethtml:local',
    'copy:debug'
]);

如何在运行副本之前确保concat / ngconstant / targethtml已完成?我有问题因为ngconstant在concat完成之前运行了。

编辑:任务未按顺序运行的详细信息。

'concat:local'创建'ngconstant:common'使用的aggregate.json文件。如果我删除现有的aggregate.json文件,则ngconstant:常见任务错误,因为缺少aggregate.json文件(但是在ngconstant运行之后,文件确实被创建)。此外,如果我不删除文件,只是更改类似于更改concat使用的源文件中的版本号,则ngconstant创建的文件不会获取更改,因为它不会等到新聚合。 json由concat创建。

编辑2:任务代码

concat: {
        options: {
            banner: '{"appConfig": {',
            footer: "}}",
            separator: ','
        },
        local: {
            src: ["app/config/common-config.json", "app/config/local.json"],
            dest: "app/config/aggregate-config.json"
        }
    },
ngconstant: {
        options: {
            space: '  ',
            wrap: '(function(){\n\n"use strict";\n\n {%= __ngModule %}\n\n}());',
            name: 'CoreConfig',
            dest: 'app/scripts/config.js'
        },
        common: {
            constants: grunt.file.readJSON('app/config/aggregate-config.json')
        }
}

1 个答案:

答案 0 :(得分:2)

好的,明白了。

Grunt遵循以下步骤:

  1. 读取整个Grunt文件,配置评估
  2. 然后构建要运行的任务列表
  3. 然后它遍历列表,按顺序运行任务
  4. 所以会发生的情况是,您的文件aggregate-config.json在1. 1期间被读取并将config.ngconstant.common.constants设置为当前值(来自您的PREVIOUS运行的结果)。 然后3.发生,并生成一个新的aggregate-config.json但未使用(在任务之间不重新读取配置)。

    但是,如果您将字符串传递给ngconstant.constants,则会将其解释为文件名,并在运行任务时读取 (步骤3)你想要的结果:

    ngconstant: {
      common: {
        constants: 'app/config/aggregate-config.json'
      }
    }