当我通过编辑 package.json 在空项目中添加不带peerDependency 的依赖项时,如下所示:
{
"name": "pnpmtest",
"devDependencies": {
"eslint-plugin-jsx-a11y": "^6.6.0"
}
}
然后运行
pnpm install
命令会输出错误
ERR_PNPM_PEER_DEP_ISSUES
devDependencies:
+ eslint-plugin-jsx-a11y 6.6.1
ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies
.
└─┬ eslint-plugin-jsx-a11y 6.6.1
└── ✕ missing peer eslint@"^3 || ^4 || ^5 || ^6 || ^7 || ^8"
Peer dependencies that should be installed:
eslint@"^3 || ^4 || ^5 || ^6 || ^7 || ^8"
以上命令输出
1
退出代码。
echo $?
1
这个错误完全没问题,因为我的项目缺少 eslint。这是所需的输出。
我的问题始于 CI 环境,我也希望在
pnpm install
之后看到此错误并中断 CI 管道。目前,当我删除 node_modules
并再次运行上面的安装时(这是模拟 CI 中发生的情况),我没有看到错误和命令输出代码 0。
→ rm -rf node_modules
→ pnpm install
Lockfile is up to date, resolution step is skipped
Packages: +56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Packages are hard linked from the content-addressable store to the virtual store.
Content-addressable store is at: /Users/mjanaszek/Library/pnpm/store/v3
Virtual store is at: node_modules/.pnpm
Progress: resolved 56, reused 56, downloaded 0, added 56, done
devDependencies:
+ eslint-plugin-jsx-a11y 6.6.1
→ echo $?
0
如何检查 CI 环境(当“Lockfile 是最新的”时)我的依赖项是否包含一些 ERR_PNPM_PEER_DEP_ISSUES?
这个命令可以解决问题:
pnpm install --resolution-only
--resolution-only
的帮助说:
重新运行解决方案:对于打印出对等依赖问题很有用
不是一个非常不言自明的名称,但可以满足您的需要(也是我需要的!)
您可以通过运行
pnpm ls --json
来检查包的状态。
如果您不希望 pnpm 在对等依赖问题上失败,请将“strict-peer-dependencies”设置设置为“false”。
pnpm up --config.strict-peer-dependencies=false
希望对您有帮助。