niucloud/uni-app/scripts/build-all.cjs
wangchen14709853322 5ed9a0ba81 v2.0-beta-20260626
v2框架公测版测试流程请看v2.0-beta.md
2026-07-01 12:25:30 +08:00

70 lines
2.3 KiB
JavaScript

/**
* H5 分构建全量流水线
* shared → core → addons(并行) → assemble → publish
*/
const { spawnSync } = require('child_process')
const fs = require('fs')
const path = require('path')
const { ROOT, listAddonKeys } = require('./addon-utils.cjs')
const REPORT_PATH = path.join(ROOT, 'build-report.json')
function run(cmd, args, env = {}) {
const r = spawnSync(cmd, args, {
cwd: ROOT,
env: { ...process.env, ...env },
stdio: 'inherit',
shell: process.platform === 'win32'
})
return r.status ?? 1
}
async function buildAddonsParallel(keys, concurrency = 2) {
const success = []
const failed = []
const queue = [...keys]
async function worker() {
while (queue.length) {
const key = queue.shift()
if (!key) break
const code = run('node', [path.join(__dirname, 'build-addon.cjs'), key])
if (code === 0) success.push(key)
else failed.push({ key, error: 'build failed' })
}
}
const workers = Array.from({ length: Math.min(concurrency, keys.length) }, () => worker())
await Promise.all(workers)
return { success, failed }
}
async function main() {
const onlyKeys = process.argv.slice(2)
const keys = onlyKeys.length ? onlyKeys : listAddonKeys()
console.log('[build-all] step 1/5: shared deps')
if (run('node', [path.join(__dirname, 'build-shared.cjs')]) !== 0) process.exit(1)
console.log('[build-all] step 2/5: core build')
if (run('node', [path.join(__dirname, 'build-core.cjs')]) !== 0) process.exit(1)
console.log(`[build-all] step 3/5: addon builds (${keys.length} addons)`)
const { success, failed } = await buildAddonsParallel(keys, 2)
fs.writeFileSync(REPORT_PATH, JSON.stringify({ success, failed, time: new Date().toISOString() }, null, 2) + '\n', 'utf-8')
console.log(`[build-all] addons: ${success.length} ok, ${failed.length} failed`)
console.log('[build-all] step 4/5: assemble')
if (run('node', [path.join(__dirname, 'assemble-wap.cjs')]) !== 0) process.exit(1)
console.log('[build-all] step 5/5: publish post-process')
if (run('node', [path.join(ROOT, 'publish.cjs'), 'h5', 'build']) !== 0) process.exit(1)
console.log('[build-all] complete')
}
main().catch((e) => {
console.error(e)
process.exit(1)
})