mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-07-18 18:27:43 +00:00
146 lines
2.8 KiB
JavaScript
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/')
|
|
|