Files
soul-yongping/scripts/merge-kbone-to-miniprogram.js

86 lines
2.6 KiB
JavaScript
Raw Normal View History

/**
* newapp 构建产物 dist/mp 合并到项目根 miniprogram/
* 保留 miniprogram custom-tab-barproject.config.jsonsitemap.jsonapp.js不覆盖壳的 app.js
* 用法node scripts/merge-kbone-to-miniprogram.js
*/
const fs = require('fs')
const path = require('path')
const root = path.resolve(__dirname, '..')
const distMp = path.join(root, 'newapp', 'dist', 'mp')
const miniprogram = path.join(root, 'miniprogram')
if (!fs.existsSync(distMp)) {
console.error('未找到 newapp/dist/mp请先在 newapp 目录执行: npm run build:mp')
process.exit(1)
}
if (!fs.existsSync(miniprogram)) {
console.error('未找到 miniprogram 目录')
process.exit(1)
}
function copyDir(src, dest) {
if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true })
const entries = fs.readdirSync(src, { withFileTypes: true })
for (const e of entries) {
const s = path.join(src, e.name)
const d = path.join(dest, e.name)
if (e.isDirectory()) {
copyDir(s, d)
} else {
fs.copyFileSync(s, d)
}
}
}
// 要保留的 miniprogram 文件/目录(合并前备份,合并后覆盖回去)
const keep = ['custom-tab-bar', 'project.config.json', 'sitemap.json', 'app.js']
const backupDir = path.join(root, '.miniprogram-backup')
if (!fs.existsSync(backupDir)) fs.mkdirSync(backupDir, { recursive: true })
for (const name of keep) {
const p = path.join(miniprogram, name)
if (fs.existsSync(p)) {
const stat = fs.statSync(p)
const dest = path.join(backupDir, name)
if (stat.isDirectory()) {
if (fs.existsSync(dest)) fs.rmSync(dest, { recursive: true })
copyDir(p, dest)
} else {
fs.copyFileSync(p, dest)
}
}
}
// 用 dist/mp 内容覆盖 miniprogram除保留项
const distEntries = fs.readdirSync(distMp, { withFileTypes: true })
for (const e of distEntries) {
const s = path.join(distMp, e.name)
const d = path.join(miniprogram, e.name)
if (e.isDirectory()) {
if (keep.includes(e.name)) continue
if (fs.existsSync(d)) fs.rmSync(d, { recursive: true })
copyDir(s, d)
} else {
if (keep.includes(e.name)) continue
fs.copyFileSync(s, d)
}
}
// 把保留项还原
for (const name of keep) {
const backup = path.join(backupDir, name)
const dest = path.join(miniprogram, name)
if (fs.existsSync(backup)) {
const stat = fs.statSync(backup)
if (stat.isDirectory()) {
if (fs.existsSync(dest)) fs.rmSync(dest, { recursive: true })
copyDir(backup, dest)
} else {
fs.copyFileSync(backup, dest)
}
}
}
console.log('已合并 newapp/dist/mp -> miniprogram/,并保留 custom-tab-bar、project.config.json、sitemap.json、app.js')