/**
|
* 环境切换:按 config/env/<env>.js 从模板生成 manifest.json
|
*
|
* 用法:
|
* npm run env:sit 等价于 node scripts/set-env.js sit
|
* npm run env:prod 等价于 node scripts/set-env.js prod
|
*
|
* 说明:
|
* manifest.json 是 HBuilderX 的编译输入(appid 属于编译期值,无法像接口地址那样运行时切换),
|
* 但它含环境相关 appid,不适合直接提交,所以:
|
* manifest.json.demo(入库模板) --生成--> manifest.json(已 .gitignore)
|
* 生成后必须重新编译一次,并在微信开发者工具中重新打开项目(appid 变更需重开)。
|
*
|
* 如需在 HBuilderX 里直接编译/运行调试,先跑一次本脚本;
|
* 走命令行发行则直接用 scripts/publish.js(内部会自动生成)。
|
*
|
* appid 数据源唯一:config/env/<env>.js 中的 UNI_APPID(DCloud 标识)、APPID(小程序 appid)
|
*/
|
const fs = require('fs');
|
const path = require('path');
|
const manifest = require('./manifest');
|
|
const ROOT = path.resolve(__dirname, '..');
|
const ENV_DIR = path.join(ROOT, 'config', 'env');
|
|
function fail(msg) {
|
console.error('[set-env] ' + msg);
|
process.exit(1);
|
}
|
|
function main() {
|
const envName = (process.argv[2] || '').trim();
|
const available = fs.existsSync(ENV_DIR)
|
? fs.readdirSync(ENV_DIR).filter(f => f.endsWith('.js') && f !== 'index.js').map(f => f.replace(/\.js$/, ''))
|
: [];
|
|
if (!envName) {
|
fail('请指定环境名,可选:' + available.join(' / ') + '\n 例:npm run env:sit');
|
}
|
if (available.indexOf(envName) < 0) {
|
fail('未找到 config/env/' + envName + '.js,可选:' + available.join(' / '));
|
}
|
|
const env = require(path.join(ENV_DIR, envName + '.js'));
|
if (!env.UNI_APPID || !env.APPID) {
|
fail('config/env/' + envName + '.js 缺少 UNI_APPID 或 APPID');
|
}
|
|
console.log('[set-env] 切换到 ' + envName + '(' + env.ENV_NAME + ')');
|
console.log(' DCloud appid : ' + env.UNI_APPID);
|
console.log(' 小程序 appid : ' + env.APPID);
|
console.log(' 接口地址 : ' + env.HTTP_REQUEST_URL);
|
|
const res = manifest.generate(env);
|
|
console.log(res.changed
|
? '[set-env] 完成,请在 HBuilderX 中重新编译一次,并在微信开发者工具中重新打开项目'
|
: '[set-env] 无需改动,当前 manifest.json 已是 ' + envName + ' 环境');
|
}
|
|
main();
|