/** * 环境切换:按 config/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/.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();