在使用 pnpm 进行多包项目(monorepo)开发时,开发者可能会遇到 `ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL` 错误。该错误通常发生在执行 `pnpm run` 命令时,某个子项目的脚本执行失败,导致整个递归执行流程中断。常见原因包括:依赖未正确安装、脚本名称拼写错误、环境变量配置不一致或子项目配置缺失。解决方法包括:检查各子项目的 `package.json` 文件完整性、确保依赖已通过 `pnpm install` 正确安装、使用 `--filter` 参数定位具体失败项目,以及通过 `pnpm -r run <script></script>
1条回答 默认 最新
巨乘佛教 2025-08-09 11:00关注一、理解 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL 错误
在使用 pnpm 进行 monorepo(多包项目)开发时,开发者常常会使用
pnpm run <script>命令在所有子项目中递归执行脚本。当某个子项目的脚本执行失败时,pnpm 会抛出错误ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL,并立即停止整个递归执行流程。二、常见原因分析
该错误通常由以下几类问题引起:
- 依赖未正确安装:子项目依赖未通过
pnpm install安装,导致运行脚本时找不到模块。 - 脚本名称拼写错误:某个子项目的
package.json中不存在指定的脚本名称。 - 环境变量配置不一致:不同子项目对环境变量的依赖不同,可能导致某些项目运行失败。
- 子项目配置缺失:缺少必要的配置文件或构建工具配置。
三、排查与解决方法
- 检查 package.json 完整性:确保每个子项目的
package.json中包含正确的脚本定义。 - 安装依赖:运行
pnpm install确保所有子项目的依赖正确安装。 - 使用 --filter 参数定位失败项目:例如
pnpm run build --filter my-package。 - 使用 -r 参数查看详细日志:执行
pnpm -r run <script>强制递归运行并输出详细错误信息。
四、进阶技巧与调试流程
为了更高效地排查错误,可以使用如下流程:
pnpm -r run build 2>&1 | grep -i error通过管道将错误输出过滤,快速定位失败的子项目。
五、构建流程中的自动化检测机制
可以在 CI/CD 流程中加入如下检查步骤,防止该类错误进入生产环境:
步骤 命令 目的 1. 安装依赖 pnpm install 确保所有子项目依赖完整 2. 检查脚本存在性 find . -name package.json -exec grep -l 'build' {} \\; 确认所有子项目都定义了 build 脚本 3. 执行构建 pnpm -r run build 递归执行构建并输出详细日志 六、可视化调试流程图
graph TD A[开始] --> B[执行 pnpm run script] B --> C{是否有子项目失败?} C -->|是| D[输出 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL] C -->|否| E[构建成功] D --> F[使用 --filter 定位具体项目] F --> G[检查 package.json 脚本定义] G --> H[运行 pnpm install 确保依赖] H --> I[重新执行构建]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 依赖未正确安装:子项目依赖未通过