说明:项目分 正式版和测试版,分别部署在2个小程序,使用两个小程序appid,想通过『自定义发行』 发布在不同的小程序上
以下是package.json和modifyManifest.js 的配置
package.json:
{
"uni-app": {
"scripts": {
"wxMaster": {
"title": "微信-正式版",
"browser": "",
"env": {
"UNI_PLATFORM": "mp-weixin",
"WX-APPID": "wx********42",
"NODE_ENV": "MasterProduction",
"BASE_URL": ""
},
"define": {
"WX-MASTER": true
}
}
}
},
"scripts": {
"build:cli": "cross-env NODE_ENV=MasterProduction UNI_PLATFORM=mp-weixin node modifyManifest.js&&/Applications/HBuilderX.app/Contents/MacOS/cli publish --platform mp-weixin --project eb-uniapp --appid wx9*****42",
}
}
modifyManifest.js:
// 读取 manifest.json ,修改后重新写入
const fs = require('fs')
const manifestPath = `${__dirname}/manifest.json`
let Manifest = fs.readFileSync(manifestPath, {
encoding: 'utf-8'
})
function replaceManifest(path, value) {
const arr = path.split('.')
const len = arr.length
const lastItem = arr[len - 1]
let i = 0
let ManifestArr = Manifest.split(/\n/)
for (let index = 0; index < ManifestArr.length; index++) {
const item = ManifestArr[index]
if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
if (i === len) {
const hasComma = /,/.test(item)
ManifestArr[index] = item.replace(new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`), `"${lastItem}": ${value}${hasComma ? ',' : ''}`)
break;
}
}
Manifest = ManifestArr.join('\n')
}
const replaceMan = () => {
console.log('->', process.env.NODE_ENV)
const appid = process.env.NODE_ENV === 'MasterProduction' ? 'wx********42' : 'wxe****60';
// 使用
replaceManifest('mp-weixin.appid', `"${appid}"`)
fs.writeFileSync(manifestPath, Manifest, {
"flag": "w"
})
// #ifndef WX-MASTER
console.log('--- 非正式')
// #endif
// #ifdef WX-MASTER
console.log('--- WX-MASTER正式')
// #endif
console.log('执行修改 replaceManifest ->', process.env)
console.log('执行修改 replaceManifest ->', appid)
}
module.exports = replaceMan
但是通过 HBuilderX 的自定义发行(发行 -> 自定义发行 -> "微信-正式版"),NODE_ENV一直都是"production",配置的package.json都没生效。