From 61274af2f456188fa611dd871bc2bcc1a3a85db0 Mon Sep 17 00:00:00 2001
From: Jacob <hlnie@tohours.com>
Date: 星期一, 12 十月 2026 16:12:28 +0800
Subject: [PATCH] 环境切换方案
---
config/env/prod.js | 23 +++
publish-sit.bat | 16 ++
.gitignore | 5
publish-prod.bat | 16 ++
scripts/publish.js | 133 +++++++++++++++++++
manifest.json | 4
scripts/set-env.js | 108 +++++++++++++++
config/env/index.js | 49 +++++++
package.json | 6
project.config.json | 2
config/env/sit.js | 23 +++
config/app.js | 31 ---
12 files changed, 387 insertions(+), 29 deletions(-)
diff --git a/.gitignore b/.gitignore
index 446d3eb..5244acf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,10 +2,13 @@
node_modules
/dist
-# local env files
+# 鏈湴鐜鏂囦欢
.env.local
.env.*.local
+# 寰俊灏忕▼搴忎笂浼犲瘑閽ワ紙鏈哄瘑锛屽垏鍕挎彁浜わ級
+keys/
+
# Log files
npm-debug.log*
yarn-debug.log*
diff --git a/config/app.js b/config/app.js
index 9ced0d8..36e4b57 100644
--- a/config/app.js
+++ b/config/app.js
@@ -7,31 +7,12 @@
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
-//绉诲姩绔晢鍩嶢PI
-let domain = 'https://acmall.bluedeer.com.cn/crmeb/front'
-module.exports = {
- // 璇锋眰鍩熷悕 鏍煎紡锛� https://鎮ㄧ殑鍩熷悕
- HTTP_REQUEST_URL:domain,
-
- // #ifdef MP
- HTTP_REQUEST_URL: domain,
- // #endif
- HTTP_REQUEST_URL:'https://acmall.bluedeer.com.cn/crmeb/front',
- HTTP_ADMIN_URL:'https://acmall.bluedeer.com.cn/crmeb/admin',
- APPID:'wx15d029cdf2e92a9f',
- GDP_ACCOUNT_ID:'8672f93377575ace',
- GDP_DATASOURCE_ID:'b01182b2d4f73e45',
- GDP_SERVER_URL:'https://giocollect.aviva-cofco.com.cn',
- GDP_DEBUG:true,
- THIRD_APPID:'wxa83daa550324ead8',
- // #ifdef H5
- //H5鎺ュ彛鏄祻瑙堝櫒鍦板潃
- // HTTP_REQUEST_URL: window.location.protocol+"//"+window.location.host,
- // http://api.java.crmeb.net:20001
- HTTP_REQUEST_URL:domain,
- // #endif
-
+// 鐜鐩稿叧鍙傛暟锛圚TTP_REQUEST_URL/HTTP_ADMIN_URL/APPID/THIRD_APPID/GDP_* 绛夛級
+// 缁熶竴缁存姢鍦� config/env/ 涓嬶紝鏈枃浠跺彧鍋氬悎骞讹紝瀵瑰瀵煎嚭鍚嶄繚鎸佷笉鍙�
+const env = require('./env');
+
+module.exports = Object.assign({}, env, {
HEADER:{
'content-type': 'application/json'
},
@@ -44,4 +25,4 @@
EXPIRE:0,
//鍒嗛〉鏈�澶氭樉绀烘潯鏁�
LIMIT: 10
-};
+});
diff --git a/config/env/index.js b/config/env/index.js
new file mode 100644
index 0000000..5dc7265
--- /dev/null
+++ b/config/env/index.js
@@ -0,0 +1,49 @@
+// +----------------------------------------------------------------------
+// | 鐜閫夋嫨鍏ュ彛锛氫竴濂椾唬鐮佽窇澶氱幆澧�
+// | 璇嗗埆浼樺厛绾э細鎵嬪姩鎸囧畾 > 灏忕▼搴� appid 鑷姩璇嗗埆 > H5 鍩熷悕璇嗗埆 > 榛樿 prod
+// | 璇存槑锛氬皬绋嬪簭 appid 鐢� manifest.json -> mp-weixin.appid 鍐冲畾锛�
+// | 鎵�浠モ�滅敤鍝釜 appid 璺戔�濆氨绛変簬鈥滅敤鍝鎺ュ彛鈥濓紝涓嶄細鍑虹幇鎺ュ彛涓庣幆澧冮敊閰�
+// +----------------------------------------------------------------------
+const envs = {
+ prod: require('./prod.js'),
+ sit: require('./sit.js')
+};
+
+// 鎵嬪姩寮哄埗鎸囧畾鐜锛�'' = 鑷姩璇嗗埆锛堟帹鑽愶級锛涗篃鍙~ 'prod' 鎴� 'sit'
+const OVERRIDE_ENV = '';
+
+// appid -> 鐜鍚� 鏄犲皠
+const APPID_ENV_MAP = {};
+Object.keys(envs).forEach(function(key) {
+ APPID_ENV_MAP[envs[key].APPID] = key;
+});
+
+function detectEnv() {
+ if (OVERRIDE_ENV && envs[OVERRIDE_ENV]) return OVERRIDE_ENV;
+
+ // #ifdef MP
+ try {
+ const info = uni.getAccountInfoSync();
+ const appId = info && info.miniProgram && info.miniProgram.appId;
+ if (appId && APPID_ENV_MAP[appId]) return APPID_ENV_MAP[appId];
+ } catch (e) {}
+ // #endif
+
+ // #ifdef H5
+ if (typeof location !== 'undefined' && location.hostname) {
+ const host = location.hostname;
+ if (/sit|tohours|localhost|127\.0\.0\.1/.test(host)) return 'sit';
+ }
+ // #endif
+
+ return 'prod';
+}
+
+const ENV_NAME = detectEnv();
+const current = envs[ENV_NAME] || envs.prod;
+
+module.exports = Object.assign({}, current, {
+ ENV_NAME: ENV_NAME,
+ IS_PROD: ENV_NAME === 'prod',
+ IS_SIT: ENV_NAME === 'sit'
+});
diff --git a/config/env/prod.js b/config/env/prod.js
new file mode 100644
index 0000000..60a088c
--- /dev/null
+++ b/config/env/prod.js
@@ -0,0 +1,23 @@
+// +----------------------------------------------------------------------
+// | 鐢熶骇鐜锛圥ROD锛夊弬鏁�
+// | 娉ㄦ剰锛氭柊澧炵幆澧冨弬鏁版椂锛岃鍚屾缁存姢 prod.js 涓� sit.js锛屼繚鎸侀敭鍚嶅畬鍏ㄤ竴鑷�
+// +----------------------------------------------------------------------
+module.exports = {
+ ENV_NAME: 'prod',
+ // 璇锋眰鍩熷悕
+ HTTP_REQUEST_URL: 'https://acmall.bluedeer.com.cn/crmeb/front',
+ HTTP_ADMIN_URL: 'https://acmall.bluedeer.com.cn/crmeb/admin',
+ // 寰俊灏忕▼搴� appid锛堥渶涓� manifest.json -> mp-weixin.appid 淇濇寔涓�鑷达級
+ APPID: 'wx15d029cdf2e92a9f',
+ // 璺宠浆鍏宠仈灏忕▼搴� appid
+ THIRD_APPID: 'wxa83daa550324ead8',
+ // GrowingIO 鍩嬬偣
+ GDP_ACCOUNT_ID: '8672f93377575ace',
+ GDP_DATASOURCE_ID: 'b01182b2d4f73e45',
+ GDP_SERVER_URL: 'https://giocollect.aviva-cofco.com.cn',
+ GDP_DEBUG: true,
+ // 娲诲姩椤�/鍐呭祵 web 璧勬簮鍦板潃锛堟浛浠d唬鐮侀噷鎸夊煙鍚嶅垽鏂幆澧冿級
+ WEB_ACTIVITY_BASE: 'https://ossacmall.bluedeer.com.cn',
+ // DCloud 搴旂敤鏍囪瘑锛堥渶涓� manifest.json -> appid 淇濇寔涓�鑷达級
+ UNI_APPID: '__UNI__CE0C605'
+};
diff --git a/config/env/sit.js b/config/env/sit.js
new file mode 100644
index 0000000..31d1d10
--- /dev/null
+++ b/config/env/sit.js
@@ -0,0 +1,23 @@
+// +----------------------------------------------------------------------
+// | 娴嬭瘯鐜锛圫IT锛夊弬鏁�
+// | 娉ㄦ剰锛氭柊澧炵幆澧冨弬鏁版椂锛岃鍚屾缁存姢 prod.js 涓� sit.js锛屼繚鎸侀敭鍚嶅畬鍏ㄤ竴鑷�
+// +----------------------------------------------------------------------
+module.exports = {
+ ENV_NAME: 'sit',
+ // 璇锋眰鍩熷悕
+ HTTP_REQUEST_URL: 'https://sit.tohours.com/crmeb/front',
+ HTTP_ADMIN_URL: 'https://sit.tohours.com/crmeb/admin',
+ // 寰俊灏忕▼搴� appid锛堥渶涓� manifest.json -> mp-weixin.appid 淇濇寔涓�鑷达級
+ APPID: 'wx7e443c60d08449de',
+ // 璺宠浆鍏宠仈灏忕▼搴� appid
+ THIRD_APPID: 'wx64d2ecbbeb3eae79',
+ // GrowingIO 鍩嬬偣
+ GDP_ACCOUNT_ID: '83b2522b4d9c972a',
+ GDP_DATASOURCE_ID: 'a1616a9a748d2c7f',
+ GDP_SERVER_URL: 'https://collecttest.aviva-cofco.com.cn',
+ GDP_DEBUG: true,
+ // 娲诲姩椤�/鍐呭祵 web 璧勬簮鍦板潃锛堟浛浠d唬鐮侀噷鎸夊煙鍚嶅垽鏂幆澧冿級
+ WEB_ACTIVITY_BASE: 'https://sit.tohours.com/crmeb_web',
+ // DCloud 搴旂敤鏍囪瘑锛堥渶涓� manifest.json -> appid 淇濇寔涓�鑷达級
+ UNI_APPID: '__UNI__3D0C5FE'
+};
diff --git a/manifest.json b/manifest.json
index 29fe63e..415091d 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,6 +1,6 @@
{
"name" : "CRMEB Java 鍟嗗煄",
- "appid" : "__UNI__CE0C605",
+ "appid" : "__UNI__3D0C5FE",
"description" : "CRMEB Java 鍟嗗煄",
"versionName" : "1.0.0",
"versionCode" : 1001,
@@ -123,7 +123,7 @@
"quickapp" : {},
/* 灏忕▼搴忕壒鏈夌浉鍏� */
"mp-weixin" : {
- "appid" : "wx15d029cdf2e92a9f",
+ "appid" : "wx7e443c60d08449de",
"setting" : {
"urlCheck" : true,
"minified" : true,
diff --git a/package.json b/package.json
index 11b074c..235c895 100644
--- a/package.json
+++ b/package.json
@@ -1,4 +1,10 @@
{
+ "scripts": {
+ "env:prod": "node scripts/set-env.js prod",
+ "env:sit": "node scripts/set-env.js sit",
+ "release:sit": "node scripts/publish.js sit",
+ "release:prod": "node scripts/publish.js prod"
+ },
"dependencies": {
"bignumber.js": "^9.3.1",
"vue-inset-loader": "^1.2.6"
diff --git a/project.config.json b/project.config.json
index 210cb08..46b7b33 100644
--- a/project.config.json
+++ b/project.config.json
@@ -1,5 +1,5 @@
{
- "appid": "wx15d029cdf2e92a9f",
+ "appid": "wx7e443c60d08449de",
"compileType": "miniprogram",
"libVersion": "3.1.4",
"packOptions": {
diff --git a/publish-prod.bat b/publish-prod.bat
new file mode 100644
index 0000000..c48b661
--- /dev/null
+++ b/publish-prod.bat
@@ -0,0 +1,16 @@
+@echo off
+chcp 65001 >nul
+cd /d "%~dp0"
+echo ============================================
+echo 鍙戝竷寰俊灏忕▼搴� - 鐢熶骇鐜 PROD
+echo 鎺ュ彛: https://acmall.bluedeer.com.cn/crmeb/front
+echo ============================================
+echo.
+node "scripts\publish.js" prod %*
+echo.
+if errorlevel 1 (
+ echo [鍙戝竷澶辫触] 璇锋煡鐪嬩笂鏂硅緭鍑�
+) else (
+ echo [鍙戝竷瀹屾垚]
+)
+pause
diff --git a/publish-sit.bat b/publish-sit.bat
new file mode 100644
index 0000000..fb49980
--- /dev/null
+++ b/publish-sit.bat
@@ -0,0 +1,16 @@
+@echo off
+chcp 65001 >nul
+cd /d "%~dp0"
+echo ============================================
+echo 鍙戝竷寰俊灏忕▼搴� - 娴嬭瘯鐜 SIT
+echo 鎺ュ彛: https://sit.tohours.com/crmeb/front
+echo ============================================
+echo.
+node "scripts\publish.js" sit %*
+echo.
+if errorlevel 1 (
+ echo [鍙戝竷澶辫触] 璇锋煡鐪嬩笂鏂硅緭鍑�
+) else (
+ echo [鍙戝竷瀹屾垚]
+)
+pause
diff --git a/scripts/publish.js b/scripts/publish.js
new file mode 100644
index 0000000..9d2f542
--- /dev/null
+++ b/scripts/publish.js
@@ -0,0 +1,133 @@
+/**
+ * HBuilderX CLI 鍛戒护琛屽彂甯冿細鎸夌幆澧冨彂甯冨井淇″皬绋嬪簭
+ *
+ * 鐢ㄦ硶锛�
+ * node scripts/publish.js sit # 缂栬瘧 + 涓婁紶鍒� SIT 灏忕▼搴忥紙寰俊 CI锛屾棤闇�鎵撳紑寰俊寮�鍙戣�呭伐鍏凤級
+ * node scripts/publish.js prod # 缂栬瘧 + 涓婁紶鍒� PROD 灏忕▼搴�
+ * node scripts/publish.js sit --local # 鍙湰鍦扮紪璇戯紝涓嶄笂浼�
+ * node scripts/publish.js sit --dry-run # 鍙墦鍗板皢瑕佹墽琛岀殑鍛戒护
+ * node scripts/publish.js sit --version 2.0.0 --robot 3 # 棰濆鍙傛暟鍘熸牱閫忎紶缁� cli
+ *
+ * 鐜鐩稿叧鐨勫�肩粺涓�鍙栬嚜 config/env/<env>.js锛堝敮涓�鏁版嵁婧愶級锛�
+ * - 鎺ュ彛/鍩嬬偣绛夎繍琛屾椂鍙傛暟锛氬寘鍐呰嚜鍔ㄦ寜灏忕▼搴� appid 璇嗗埆锛屾棤闇�鍦ㄦ澶勭悊
+ * - APPID锛氫綔涓� --appid 浼犵粰寰俊 CI 涓婁紶
+ *
+ * 瀵嗛挜鏂囦欢锛歬eys/private.<env>.key
+ * 鑾峰彇鏂瑰紡锛氬井淇″叕浼楀钩鍙� 鈫� 寮�鍙戠鐞� 鈫� 寮�鍙戣缃� 鈫� 灏忕▼搴忎唬鐮佷笂浼� 鈫� 鐢熸垚涓婁紶瀵嗛挜
+ * 娉ㄦ剰锛氬瘑閽ュ睘浜庢満瀵嗭紝宸查�氳繃 .gitignore 鎺掗櫎锛屽垏鍕挎彁浜�
+ */
+const { spawnSync } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+
+const ROOT = path.resolve(__dirname, '..');
+const ENV_DIR = path.join(ROOT, 'config', 'env');
+
+// HBuilderX cli.exe 璺緞锛氫紭鍏堣鐜鍙橀噺锛屼究浜庢崲鏈哄櫒 / 鎹㈠畨瑁呬綅缃�
+const HX_CLI = process.env.HBUILDERX_CLI || 'C:\\Users\\Administrator\\Desktop\\HBuilderX\\cli.exe';
+
+const argv = process.argv.slice(2);
+const envName = (argv.find(function(a) { return a.charAt(0) !== '-'; }) || '').trim();
+const localOnly = argv.indexOf('--local') > -1;
+const dryRun = argv.indexOf('--dry-run') > -1;
+// 榛樿涓嶆敼 manifest.json锛氫笂浼犵敤 --appid 鎸囧畾鐩爣灏忕▼搴忥紝缂栬瘧浜х墿閲岀殑 appid 涓嶅弬涓庢牎楠屻��
+// 鑻ラ亣鍒颁笂浼犲け璐�/appid 涓嶄竴鑷达紝鍔� --sync-manifest 鍏堝悓姝� manifest 鍐嶅彂甯冦��
+const syncManifest = argv.indexOf('--sync-manifest') > -1;
+const OWN_ARGS = ['--local', '--dry-run', '--sync-manifest'];
+// 閫忎紶缁� cli 鐨勯澶栧弬鏁帮紙淇濈暀 "鍙傛暟 鍊�" 鐨勬垚瀵瑰叧绯伙紝濡� --robot 2锛�
+const passthrough = [];
+let envNameSkipped = false;
+argv.forEach(function(a) {
+ if (OWN_ARGS.indexOf(a) > -1) return;
+ if (!envNameSkipped && a === envName) {
+ envNameSkipped = true;
+ return;
+ }
+ passthrough.push(a);
+});
+
+function fail(msg) {
+ console.error('[publish] ' + msg);
+ process.exit(1);
+}
+
+function gitShortHash() {
+ const res = spawnSync('git', ['rev-parse', '--short', 'HEAD'], { cwd: ROOT, encoding: 'utf8' });
+ return res.status === 0 ? String(res.stdout).trim() : '';
+}
+
+function readManifestVersion() {
+ try {
+ const txt = fs.readFileSync(path.join(ROOT, 'manifest.json'), 'utf8');
+ const m = txt.match(/"versionName"\s*:\s*"([^"]*)"/);
+ return m ? m[1] : '1.0.0';
+ } catch (e) {
+ return '1.0.0';
+ }
+}
+
+function main() {
+ 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 渚嬶細node scripts/publish.js sit');
+ if (available.indexOf(envName) < 0) fail('鏈壘鍒� config/env/' + envName + '.js锛屽彲閫夛細' + available.join(' / '));
+
+ const env = require(path.join(ENV_DIR, envName + '.js'));
+
+ // 1) 鏍¢獙 cli.exe
+ if (!fs.existsSync(HX_CLI)) {
+ fail('鏈壘鍒� HBuilderX cli.exe锛�' + HX_CLI +
+ '\n 璇风‘璁� HBuilderX 瀹夎璺緞锛屾垨璁剧疆鐜鍙橀噺 HBUILDERX_CLI 鎸囧悜 cli.exe');
+ }
+
+ // 2) 缁勮 cli 鍙傛暟
+ const cliArgs = ['publish', '--platform', 'mp-weixin', '--project', ROOT];
+
+ if (!localOnly) {
+ const keyFile = path.join(ROOT, 'keys', 'private.' + envName + '.key');
+ if (!fs.existsSync(keyFile)) {
+ fail('鏈壘鍒颁笂浼犲瘑閽ユ枃浠讹細' + keyFile +
+ '\n 鑾峰彇鏂瑰紡锛氬井淇″叕浼楀钩鍙� 鈫� 寮�鍙戠鐞� 鈫� 寮�鍙戣缃� 鈫� 灏忕▼搴忎唬鐮佷笂浼� 鈫� 鐢熸垚涓婁紶瀵嗛挜' +
+ '\n 鑻ュ彧鎯虫湰鍦扮紪璇戜笉涓婁紶锛岃鍔� --local');
+ }
+ const stamp = new Date().toISOString().slice(0, 16).replace('T', ' ');
+ const hash = gitShortHash();
+ cliArgs.push('--upload', 'true');
+ cliArgs.push('--appid', env.APPID);
+ cliArgs.push('--privatekey', keyFile);
+ cliArgs.push('--version', readManifestVersion());
+ cliArgs.push('--description', '[' + env.ENV_NAME + '] ' + stamp + (hash ? ' ' + hash : ''));
+ }
+
+ console.log('[publish] 鐜 : ' + envName + '锛�' + env.ENV_NAME + '锛�');
+ console.log('[publish] 灏忕▼搴廰ppid: ' + env.APPID);
+ console.log('[publish] 鎺ュ彛鍦板潃 : ' + env.HTTP_REQUEST_URL);
+ console.log('[publish] 浜х墿鐩綍 : ' + path.join('unpackage', 'dist', 'build', 'mp-weixin'));
+ console.log('[publish] 妯″紡 : ' + (localOnly ? '浠呮湰鍦扮紪璇�' : '缂栬瘧 + 涓婁紶鍒板井淇″钩鍙�'));
+ console.log('[publish] DCloud鏍囪瘑 : ' + env.UNI_APPID + '锛坢anifest.json 閲岀殑鍊硷紝浠呭奖鍝嶉潪灏忕▼搴忕涓庝簯鏈嶅姟璇嗗埆锛�');
+ console.log('[publish] 鍛戒护 : "' + HX_CLI + '" ' + cliArgs.concat(passthrough).join(' '));
+
+ if (dryRun) {
+ console.log('[publish] --dry-run锛屾湭鎵ц');
+ return;
+ }
+
+ // 3) 鍙�夛細鍏堟妸 appid 鍚屾杩� manifest.json锛堣蛋 set-env 鐨勫悓涓�濂楅�昏緫锛�
+ if (syncManifest) {
+ console.log('[publish] --sync-manifest锛氬厛鍚屾 manifest.json 鐨� appid');
+ const sync = spawnSync(process.execPath, [path.join(__dirname, 'set-env.js'), envName], { cwd: ROOT, stdio: 'inherit' });
+ if (sync.status !== 0) fail('鍚屾 manifest.json 澶辫触');
+ }
+
+ // 4) 鎵ц锛圚BuilderX 浼氬湪鍏舵帶鍒跺彴杈撳嚭缂栬瘧涓庝笂浼犳棩蹇楋級
+ const res = spawnSync(HX_CLI, cliArgs.concat(passthrough), { cwd: ROOT, stdio: 'inherit' });
+
+ if (res.error) fail('璋冪敤 cli.exe 澶辫触锛�' + res.error.message);
+ if (res.status !== 0) fail('cli.exe 閫�鍑虹爜 ' + res.status + '锛岃鏌ョ湅 HBuilderX 鎺у埗鍙拌緭鍑�');
+
+ console.log('[publish] 瀹屾垚銆傝嫢涓婁紶鎴愬姛锛屽彲鍦ㄥ井淇″叕浼楀钩鍙� 鈫� 鐗堟湰绠$悊 涓湅鍒板搴旂増鏈�');
+}
+
+main();
diff --git a/scripts/set-env.js b/scripts/set-env.js
new file mode 100644
index 0000000..8db12f2
--- /dev/null
+++ b/scripts/set-env.js
@@ -0,0 +1,108 @@
+/**
+ * 鐜鍒囨崲鑴氭湰锛氭妸 config/env/<env>.js 閲岀殑 appid 鍚屾鍒扮紪璇戞湡閰嶇疆鏂囦欢
+ *
+ * 鐢ㄦ硶锛�
+ * npm run env:sit 绛変环浜� node scripts/set-env.js sit
+ * npm run env:prod 绛変环浜� node scripts/set-env.js prod
+ *
+ * 璇存槑锛�
+ * appid 鏄紪璇戞湡鍊硷紙manifest.json 涓� HBuilderX 鍥哄畾杈撳叆銆佸井淇″紑鍙戣�呭伐鍏峰彧璁�
+ * project.config.json 鐨� appid锛夛紝鏃犳硶鍍忔帴鍙e湴鍧�閭f牱杩愯鏃跺垏鎹紝鎵�浠ヨ繖閲屽仛
+ * 鈥滀竴娆″懡浠ゅ啓鍥炩�濄�傛敼瀹屽繀椤婚噸鏂扮紪璇戜竴娆★紝dist 涓嬬殑 project.config.json 鎵嶄細鏇存柊銆�
+ *
+ * 鍞竴鏁版嵁婧愶細config/env/<env>.js 涓殑 UNI_APPID锛圖Cloud 鏍囪瘑锛夈�丄PPID锛堝皬绋嬪簭 appid锛�
+ */
+const fs = require('fs');
+const path = require('path');
+
+const ROOT = path.resolve(__dirname, '..');
+const ENV_DIR = path.join(ROOT, 'config', 'env');
+
+const files = {
+ manifest: path.join(ROOT, 'manifest.json'),
+ projectConfig: path.join(ROOT, 'project.config.json')
+};
+
+function fail(msg) {
+ console.error('[set-env] ' + msg);
+ process.exit(1);
+}
+
+/** 鍙浛鎹㈢涓�澶� "appid" : "xxx"锛屼繚鐣欏師鏈夌┖鏍�/缂╄繘椋庢牸 */
+function replaceAppId(text, value) {
+ let done = false;
+ const result = text.replace(/"appid"(\s*:\s*)"[^"]*"/, function(match, sep) {
+ done = true;
+ return '"appid"' + sep + '"' + value + '"';
+ });
+ return { text: result, done: done };
+}
+
+/** 鏇挎崲 manifest.json 椤跺眰 appid锛堢涓�澶勫嚭鐜板嵆涓洪《灞傦級 */
+function patchManifest(text, env) {
+ // 1) 椤跺眰 appid锛圖Cloud 搴旂敤鏍囪瘑锛�
+ const top = replaceAppId(text, env.UNI_APPID);
+ if (!top.done) fail('manifest.json 涓湭鎵惧埌椤跺眰 "appid" 瀛楁');
+ text = top.text;
+
+ // 2) mp-weixin 涓嬬殑 appid锛堝井淇″皬绋嬪簭 appid锛夛紝鍙湪璇ュ尯鍧楀唴鏇挎崲绗竴澶�
+ const idx = text.indexOf('"mp-weixin"');
+ if (idx < 0) fail('manifest.json 涓湭鎵惧埌 "mp-weixin" 閰嶇疆鍧�');
+ const scoped = replaceAppId(text.slice(idx), env.APPID);
+ if (!scoped.done) fail('manifest.json 鐨� "mp-weixin" 涓湭鎵惧埌 "appid" 瀛楁');
+ text = text.slice(0, idx) + scoped.text;
+
+ return text;
+}
+
+/** 鏇挎崲 project.config.json 鐨� appid锛堜繚鎸佸師鏍煎紡锛岄伩鍏嶆暣鏂囦欢閲嶆帓锛� */
+function patchProjectConfig(text, env) {
+ const res = replaceAppId(text, env.APPID);
+ if (!res.done) fail('project.config.json 涓湭鎵惧埌 "appid" 瀛楁');
+ return res.text;
+}
+
+function writeIfChanged(file, next) {
+ const prev = fs.readFileSync(file, 'utf8');
+ if (prev === next) {
+ console.log(' - ' + path.relative(ROOT, file) + ' 宸叉槸鐩爣鍊硷紝鏃犻渶鏀瑰姩');
+ return false;
+ }
+ fs.writeFileSync(file, next, 'utf8');
+ console.log(' 鈭� ' + path.relative(ROOT, file) + ' 宸叉洿鏂�');
+ return true;
+}
+
+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 manifestChanged = writeIfChanged(files.manifest, patchManifest(fs.readFileSync(files.manifest, 'utf8'), env));
+ const projectChanged = writeIfChanged(files.projectConfig, patchProjectConfig(fs.readFileSync(files.projectConfig, 'utf8'), env));
+ const changed = manifestChanged || projectChanged;
+
+ console.log(changed
+ ? '[set-env] 瀹屾垚锛岃鍦� HBuilderX 涓噸鏂扮紪璇戜竴娆★紝骞跺湪寰俊寮�鍙戣�呭伐鍏蜂腑閲嶆柊鎵撳紑椤圭洰'
+ : '[set-env] 鏃犻渶鏀瑰姩锛屽綋鍓嶅凡鏄� ' + envName + ' 鐜閰嶇疆');
+}
+
+main();
--
Gitblit v1.4.0