niucloud/uni-app/scripts/build-core.cjs
wangchen14709853322 6d9c8ff7f5 v2.0-beta-20260626
v2框架公测版测试流程请看v2.0-beta.md
2026-07-01 12:15:20 +08:00

146 lines
2.8 KiB
JavaScript

/**
* H5 Core 构建
*/
const fs = require('fs')
const { spawnSync } = require('child_process')
const path = require('path')
const { ROOT, PAGES_JSON } = require('./addon-utils.cjs')
const PAGES_BACKUP = path.join(ROOT, '.build', 'pages.full.backup.json')
const PAGES_CORE = path.join(ROOT, '.build', 'pages.core.json')
function run(cmd, args, env = {}) {
const r = spawnSync(cmd, args, {
cwd: ROOT,
env: { ...process.env, UNI_PLATFORM: 'h5', BUILD_MODE: 'core', ...env },
stdio: 'inherit',
shell: process.platform === 'win32'
})
return r.status ?? 1
}
function swapPagesJson(useCore, rawBackup) {
if (useCore) {
// 保存原始内容(保留注释),避免被后续构建覆盖
rawBackup = fs.readFileSync(PAGES_JSON, 'utf-8')
fs.copyFileSync(PAGES_CORE, PAGES_JSON)
console.log('[build-core] swapped pages.json -> pages.core.json')
return rawBackup
} else if (rawBackup) {
fs.writeFileSync(PAGES_JSON, rawBackup, 'utf-8')
console.log('[build-core] restored pages.json (with comments)')
}
}
run('node', [path.join(__dirname, 'preflight-build.cjs')])
console.log('[build-core] generate diy component registry')
let code = run('node', [path.join(__dirname, 'generate-diy-registry.cjs')])
if (code !== 0) process.exit(code)
console.log('[build-core] diy-group uses diy-dynamic-bridge (no split vue generation)')
console.log('[build-core] generate addon component stubs (non-diy only)')
code = run('node', [path.join(__dirname, 'generate-addon-stubs.cjs')])
if (code !== 0) process.exit(code)
console.log('[build-core] generate split pages + bridge files')
code = run('node', [path.join(__dirname, 'generate-split-pages.cjs')])
if (code !== 0) process.exit(code)
code = run('node', [path.join(__dirname, 'clean-core.cjs')])
if (code !== 0) process.exit(code)
const pagesBackup = swapPagesJson(true)
code = run('node', [path.join(__dirname, 'swap-addon-pages.cjs'), 'apply'])
if (code !== 0) {
swapPagesJson(false, pagesBackup)
process.exit(code)
}
try {
console.log('[build-core] vite core build (framework only, addon pages -> bridge)')
code = run('npx', ['vite', 'build', '--config', 'vite.config.core.ts'], {
NODE_OPTIONS: '--max-old-space-size=4096'
})
} finally {
run('node', [path.join(__dirname, 'swap-addon-pages.cjs'), 'restore'])
swapPagesJson(false, pagesBackup)
}
if (code !== 0) {
console.error('[build-core] FAILED')
process.exit(code)
}
code = run('node', [path.join(__dirname, 'purge-core-addon-leaks.cjs')])
if (code !== 0) process.exit(code)
code = run('node', [path.join(__dirname, 'patch-core-locale-external.cjs'), path.join(ROOT, 'dist', '.core', 'h5')])
if (code !== 0) process.exit(code)
console.log('[build-core] OK -> dist/.core/h5/')