From: Evan You Date: Thu, 3 Dec 2020 18:22:28 +0000 (-0500) Subject: build: parallelize multi package builds X-Git-Tag: v3.0.5~42 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3016b811b8bc540952c4f64c5ace6442ac607cc5;p=thirdparty%2Fvuejs%2Fcore.git build: parallelize multi package builds --- diff --git a/scripts/build.js b/scripts/build.js index f3a66051b0..26e287c432 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -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) {