在Grunt中逐个运行任务

3

我曾以为在grunt.registerTask(taskName,taskList)中,任务列表会按顺序运行(即一个完成后再进行下一个)。 我猜这不是这种情况?

考虑到这个任务:

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

我应该如何确保在运行copy任务之前,concat/ngconstant/targethtml任务已经完成?我遇到了问题,因为ngconstant在concat完成之前就开始运行了。
编辑:任务未按顺序运行的详细信息。
'concat:local'会创建一个aggregate.json文件,该文件由'ngconstant:common'使用。如果我删除现有的aggregate.json文件,则ngconstant:common任务会出错,因为缺少aggregate.json文件(但是文件确实会在ngconstant运行后创建)。此外,如果我不删除文件,只是做一些更改,例如更改concat使用的源文件中的版本号,则ngconstant创建的文件不会捕获更改,因为它不会等待concat创建新的aggregate.json。
编辑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
Grunt按顺序运行任务列表,所以您的问题可能出在其他地方。是什么症状让您觉得它没有按顺序运行? - Xavier Priour
好的,这正是我想的,所以我会三重检查所有任务。我已经在问题中添加了细节。 - mrshickadance
从您的详细信息来看,似乎是在观察文件时出现了问题,而不是直接调用“local-debug”。请发布您的“watch”任务的完整配置。 - Xavier Priour
当我手动调用local-debug任务时,它会发生,而不是在任何监视运行之外。 - mrshickadance
嗯,你能发布一下你的concat:local配置吗? - Xavier Priour
好的,我添加了concat和ngconstant。谢谢您的查看。 - mrshickadance
1个回答

2

好的,明白了。

Grunt的工作流程如下:

  1. 读取整个Gruntfile并评估配置
  2. 然后构建要运行的任务列表
  3. 接着按顺序执行任务列表中的任务

因此,在1.期间,会读取您的文件aggregate-config.json并将config.ngconstant.common.constants设置为其当前值(来自上一次运行的结果)。 然后执行3.,生成一个新的aggregate-config.json,但不使用它(在任务之间不重新读取配置)。

但是,如果您向ngconstant.constants传递字符串,它将被解释为文件名,并在运行任务时(步骤3)读取,从而获得您想要的结果:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接