build: parallelize multi package builds

This commit is contained in:
Evan You 2020-12-03 13:22:28 -05:00
parent df48fc225a
commit 3016b811b8

View File

@ -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) {