javascript - Gulp 在源文件数组上顺序执行相同任务
问题描述
我的 gulp 文件的简化版本如下所示:
stylusFiles=[...];
gulp.task("stylus", function(done){
global.stopOnError = true;
stylusFiles.forEach((file) => {
executeStylus(file.name, file.src, Date.now());
});
done();
});
javascFiles = [firstjs, secondjs];
gulp.task("firstcompile", function (done) {
createBundle(firstjs);
done();
});
gulp.task("secondcompile", function (done) {
createBundle(secondjs);
done();
});
gulp.task("compile", function(done) {
setVersion();
global.stopOnError = true;
stylusFiles.forEach((file) => {
executeStylus(file.name, file.src, Date.now());
});
createBundles(javascFiles);
done();
});
gulp.task("seqcompile",
gulp.parallel("stylus",
gulp.series("firstcompile","secondcompile"),
function(done) {
setVersion();
global.stopOnError = true;
done();
}
));
手写笔编译以并发方式工作(输出顺序!= 代码中手写笔文件的顺序)。如果我在任何单个 JS 文件上运行 gulp,它就可以工作。我尝试强制顺序执行的原因是gulp 编译在全套 JS 文件上要么因“堆内存不足”错误而崩溃(即使在 16 GB 工作站上使用 --max_old_stack_size=12000)或无限期运行(>10 h) 在较大的 JS 文件上(原始大小 <=24 MB)。但是,在示例中的编写方式,gulp seqcompile仍然不是顺序的,因为输出顺序!= 代码中 JS 文件的顺序,并且在我的远程实例上,gulp 仍然无限期运行(至少我现在已经成功16 GB 工作站)。
- 如何强制顺序执行?
- 能写出类似的东西就好了
gulp.series(javascFiles)
。 - 我不确定 setVersion在stylus 和 js 编译之前是否只运行一次,因为它应该。
解决方案
如何强制顺序执行?
那么你可以尝试使用外部包来强制它。由于您没有提及您使用的是什么类型的包,我只是假设您没有使用gulp-sequence
. 可以在这里找到。
这个包直接允许你编写gulp.task('sequence-1', gulpSequence(['a', 'b'], 'c', ['d', 'e'], 'f'))
可以顺序运行的任务。
您可以尝试的另一件事是使用命令gulp.series
。可以在此Stack Overflow 答案中找到更好的解释。
能够编写类似 gulp.series(javascFiles) 的东西会很好。
确切地说,请参考我之前的观点。它已经在之前的 SO question 中描述过。
我不确定 setVersion 在 stylus 和 js 编译之前是否只运行一次,因为它应该。
只运行一次的 gulp 任务通常表明 gulp 无法确定它是否已完成第一次,因此 gulp 不会再次运行它。
你可以用来解决这个问题的另一件事是这个“gulp-once”包,它只通过文件一次,除非改变。
我希望这有帮助。
推荐阅读
- java - 想通过java获取嵌套的JSON数据(计数值)
- python - 为什么我被迫使用原始套接字来编写带有 BCC 的 ebpf 程序?
- regex - 如何在标签/子字符串之间查找多个字符串?
- sql - 循环遍历表中的字段
- scala - 当我使用 SparkStreaming 使用 Kafka 的消息时得到 NullPointerException
- reactxp - 如何在 reactXP 中将图像高度和宽度设置为 100%
- android - 如何从通知中删除“+999”?
- c# - IdentityServer4 角色的行为如何?
- android - 当 windowSoftInputMode=“adjustResize” 带有半透明动作/导航栏时,显示和隐藏键盘需要时间
- image - 如何根据我的预测获得 ROI 坐标?