Jacob
2026-10-12 504d4de23822309a42dc1de417277461d511eeaf
fix: --no-open 时不再拼接微信开发者工具 open 命令
1个文件已添加
1个文件已修改
137 ■■■■■ 已修改文件
BAT使用说明.md 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
scripts/publish.js 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BAT使用说明.md
....@@ -0,0 +1,133 @@
1
+# 4 个 bat 使用说明
2
+
3
+项目根目录下 4 个双击即用的批处理,按用途分两类:
4
+
5
+| 我想做的事 | 用哪个 bat |
6
+| --- | --- |
7
+| 出小程序发行版,并自动在微信开发者工具里打开 | `publish-sit.bat`(测试)/ `publish-prod.bat`(生产) |
8
+| 在 HBuilderX 里「运行 → 运行到小程序模拟器」调试 | 先切环境:`switch-sit.bat` / `switch-prod.bat` |
9
+
10
+> 一句话区分:`publish-*` 产出 `unpackage/dist/build/mp-weixin` 发行产物,编译期 appid 由脚本注入,**不改仓库里的任何文件**;`switch-*` 改的是 HBuilderX 的编译输入 `manifest.json`,供 GUI 编译/调试用。
11
+
12
+---
13
+
14
+## 1. 一次性前提
15
+
16
+1. Node.js(命令行 `node -v` 可用)
17
+2. HBuilderX(提供命令行 `cli.exe`)
18
+3. 微信开发者工具,且 **设置 → 安全设置 → 服务端口 = 开启**(不开时 `cli.bat open` 会失败,脚本会降级提示你手动导入)
19
+
20
+**工具路径不需要配置**,脚本按顺序自动查找,命中后把所在目录加入本次进程的 `PATH`(便于按名字直接调用):
21
+
22
+1. 环境变量 `HBUILDERX_CLI` / `WX_DEVTOOLS_CLI`
23
+2. 系统 `PATH`
24
+3. 常见安装目录(`Program Files`、`Program Files (x86)`、用户目录、桌面、下载、各磁盘常见软件目录…)
25
+4. 磁盘浅层扫描(≤2 层,只扫本地固定磁盘,跳过系统目录)
26
+
27
+找不到时直接报错并给出办法:
28
+
29
+```bat
30
+set PATH=%PATH%;<HBuilderX 或 微信开发者工具 的安装目录>
31
+set HBUILDERX_CLI=<HBuilderX cli.exe 完整路径>
32
+set WX_DEVTOOLS_CLI=<微信开发者工具 cli.bat 完整路径>
33
+```
34
+
35
+---
36
+
37
+## 2. publish-sit.bat / publish-prod.bat
38
+
39
+双击 = 发行并自动打开。实际执行 4 步:
40
+
41
+| 步骤 | 做什么 | 具体命令 |
42
+| --- | --- | --- |
43
+| 0 | 生成 `manifest.json`(模板 `manifest.json.demo` + 该环境 appid) | 内置逻辑 |
44
+| 1 | HBuilderX CLI 发行编译 | `cli.exe publish --platform mp-weixin --project <项目根>` |
45
+| 2 | 回写产物 appid(兜底校正) | 写入 `unpackage/dist/build/mp-weixin/project.config.json` |
46
+| 3 | 微信开发者工具 CLI 打开产物 | `cli.bat open --project <产物目录>` |
47
+
48
+- 发行产物:`unpackage/dist/build/mp-weixin`
49
+- 编译日志在 **HBuilderX 控制台**里看
50
+- 任一步失败,窗口会打印 `[FAILED] ...`(退出码非 0)
51
+
52
+### 可加的参数(`%*` 原样传给 `scripts/publish.js`)
53
+
54
+| 参数 | 作用 |
55
+| --- | --- |
56
+| `--dry-run` | 只打印将要执行的命令,不做任何写操作 |
57
+| `--no-open` | 只编译,不打开微信开发者工具(此种情况不要求安装开发者工具) |
58
+| `--no-gen` | 跳过生成 `manifest.json`(要求它已存在;适合你手工维护 manifest 的场景) |
59
+| 其他参数 | 原样透传给 HBuilderX cli |
60
+
61
+用法示例(在命令行窗口里):
62
+
63
+```bat
64
+publish-sit.bat --dry-run
65
+publish-prod.bat --no-open
66
+```
67
+
68
+等价命令:`npm run release:sit` / `npm run release:prod` / `node scripts/publish.js sit`
69
+
70
+---
71
+
72
+## 3. switch-sit.bat / switch-prod.bat
73
+
74
+双击 = 按该环境重新生成 `manifest.json`(`manifest.json.demo` + 该环境 appid)。
75
+
76
+- 等价命令:`npm run env:sit` / `npm run env:prod` / `node scripts/set-env.js sit`
77
+- **切完必须做两件事**:① 在 HBuilderX 里重新编译一次;② 在微信开发者工具里重新打开该项目(appid 变更需重开)
78
+- 幂等:内容已一致时提示「无需重写」,可放心重复双击
79
+- 适用场景:在 HBuilderX GUI 里直接运行/调试(编译期 appid 取自 `manifest.json`),或需要出 App 包(顶层 DCloud appid)
80
+
81
+### 两个环境的取值
82
+
83
+| 环境 | 小程序 appid(`mp-weixin.appid`) | DCloud appid(顶层) | 接口地址 |
84
+| --- | --- | --- | --- |
85
+| sit | `wx7e443c60d08449de` | `__UNI__3D0C5FE` | `https://sit.tohours.com/crmeb/front` |
86
+| prod | `wx15d029cdf2e92a9f` | `__UNI__CE0C605` | `https://acmall.bluedeer.com.cn/crmeb/front` |
87
+
88
+数据源:`config/env/sit.js`、`config/env/prod.js`(唯一数据源,改这两处即可,两个文件键名保持一致)。
89
+
90
+---
91
+
92
+## 4. 为什么跑完 git 是干净的
93
+
94
+`manifest.json` 是**生成物**,`project.config.json` 与 `unpackage/` 已忽略:
95
+
96
+```
97
+manifest.json.demo(入库,模板) ──注入环境 appid──▶ manifest.json(已忽略,不入库)
98
+```
99
+
100
+所以发行、切环境都不会产生 git 改动,`git status` 只会有你自己改的源码。
101
+
102
+两点注意:
103
+
104
+1. 新 clone 的机器**没有 `manifest.json`,HBuilderX 打不开项目** —— 先跑一次 `switch-sit.bat`(或任意 `publish-*.bat`)把它生成出来。
105
+2. 在 HBuilderX GUI 里直接改的 manifest 配置落在**生成物**上,下次生成会被模板内容覆盖(脚本会打印警告)。需要长期保留的改动,请写进 `manifest.json.demo`。
106
+
107
+---
108
+
109
+## 5. 接口地址为什么自动对得上
110
+
111
+`config/env/index.js` 的识别顺序:手动 `OVERRIDE_ENV` > 小程序 appid 自动识别 > H5 域名识别 > 默认 prod,对外导出 `ENV_NAME` / `IS_SIT` / `IS_PROD`。
112
+
113
+也就是「用哪个 appid 编译」就等于「用哪套接口」,不会出现接口与环境错配 —— 你只需要选对 bat。
114
+
115
+---
116
+
117
+## 6. 常见问题
118
+
119
+| 现象 | 处理 |
120
+| --- | --- |
121
+| 窗口报 `'…' is not recognized as an internal or external command` 且带中文乱码 | bat 内混用 UTF-8 中文时,cmd 按代码页解析会错位。现在 4 个 bat **全部是 ASCII**,中文提示由 Node 打印。自己改 bat 时不要加中文,要加就用 Node 输出 |
122
+| `未找到 HBuilderX 命令行 cli.exe` / `未找到微信开发者工具命令行 cli.bat` | 按报错里的两种办法处理:加 `PATH` 或设对应环境变量(见第 1 节) |
123
+| 自动打开失败,提示未开启服务端口 | 开发者工具 → 设置 → 安全设置 → 打开服务端口;或手动「导入项目」选 `unpackage\dist\build\mp-weixin` |
124
+| 开发者工具里 appid 还是旧的 | appid 变更后需要在工具里**重新打开**该项目 |
125
+| `--no-gen 需要 manifest.json 已存在` | 先跑一次 `switch-*.bat`,或去掉 `--no-gen` |
126
+| `cli.exe 退出码 …` | 编译失败,看 HBuilderX 控制台里的具体报错 |
127
+
128
+---
129
+
130
+## 7. 附注
131
+
132
+- 4 个 bat 都会先 `cd /d "%~dp0"`,所以在任意目录双击或命令行调用都不会跑错位置;末尾 `pause` 方便双击后查看输出。
133
+- 微信开发者工具生成的 `project.private.config.json` 目前仍入库(未被忽略)。若想连它一起做到零噪音,可自行加入 `.gitignore` 并执行 `git rm --cached project.private.config.json`。
scripts/publish.js
....@@ -262,8 +262,8 @@
262262 : '由 manifest.json.demo 生成(appid ' + env.APPID + ',生成物不入库)'));
263263
264264 const cliArgs = ['publish', '--platform', 'mp-weixin', '--project', ROOT].concat(passthrough);
265
- // 路径含空格/中文,交给 cmd 解析更稳
266
- const openCmd = '"' + wx.file + '" open --project "' + DIST_DIR + '"';
265
+ // 路径含空格/中文,交给 cmd 解析更稳(--no-open 时没有微信开发者工具,不拼这条命令)
266
+ const openCmd = wx ? '"' + wx.file + '" open --project "' + DIST_DIR + '"' : '';
267267
268268 if (dryRun) {
269269 console.log('[release] 0) 生成: manifest.json ← manifest.json.demo' + (noGen ? '(已指定 --no-gen,跳过)' : ''));