@@ -173,6 +173,83 @@ git push origin doc_raven
173173| ` disable ` | 在任何模式下都跳过远程图片尺寸请求,仅使用文档内手动声明的宽高 |
174174| ` force ` | 强制启用远程图片尺寸请求,并在出现错误时抛出异常以暴露问题 |
175175
176+ ### pnpm 版本和 lockfile 相关问题
177+
178+ #### 问题:pnpm-lock.yaml 频繁出现格式变化(单双引号切换)
179+
180+ ** 原因** :不同版本的 pnpm 使用不同的 YAML 序列化格式,即使依赖关系相同,锁文件的格式也可能不同。
181+
182+ ** 解决方案** :
183+
184+ 1 . ** 确保使用正确的 pnpm 版本** :
185+ ``` bash
186+ # 检查当前版本
187+ pnpm --version
188+
189+ # 应该显示: 10.20.0
190+ # 如果不是,请使用以下命令之一:
191+
192+ # 方法 1: 使用 corepack(推荐)
193+ corepack enable
194+ corepack prepare pnpm@10.20.0 --activate
195+
196+ # 方法 2: 全局安装
197+ npm install -g pnpm@10.20.0
198+ ```
199+
200+ 2 . ** 验证版本一致性** :
201+ ``` bash
202+ pnpm check:pnpm-version
203+ ```
204+
205+ 3 . ** 如果 lockfile 已经被错误修改** :
206+ ``` bash
207+ # 丢弃 lockfile 的修改
208+ git checkout pnpm-lock.yaml
209+
210+ # 确认使用正确的 pnpm 版本后重新安装
211+ pnpm install
212+ ```
213+
214+ 4 . ** 在提交前检查** :
215+ 项目的 pre-commit hook 会自动检查 pnpm 版本和 lockfile 变更,如果发现版本不匹配会给出警告。
216+
217+ #### 问题:CI 检查失败,提示 lockfile 不一致
218+
219+ 这通常意味着:
220+ 1 . 你本地使用的 pnpm 版本与项目要求的不一致
221+ 2 . lockfile 被错误修改或损坏
222+
223+ ** 解决方案** :
224+ ``` bash
225+ # 1. 确认并切换到正确的 pnpm 版本
226+ corepack enable
227+ pnpm --version # 确认是 10.20.0
228+
229+ # 2. 删除 node_modules 和重新安装
230+ rm -rf node_modules
231+ pnpm install
232+
233+ # 3. 检查 lockfile 是否有变更
234+ git status
235+
236+ # 4. 如果没有变更,说明已修复;如果有变更,说明之前的 lockfile 确实有问题
237+ ```
238+
239+ #### 问题:为什么要使用 corepack 而不是全局安装?
240+
241+ ** Corepack 的优势** :
242+ - 自动读取 ` package.json ` 的 ` packageManager ` 字段
243+ - 每个项目可以使用不同的 pnpm 版本而不冲突
244+ - 新贡献者克隆项目后自动使用正确的版本
245+ - 减少版本不匹配导致的问题
246+
247+ ** 如何为团队启用 corepack** :
248+ ``` bash
249+ # 一次性设置,之后所有项目都会受益
250+ corepack enable
251+ ```
252+
176253## 🚀 开发环境
177254
178255### 1. 克隆仓库
@@ -184,10 +261,57 @@ cd involutionhell
184261
185262### 2. 安装依赖
186263
264+ ** 重要:为了避免 pnpm-lock.yaml 格式不一致的问题,请务必使用项目指定的 pnpm 版本!**
265+
266+ 本项目已在 ` package.json ` 中锁定了 pnpm 版本(` "packageManager": "pnpm@10.20.0" ` ),推荐使用 ** corepack** 来自动管理正确的版本:
267+
268+ #### 方式一:使用 Corepack(推荐)
269+
270+ Corepack 是 Node.js 16.9+ 自带的工具,能自动使用 ` package.json ` 中指定的包管理器版本。
271+
272+ ``` bash
273+ # 启用 corepack
274+ corepack enable
275+
276+ # 安装依赖(corepack 会自动使用 pnpm@10.20.0)
277+ pnpm install
278+ ```
279+
280+ #### 方式二:全局安装指定版本
281+
282+ 如果不想使用 corepack,可以手动安装项目指定的 pnpm 版本:
283+
284+ ``` bash
285+ # 安装 pnpm 10.20.0
286+ npm install -g pnpm@10.20.0
287+
288+ # 安装依赖
289+ pnpm install
290+ ```
291+
292+ #### 验证 pnpm 版本
293+
294+ 安装完成后,请务必验证你使用的是正确的版本:
295+
187296``` bash
188- pnpm install # 推荐;如需可改用 npm install
297+ # 检查 pnpm 版本
298+ pnpm --version
299+ # 应该输出: 10.20.0
300+
301+ # 或使用项目提供的检查脚本
302+ pnpm check:pnpm-version
189303```
190304
305+ #### ⚠️ 为什么版本一致性很重要?
306+
307+ 不同版本的 pnpm 在序列化 ` pnpm-lock.yaml ` 时可能使用不同的格式(如单引号 vs 双引号),导致:
308+ - PR 中产生大量无意义的 diff
309+ - 增加代码审查负担
310+ - 可能导致 CI 检查失败
311+
312+ 我们的 CI 工作流会自动检查版本一致性,如果检测到版本不匹配会导致构建失败。
313+
314+
191315### 3. 本地开发
192316
193317运行开发服务器:
@@ -207,12 +331,14 @@ pnpm dev
207331常用脚本集中在 ` package.json ` 中,以下是最常用的命令:
208332
209333``` bash
210- pnpm dev # 启动开发服务器
211- pnpm build # 构建生产版本
212- pnpm start # 启动生产服务器
213- pnpm lint:images # 检查图片是否符合规范
214- pnpm migrate:images # 自动迁移图片到对应 assets 目录
215- pnpm postinstall # 同步必要的 Husky/Fumadocs 配置
334+ pnpm dev # 启动开发服务器
335+ pnpm build # 构建生产版本
336+ pnpm start # 启动生产服务器
337+ pnpm lint:images # 检查图片是否符合规范
338+ pnpm migrate:images # 自动迁移图片到对应 assets 目录
339+ pnpm check:pnpm-version # 检查 pnpm 版本是否与 package.json 一致
340+ pnpm check:lockfile # 检查 lockfile 是否有未预期的修改
341+ pnpm postinstall # 同步必要的 Husky/Fumadocs 配置
216342```
217343
218344---
0 commit comments