Jacob
1 天以前 f7034f535b85264e0c5b18e82fc295dab2052304
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
 * 环境切换:按 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();