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

120 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 微信小程序框架包单独编译 → dist/build/mp-core/
*/
const fs = require('fs')
const path = require('path')
const {
ROOT,
PAGES_JSON,
BUILD_DIR,
MP_OUT_BUILD,
MP_CORE_DIR,
MP_FRAMEWORK_DIR,
MP_LOCK_PATH,
makeBuildId,
runUniMpBuild,
snapshotMpBuild,
collectCommonManifest,
readJson,
writeJson,
stripOrphanAddonSubpackages,
installMergeScriptToFramework,
applyFrameworkAppJsonSubPackages,
loadFrameworkNonAddonSubPackages
} = require('./mp-utils.cjs')
const { patchDiyGroupInlineComponents } = require('./mp-diy-group-inline.cjs')
const {
installNativeDiyBridgeRouter,
buildAppDiyRegistryMap
} = require('./mp-diy-bridge-merge.cjs')
const { scanAllDiyComponents } = require('./diy-component-scan.cjs')
const PAGES_BACKUP = path.join(BUILD_DIR, 'pages.full.backup.json')
const PAGES_FRAMEWORK = path.join(BUILD_DIR, 'pages.framework.json')
function swapPagesJson(useFramework, rawBackup) {
if (useFramework) {
// 保存原始内容到内存(保留注释),不依赖磁盘备份文件
rawBackup = fs.readFileSync(PAGES_JSON, 'utf-8')
fs.copyFileSync(PAGES_FRAMEWORK, PAGES_JSON)
console.log('[build-mp-framework] swapped pages.json -> pages.framework.json')
return rawBackup
} else if (rawBackup) {
fs.writeFileSync(PAGES_JSON, rawBackup, 'utf-8')
console.log('[build-mp-framework] restored pages.json (with comments)')
}
}
function main() {
const buildId = makeBuildId('mp-framework')
require('./generate-mp-framework-pages.cjs')
require('./generate-diy-registry.cjs').generateDiyRegistry()
const { generateDiyDynamicBridgeMp } = require('./generate-diy-dynamic-bridge-mp.cjs')
generateDiyDynamicBridgeMp({ target: 'app' })
generateDiyDynamicBridgeMp({ target: 'router' })
const pagesBackup = swapPagesJson(true)
let code = 0
let buildOk = false
try {
console.log('[build-mp-framework] uni build -p mp-weixin ...')
code = runUniMpBuild()
if (code !== 0) {
console.error('[build-mp-framework] FAILED')
process.exit(code)
}
if (!fs.existsSync(MP_OUT_BUILD)) {
console.error('[build-mp-framework] missing output:', MP_OUT_BUILD)
process.exit(1)
}
const stripped = stripOrphanAddonSubpackages(MP_OUT_BUILD)
if (stripped) {
console.log(`[build-mp-framework] removed ${stripped} orphan addon plugin dir(s)`)
}
snapshotMpBuild(MP_OUT_BUILD, MP_CORE_DIR, {
kind: 'framework',
buildId,
commonManifest: collectCommonManifest(MP_OUT_BUILD)
})
applyFrameworkAppJsonSubPackages(MP_CORE_DIR)
writeJson(
path.join(MP_CORE_DIR, 'mp-framework-subpackages.json'),
loadFrameworkNonAddonSubPackages()
)
installNativeDiyBridgeRouter(MP_CORE_DIR, buildAppDiyRegistryMap(scanAllDiyComponents))
console.log('[build-mp-framework] installed native diy-dynamic-bridge router (merge-patchable)')
const appRegistry = buildAppDiyRegistryMap(scanAllDiyComponents)
const inlineResult = patchDiyGroupInlineComponents(MP_CORE_DIR, appRegistry)
console.log(
`[build-mp-framework] diy-group inlined ${inlineResult.count} app diy component(s) (no bridge hop)`
)
const { applyMpWeixinPost } = require('./mp-weixin-post.cjs')
applyMpWeixinPost(MP_CORE_DIR)
const meta = readJson(path.join(MP_CORE_DIR, 'mp-build-meta.json'))
const lock = fs.existsSync(MP_LOCK_PATH) ? readJson(MP_LOCK_PATH) : {}
lock.framework = {
buildId,
gitCommit: meta.gitCommit,
time: new Date().toISOString(),
dir: 'dist/build/mp-core'
}
writeJson(MP_LOCK_PATH, lock)
installMergeScriptToFramework(MP_CORE_DIR)
console.log(`[build-mp-framework] OK -> ${path.relative(ROOT, MP_CORE_DIR)}/ (${buildId})`)
console.log('[build-mp-framework] 框架包可直接导入开发者工具(仅主包,无插件分包)')
console.log('[build-mp-framework] 添加插件后合并:')
console.log(' 1. 将插件包放入 dist/build/mp-core/mp-addons/{key}/')
console.log(' 或 npm run build:mp-weixin:addon shop (自动输出到 mp-addons/shop/')
console.log(' 2. cd dist/build/mp-core && node merge-mp-addon.cjs')
buildOk = true
} finally {
swapPagesJson(false, pagesBackup)
if (buildOk) {
require('./cleanup-diy-dynamic-bridge-src.cjs').cleanupAddonDiyBridgeSrc()
}
}
}
main()