mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-07-17 09:47:42 +00:00
120 lines
4.6 KiB
JavaScript
120 lines
4.6 KiB
JavaScript
/**
|
||
* 微信小程序框架包单独编译 → 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()
|