|
|
@@ -50,9 +50,25 @@ async function run() {
|
|
|
}
|
|
|
|
|
|
async function buildAll(targets) {
|
|
|
- for (const target of targets) {
|
|
|
- await build(target)
|
|
|
+ await runParallel(require('os').cpus().length, targets, build)
|
|
|
+}
|
|
|
+
|
|
|
+async function runParallel(maxConcurrency, source, iteratorFn) {
|
|
|
+ const ret = []
|
|
|
+ const executing = []
|
|
|
+ for (const item of source) {
|
|
|
+ const p = Promise.resolve().then(() => iteratorFn(item, source))
|
|
|
+ ret.push(p)
|
|
|
+
|
|
|
+ if (maxConcurrency <= source.length) {
|
|
|
+ const e = p.then(() => executing.splice(executing.indexOf(e), 1))
|
|
|
+ executing.push(e)
|
|
|
+ if (executing.length >= maxConcurrency) {
|
|
|
+ await Promise.race(executing)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ return Promise.all(ret)
|
|
|
}
|
|
|
|
|
|
async function build(target) {
|