congming_huose-apk/vue.config.js

68 lines
2.1 KiB
JavaScript
Raw Normal View History

/**
* 微信小程序构建完成后用 pages.json 覆盖写 app.json并清理已删除组件的残留文件
* 避免主包 app.json 被误合并为仅有 usingComponents pages
* HBuilderX 若走 vue-cli 链时会加载本文件纯内置编译无此文件时请执行 npm run mp:fix-app-json
*/
const path = require('path')
const fs = require('fs')
const { execFileSync } = require('child_process')
const fixScript = path.join(__dirname, 'scripts', 'fix-mp-app-json.cjs')
/** 从 manifest.json 解析 versionName支持文件内注释 */
function readManifestVersionName() {
const manifestPath = path.join(__dirname, 'manifest.json')
try {
const raw = fs.readFileSync(manifestPath, 'utf8')
const nameMatch = raw.match(/"versionName"\s*:\s*"([^"]+)"/)
if (nameMatch) return nameMatch[1]
} catch (e) {
console.warn('[vue.config] read manifest version:', e && e.message)
}
return '1.0.1'
}
function runFix() {
if (!fs.existsSync(fixScript)) return
try {
execFileSync(process.execPath, [fixScript], { cwd: __dirname, stdio: 'pipe' })
} catch (e) {
// 不打断主构建
}
}
class FixMpWxAppJsonPlugin {
apply(compiler) {
compiler.hooks.done.tap('FixMpWxAppJson', (stats) => {
if (stats && stats.hasErrors && stats.hasErrors()) return
runFix()
})
}
}
module.exports = {
chainWebpack(config) {
try {
if (config && typeof config.plugin === 'function') {
const manifestVersion = readManifestVersionName()
config.plugin('define').tap((definitions) => {
const def = definitions[0] || {}
def['__APP_MANIFEST_VERSION__'] = JSON.stringify(manifestVersion)
definitions[0] = def
return definitions
})
}
} catch (e) {
console.warn('[vue.config] define manifest version:', e && e.message)
}
try {
if (!config || typeof config.plugin !== 'function') return
const name = 'fix-mp-wx-app-json'
if (config.plugins && config.plugins.has && config.plugins.has(name)) return
config.plugin(name).use(FixMpWxAppJsonPlugin, [])
} catch (e) {
console.warn('[fix-mp] vue.config 链式插件未生效(可改用手动执行 npm run mp:fix-app-json', e && e.message)
}
},
}