如何 运行 G运行t 任务同步(以编程方式)?
How to run Grunt tasks synchronously (programmatically)?
我想要一个任务,其中 运行 个子任务在一个循环中同步进行,并且当一个子任务更改标志的值时,这样的循环被打破。
这是我尝试做的示例:
grunt.registerTask('complexTask', 'Run sub-tasks synchronously.', function () {
var value;
do {
// 'changeValueTask' task sets 'importantValue'
grunt.task.run(['preTask', 'changeValueTask', 'postTask']);
value = grunt.config('importantValue');
} while (!value);
// ... end task
});
我想从中得到的是
- 确保每组任务(
['preTask', 'changeValueTask', 'postTask']
)是运行(按顺序)
- 以及跳出循环的最佳方式
有可能实现吗?
注意:经过一些研究,我能找到的最接近的东西是 G运行t 允许定义给定的 task B
如果 task A
没有完成(使用 grunt.task.requires: grunt.task.requires('A')
).
这就是我们修复它的方式(跟随 Bergi 评论的脚步):
与其尝试在 G运行t 上显式循环和 运行 任务,不如使用 G运行t 的自然任务链机制来确保一个任务一个接一个执行,像这样
grunt.task.run(['preTask', 'changeValueTask', 'postTask']);
假设这样,我们在每个 postTask
的末尾使用递归来检查我们是否需要再次 运行 它(通过检查 importantValue
标志) - 我们实现了这一点一个单独的任务
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
grunt.registerTask('taskCheck', 'Recursive task.', function() {
var value = grunt.config('importantValue');
if (value) {
// done... work with value
} else {
// keep running
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
}
});
作为一项改进,我们可以 bootstrap 对任务进行整个递归以避免不必要的混乱并隔离此循环行为:
grunt.registerTask('runValueTask', 'Bootstrap to start recursion.', function() {
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
});
grunt.registerTask('taskCheck', 'Recursive task.', function() {
var value = grunt.config('importantValue');
if (value) {
// done... work with value
} else {
// keep running
grunt.task.run('runValueTask');
}
});
我想要一个任务,其中 运行 个子任务在一个循环中同步进行,并且当一个子任务更改标志的值时,这样的循环被打破。
这是我尝试做的示例:
grunt.registerTask('complexTask', 'Run sub-tasks synchronously.', function () {
var value;
do {
// 'changeValueTask' task sets 'importantValue'
grunt.task.run(['preTask', 'changeValueTask', 'postTask']);
value = grunt.config('importantValue');
} while (!value);
// ... end task
});
我想从中得到的是
- 确保每组任务(
['preTask', 'changeValueTask', 'postTask']
)是运行(按顺序) - 以及跳出循环的最佳方式
有可能实现吗?
注意:经过一些研究,我能找到的最接近的东西是 G运行t 允许定义给定的 task B
如果 task A
没有完成(使用 grunt.task.requires: grunt.task.requires('A')
).
这就是我们修复它的方式(跟随 Bergi 评论的脚步):
与其尝试在 G运行t 上显式循环和 运行 任务,不如使用 G运行t 的自然任务链机制来确保一个任务一个接一个执行,像这样
grunt.task.run(['preTask', 'changeValueTask', 'postTask']);
假设这样,我们在每个 postTask
的末尾使用递归来检查我们是否需要再次 运行 它(通过检查 importantValue
标志) - 我们实现了这一点一个单独的任务
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
grunt.registerTask('taskCheck', 'Recursive task.', function() {
var value = grunt.config('importantValue');
if (value) {
// done... work with value
} else {
// keep running
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
}
});
作为一项改进,我们可以 bootstrap 对任务进行整个递归以避免不必要的混乱并隔离此循环行为:
grunt.registerTask('runValueTask', 'Bootstrap to start recursion.', function() {
grunt.task.run(['preTask', 'changeValueTask', 'postTask', 'taskCheck']);
});
grunt.registerTask('taskCheck', 'Recursive task.', function() {
var value = grunt.config('importantValue');
if (value) {
// done... work with value
} else {
// keep running
grunt.task.run('runValueTask');
}
});