运行 在 Grunt 中按顺序执行任务
Running tasks sequentially in Grunt
我的印象是,在 grunt.registerTask(taskName, taskList) 中,taskList 会按顺序 运行(即一个完成后进入下一个)。我猜不是这样吧?
鉴于此任务:
grunt.registerTask('local-debug', [
'clean',
'concat:local',
'ngconstant:common',
'targethtml:local',
'copy:debug'
]);
如何确保 concat/ngconstant/targethtml 在 运行 复制之前完成?我遇到问题是因为 ngconstant 在 concat 完成之前是 运行ning。
编辑:任务未按顺序 运行 的详细信息。
'concat:local' 创建一个 aggregate.json 文件供 'ngconstant:common' 使用。如果我删除现有的 aggregate.json 文件,ngconstant:common 任务会出错,因为缺少 aggregate.json 文件(但文件确实会在 ngconstant 运行s 之后创建)。此外,如果我不删除该文件,而只是进行更改,例如更改 concat 使用的源文件中的版本号,则 ngconstant 创建的文件不会接受更改,因为它不会等到新 aggregate.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')
}
}
好的,明白了。
G运行t 按照以下步骤工作:
- 它的整个 G运行t 文件被读取并且配置被评估
- 然后它将任务列表构建到 运行
- 然后它遍历列表,运行按顺序执行任务
所以发生的事情是,在 1. 期间,您的文件 aggregate-config.json
被读取并将 config.ngconstant.common.constants
设置为其 当前 值(您的结果上一个 运行)。
然后 3. 发生,并生成一个新的 aggregate-config.json
,但未使用(任务之间不会重新读取配置)。
但是如果你传递一个字符串给ngconstant.constants
,它会被解释为一个文件名并且当任务是[=39=时读取 ](第3步),得到你想要的结果:
ngconstant: {
common: {
constants: 'app/config/aggregate-config.json'
}
}
我的印象是,在 grunt.registerTask(taskName, taskList) 中,taskList 会按顺序 运行(即一个完成后进入下一个)。我猜不是这样吧?
鉴于此任务:
grunt.registerTask('local-debug', [
'clean',
'concat:local',
'ngconstant:common',
'targethtml:local',
'copy:debug'
]);
如何确保 concat/ngconstant/targethtml 在 运行 复制之前完成?我遇到问题是因为 ngconstant 在 concat 完成之前是 运行ning。
编辑:任务未按顺序 运行 的详细信息。
'concat:local' 创建一个 aggregate.json 文件供 'ngconstant:common' 使用。如果我删除现有的 aggregate.json 文件,ngconstant:common 任务会出错,因为缺少 aggregate.json 文件(但文件确实会在 ngconstant 运行s 之后创建)。此外,如果我不删除该文件,而只是进行更改,例如更改 concat 使用的源文件中的版本号,则 ngconstant 创建的文件不会接受更改,因为它不会等到新 aggregate.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')
}
}
好的,明白了。
G运行t 按照以下步骤工作:
- 它的整个 G运行t 文件被读取并且配置被评估
- 然后它将任务列表构建到 运行
- 然后它遍历列表,运行按顺序执行任务
所以发生的事情是,在 1. 期间,您的文件 aggregate-config.json
被读取并将 config.ngconstant.common.constants
设置为其 当前 值(您的结果上一个 运行)。
然后 3. 发生,并生成一个新的 aggregate-config.json
,但未使用(任务之间不会重新读取配置)。
但是如果你传递一个字符串给ngconstant.constants
,它会被解释为一个文件名并且当任务是[=39=时读取 ](第3步),得到你想要的结果:
ngconstant: {
common: {
constants: 'app/config/aggregate-config.json'
}
}