使用pnpm全新安装Embroider应用时出现依赖缺失错误
依赖问题排查求助与通用方法
我维护的多数应用已切换至pnpm,这是一款好用的工具,但不清楚如何排查依赖问题。本次问题源自Ember插件ember-table,已在其仓库提交issue,希望了解这类Cannot find module ...、添加缺失模块后不断出现新缺失的依赖问题的通用排查方法。
报错信息
❯ ember s Building into /private/var/folders/k0/b1p9d5g94px8gdr10458gv0m0000gn/T/embroider/96cc9c Build Error (broccoli-persistent-filter:Babel > [Babel: ember-table]) in ember-table/ember-table/-private/collapse-tree.js Cannot find module '@babel/plugin-proposal-object-rest-spread' Require stack: - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/index.js - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/index.js - /app-root/node_modules/.pnpm/broccoli-babel-transpiler@7.8.1/node_modules/broccoli-babel-transpiler/lib/worker.jsError: Cannot find module '@babel/plugin-proposal-object-rest-spread' Require stack: - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/index.js - /app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/index.js - /app-root/node_modules/.pnpm/broccoli-babel-transpiler@7.8.1/node_modules/broccoli-babel-transpiler/lib/worker.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15) at resolve (internal/modules/cjs/helpers.js:107:19) at tryRequireResolve (/app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js:157:9) at resolveStandardizedNameForRequire (/app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js:195:19) at sync (/app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js:224:12) at sync (/app-root/node_modules/.pnpm/gensync@1.0.0-beta.2/node_modules/gensync/index.js:182:19) at /app-root/node_modules/.pnpm/gensync@1.0.0-beta.2/node_modules/gensync/index.js:210:24 at Generator.next (<anonymous>) at resolvePlugin (/app-root/node_modules/.pnpm/@babel+core@7.18.13/node_modules/@babel/core/lib/config/files/plugins.js:83:17) at resolvePlugin.next (<anonymous>) Stack Trace and Error Report: /var/folders/k0/b1p9d5g94px8gdr10458gv0m0000gn/T/error.dump.8c92aeb46d1be7e57b69153a731964ac.log
复现步骤
ember init -sn -sb -sg --no-welcome --embroiderpnpm install- 执行
ember s确认无构建错误 ember install ember-table- 执行
ember s出现构建错误
环境信息
❯ ember --version && pnpm --version && node --version ember-cli: 4.6.0 node: 14.19.1 os: darwin x64 7.9.4 v14.19.1
通用依赖问题排查方法
- 检查依赖声明与安装状态
- 用
pnpm ls <缺失包名>查看该包是否已安装,以及被哪些依赖引入,版本是否匹配 - 查看出问题的依赖(如ember-table)的package.json,确认它是否正确声明了所需的
dependencies或peerDependencies,是否存在遗漏
- 用
- 利用pnpm的依赖分析工具
- 执行
pnpm why <缺失包名>,明确该包的依赖链路,排查是否存在版本冲突或未被正确引入的情况 - 临时尝试
pnpm install --shamefully-hoist,部分工具可能依赖顶层node_modules的包(pnpm默认采用硬链接隔离依赖,该命令会将依赖提升到顶层)
- 执行
- 清理缓存与重新安装
- 清理pnpm缓存:
pnpm store prune - 删除本地依赖与锁文件:
rm -rf node_modules pnpm-lock.yaml,再重新执行pnpm install
- 清理pnpm缓存:
- 排查配置类问题
- 检查项目或依赖中的Babel配置文件(如babel.config.js、.babelrc),确认缺失的插件是否被正确声明,以及@babel/core版本与插件版本是否兼容
- 对于Ember项目,检查ember-cli-build.js中的Babel配置,是否有自定义配置覆盖了默认设置导致插件无法加载
- 确认工具版本兼容性
- 检查当前pnpm版本与ember-cli版本是否兼容,部分旧版ember-cli对pnpm的支持可能不完善
- 尝试升级ember-cli到最新稳定版,或切换到与当前ember-cli兼容的pnpm版本
内容的提问来源于stack exchange,提问作者rreckonerr
相关产品推荐
相关产品推荐

