feat(cli): WSL 开发走 Windows 盘产物出口

- package.json 增 dev:mp-weixin:win / build:mp-weixin:win:用 UNI_OUTPUT_DIR 把产物写到
  ${WIN_OUT_DIR:-/mnt/d/tuanwei-dev}/<dev|build>/mp-weixin,供 WSL 编译 + Windows 侧开发者工具导入
- README 补「在 WSL 里开发」一节:分工、产物目录对照、WIN_OUT_DIR 覆盖与实测边界
- 人工冒烟回执:编译后导入微信开发者工具验证通过
This commit is contained in:
2026-10-15 17:44:48 +08:00
parent 79420e28f6
commit 1d16e94c4e
2 changed files with 45 additions and 2 deletions
+42 -1
View File
@@ -27,7 +27,8 @@ pnpm dev:mp-weixin
pnpm build:mp-weixin
```
`package.json` 里只有四条 scripts:`dev:h5` / `build:h5` / `dev:mp-weixin` / `build:mp-weixin`。
`package.json` 里六条 scripts:`dev:h5` / `build:h5` / `dev:mp-weixin` / `build:mp-weixin`,
外加两条 WSL 专用变体 `dev:mp-weixin:win` / `build:mp-weixin:win`(见「在 WSL 里开发」一节)。
**`mp-weixin` 是本仓库唯一承诺的平台**;h5 两条只是顺带保留,不作保证。
## 产物路径与微信开发者工具的导入目录
@@ -46,6 +47,46 @@ pnpm build:mp-weixin
- **appid 不用手填**:`project.config.json` 由编译器生成,appid 取自 `src/manifest.json` 的
`mp-weixin.appid`(`wxf7ee9cd5801bf7a6`),项目名取自 `manifest.json` 的 `name`。
- 开发时先起 `pnpm dev:mp-weixin`(它进入 watch、不退出),再导入 `dist/dev/mp-weixin`。
- 上面两个目录是**在 WSL 之外的机器上编译**时的位置。在 WSL 里开发请走下一节,产物不落在 `dist/`。
## 在 WSL 里开发:开发者工具跑在 Windows 侧
微信开发者工具只有 Windows / macOS 版,**没有 Linux 版,装不进 WSL**。
(这台机器的 WSLg 是好的,Linux GUI 程序能显示;但开发者工具本身没有 Linux 构建,用不上。)
所以分工是「WSL 编译、Windows 运行工具」,两边靠一个落在 **Windows 盘上**的产物目录对接:
```bash
# WSL 侧:产物直接写到 Windows 的 D 盘,watch 常驻不退出
pnpm dev:mp-weixin:win
```
然后在 Windows 侧打开微信开发者工具 → 「导入项目」→ 目录选 `D:\tuanwei-dev\dev\mp-weixin`。
| 命令 | 产物目录(WSL 视角) | Windows 视角 | 什么时候用 |
| --- | --- | --- | --- |
| `pnpm dev:mp-weixin:win` | `/mnt/d/tuanwei-dev/dev/mp-weixin` | `D:\tuanwei-dev\dev\mp-weixin` | 日常开发:watch |
| `pnpm build:mp-weixin:win` | `/mnt/d/tuanwei-dev/build/mp-weixin` | `D:\tuanwei-dev\build\mp-weixin` | 发布 / 上传前:一次性构建 |
`<dev|build>/mp-weixin` 这一层与仓库内的 `dist/<dev|build>/mp-weixin` **刻意同形**,
只是根从仓库内挪到了 Windows 盘上。换盘符或换目录就设 `WIN_OUT_DIR`:
```bash
WIN_OUT_DIR=/mnt/e/tuanwei-dev pnpm dev:mp-weixin:win
```
`WIN_OUT_DIR` 指向的目录**不存在也可以**:编译器会连多级父目录一起建(实测 `/mnt/d/__probe/deep/nested` 一次跑通,无需先 `mkdir`)。
**为什么不把产物留在 `dist/`、直接让工具导入 `\\wsl.localhost\...`?** 那条路本仓库没实测,
原理上要走 9p 网络路径;本方案不依赖它 —— 产物落在本地 NTFS,工具看到的就是一个普通 Windows 目录。
实测到的事实(WSL2 + Debian 13,2026-10-15):
- `dev:mp-weixin:win` 起 watch 后把首次全量产物写进了 `/mnt/d/tuanwei-dev/dev/mp-weixin`;
- 改一次 `src/main.js`,产物 `app.js` **约 3 秒后**重编译落盘(1364 → 1397 字节,标记命中 1 次)。
依据是 `@dcloudio/vite-plugin-uni` 的 `configResolved/env.js` 只在**未设置**时才兜底默认目录,
所以 `UNI_OUTPUT_DIR` 是它认的出口,dev 与 build 两条路径都生效。
- **未实测**:开发者工具那侧收到新产物后是否**自动刷新界面** —— 这要工具跑起来才验得了,WSL 里验不了。
若没自动刷新,点一下工具里的「编译」即可。
## 目录结构
+3 -1
View File
@@ -5,7 +5,9 @@
"dev:h5": "uni",
"build:h5": "uni build",
"dev:mp-weixin": "uni -p mp-weixin",
"build:mp-weixin": "uni build -p mp-weixin"
"build:mp-weixin": "uni build -p mp-weixin",
"dev:mp-weixin:win": "UNI_OUTPUT_DIR=${WIN_OUT_DIR:-/mnt/d/tuanwei-dev}/dev/mp-weixin uni -p mp-weixin",
"build:mp-weixin:win": "UNI_OUTPUT_DIR=${WIN_OUT_DIR:-/mnt/d/tuanwei-dev}/build/mp-weixin uni build -p mp-weixin"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-5020620260917001",