docs: document pnpm EACCES issue on WSL2 Windows filesystem

pnpm fails with permission denied during atomic rename on /mnt/d/ (NTFS).
Solution: keep app/ on WSL2 native fs (~/fire_goal/app/).

- 04-风险与避坑.md: add as 三级坑 with cause, fix, and principle
- 03-架构设计.md: add WSL2 native path requirement with HBuilderX access path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ila
2026-06-08 10:17:31 +08:00
co-authored by Claude Sonnet 4.6
parent 7bd7284d92
commit 9e7d20f062
2 changed files with 25 additions and 0 deletions
+21
View File
@@ -114,6 +114,27 @@ interface Store {
WSL2 会自动将内部端口转发到 Windows 的 `localhost`,所以 WSL2 里启动的 dev server,Windows 浏览器直接用 `http://localhost:端口` 访问,热更新也正常生效。 WSL2 会自动将内部端口转发到 Windows 的 `localhost`,所以 WSL2 里启动的 dev server,Windows 浏览器直接用 `http://localhost:端口` 访问,热更新也正常生效。
### ⚠️ app/ 必须放在 WSL2 原生文件系统
pnpm 在 `/mnt/d/`(Windows NTFS 挂载)上做原子重命名时会报 `EACCES` 权限错误,导致 `pnpm install` 失败。
**正确路径**:`~/fire_goal/app/`(WSL2 原生 ext4)
```bash
# 开发时进入 WSL2 原生目录
cd ~/fire_goal/app
pnpm install # ✅ 无权限问题
pnpm dev:h5
```
Windows 侧(HBuilderX 云打包)通过以下路径访问:
```
\\wsl$\Ubuntu\home\<用户名>\fire_goal\app
```
> docs/ 和 research/ 仍在 `/mnt/d/opc_project/fire_goal/`,用 git 管理;app/ 在 WSL2 原生 fs 单独开发。
### 必须的 Vite 配置 ### 必须的 Vite 配置
Vite 默认只监听 `127.0.0.1`(WSL2 内部),需改为监听所有网卡,否则 Windows 浏览器无法访问。 Vite 默认只监听 `127.0.0.1`(WSL2 内部),需改为监听所有网卡,否则 Windows 浏览器无法访问。
+4
View File
@@ -35,6 +35,10 @@ rpx 换算、iOS 安全区、状态栏、**键盘顶起输入框**、滚动穿
## 🟢 三级坑:知道即可 ## 🟢 三级坑:知道即可
- **pnpm 在 /mnt/d/ 上权限报错(已踩)**:WSL2 挂载的 Windows NTFS 磁盘(`/mnt/d/`)不支持原子重命名操作,pnpm install 时报 `EACCES: permission denied, rename ...`。
- **解决**:把 `app/` 移到 WSL2 原生文件系统(`~/fire_goal/app/`),pnpm 在原生 fs 上无此问题;Windows 侧通过 `\\wsl$\Ubuntu\home\用户名\fire_goal\app` 访问(HBuilderX 云打包用此路径)。
- **原则**:开发目录放 WSL2 原生 fs(`~`),文档/配置等只读文件可留 `/mnt/d/`。
- **nvue 陷阱**:只支持 flex、CSS 受限、与 vue 混用割裂 → **全程用普通 vue 页面,不碰 nvue**。 - **nvue 陷阱**:只支持 flex、CSS 受限、与 vue 混用割裂 → **全程用普通 vue 页面,不碰 nvue**。
- **插件市场质量参差**:收费/失修/文档差,跨端 bug 难定位 → 少依赖第三方原生插件。 - **插件市场质量参差**:收费/失修/文档差,跨端 bug 难定位 → 少依赖第三方原生插件。
- **HBuilderX 耦合**:云打包/原生插件偏 GUI;CLI 项目导入偶有适配问题 → 用 HBuilderX 友好的结构搭项目。 - **HBuilderX 耦合**:云打包/原生插件偏 GUI;CLI 项目导入偶有适配问题 → 用 HBuilderX 友好的结构搭项目。