我有以下项目结构(monorepo有许多包)如何使用gulp同步执行相同的任务,每个文件夹执行一次(在带有子包的monorepo中)?
/pkgA
gulpfile.js
/pkgB
gulpfile.js
/pkgC
gulpfile.js
每个包都有它只是用来加载/shared/shared-gulp-tasks.js
重要一gulpfile.js
:我们要保持这种独立性(这样我就可以运行gulp whatever
只有给定的包,如果想要的话) - 即我不想从共享的gulp文件中删除现有的任务,我想重复使用它们。
如果我们想一次打造一切,我们同步运行一个任务是这样的:
bash for-each-package.sh "gulp package"
这确实有点像
cd pkgA
gulp package
cd pkgB
gulp package
cd pkgC
gulp package
然而,这是缓慢的,因为我每个包从头开始执行gulp
可执行文件,每次加载吞吐和所有需要的代码需要大约3秒。(我们有20多个子包)。
我要的是有根的gulpfile.js
定义的任务这将让我做
gulp package-all
的代码应该是这样的:
gulp.task('package-all', function(done) {
['pkgA', 'pkgB', 'pkgC'].forEach(function(pkgName) {
process.chdir(path.join(__dirname, pkgName));
// need to run 'package' task here, synchronously
// gulp.start('package'); is async
});
done();
}
注意,文件夹专用package
任务已经在共享的gulpfile中声明,我不想重写它。
问题是我想同步执行此操作,并且当所有文件夹完成处理后,请致电done()
。
选项探索至今:
gulp.run
已被弃用,gulp.start
是未公开的,一般不建议 他们不要在此情况下做什么工作(异步)runSequence
看起来很有希望,但我怎么会多次运行相同的任务,每个文件夹,与cd
到该文件夹之前
我知道我所要求的是与“吞噬方式”正交,但我不想重写我所有的任务。
什么是实现我的目标的好方法?