89 lines
2.8 KiB
JavaScript
89 lines
2.8 KiB
JavaScript
/**
|
||
* 从根目录 pages.json 重写各端微信小程序 app.json,并清理已删除组件残留(如 GlobalNoticePush)。
|
||
* 解决:主包 app.json 被错误合并为仅有 usingComponents、pages 为空(微信报错)。
|
||
*
|
||
* 手动:node scripts/fix-mp-app-json.cjs
|
||
* 或:npm run mp:fix-app-json
|
||
* 编译时:由 vue.config.js 在构建完成后自动执行(若 HBuilderX 走 vue-cli 则生效)。
|
||
*/
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
|
||
const root = path.join(__dirname, '..')
|
||
const sourceVue = path.join(root, 'common/components/GlobalNoticePush.vue')
|
||
|
||
function walkRemoveGhost(dir) {
|
||
if (!fs.existsSync(dir)) return
|
||
const names = fs.readdirSync(dir, { withFileTypes: true })
|
||
for (const n of names) {
|
||
const p = path.join(dir, n.name)
|
||
if (n.isDirectory()) {
|
||
walkRemoveGhost(p)
|
||
} else if (/GlobalNoticePush\./.test(n.name)) {
|
||
try {
|
||
fs.unlinkSync(p)
|
||
console.log('[fix-mp] 删除残留:', path.relative(root, p))
|
||
} catch (e) {}
|
||
}
|
||
}
|
||
}
|
||
|
||
function removeGhostGlobalNotice() {
|
||
if (fs.existsSync(sourceVue)) return
|
||
// 源码已无该组件,删除 dist 里旧产物,避免合并器再次引用
|
||
const candidates = [
|
||
path.join(root, 'unpackage/dist/dev/mp-weixin/common/components'),
|
||
path.join(root, 'unpackage/dist/build/mp-weixin/common/components'),
|
||
]
|
||
for (const c of candidates) {
|
||
walkRemoveGhost(c)
|
||
}
|
||
// 旧 sourcemap
|
||
const sm = path.join(root, 'unpackage/dist/dev/.sourcemap/mp-weixin/common/components')
|
||
walkRemoveGhost(sm)
|
||
}
|
||
|
||
function buildPayload() {
|
||
const pj = JSON.parse(fs.readFileSync(path.join(root, 'pages.json'), 'utf8'))
|
||
const gs = pj.globalStyle || {}
|
||
const window = {
|
||
navigationBarTextStyle: gs.navigationBarTextStyle || 'black',
|
||
navigationBarTitleText: gs.navigationBarTitleText || '',
|
||
navigationBarBackgroundColor: gs.navigationBarBackgroundColor || '#F8F8F8',
|
||
backgroundColor: gs.backgroundColor || '#F8F8F8',
|
||
}
|
||
return {
|
||
pages: pj.pages.map((p) => p.path),
|
||
window,
|
||
subPackages: (pj.subPackages || []).map((sp) => ({
|
||
root: sp.root,
|
||
pages: sp.pages.map((p) => p.path),
|
||
})),
|
||
style: 'v2',
|
||
}
|
||
}
|
||
|
||
function writeAppJson(outPath, payload) {
|
||
fs.mkdirSync(path.dirname(outPath), { recursive: true })
|
||
fs.writeFileSync(outPath, JSON.stringify(payload, null, '\t'), 'utf8')
|
||
console.log('[fix-mp] 已写入', path.relative(root, outPath))
|
||
}
|
||
|
||
function main() {
|
||
removeGhostGlobalNotice()
|
||
const payload = buildPayload()
|
||
// 必写 dev(可 mkdir;首次编译后也能用)
|
||
writeAppJson(path.join(root, 'unpackage/dist/dev/mp-weixin/app.json'), payload)
|
||
const buildDir = path.join(root, 'unpackage/dist/build/mp-weixin')
|
||
if (fs.existsSync(buildDir)) {
|
||
writeAppJson(path.join(buildDir, 'app.json'), payload)
|
||
}
|
||
}
|
||
|
||
try {
|
||
main()
|
||
} catch (e) {
|
||
console.error('[fix-mp] 失败:', e)
|
||
process.exit(1)
|
||
}
|