Vite+ 使用 vite 别名时,如何消除 pnpm 的 peer dependency 版本警告?
可以通过 peerDependencyRules.allowAny 放宽对 vite 的 peer dependency 版本检查,消除题目中的警告。配置前需要确认所用插件与当前 Vite+ 版本兼容,因为这项配置不会验证运行时兼容性。
为什么会出现 found 0.1.12?
配置中的:
"vite": "npm:@voidzero-dev/vite-plus-core@latest"
让依赖名 vite 指向另一个包。根据题目日志,实际解析到的包版本是 0.1.12。别名保留了 vite 这个引用名称,但目标包的版本号不会因此变成上游 Vite 的版本号。
pnpm 将 0.1.12 与插件声明的 ^5.2.0 || ^6 || ^7 || ^8 比较后,报告版本不满足要求。这符合版本范围检查规则,单凭警告无法判断插件实际能否运行。
按现有 package.json 配置消除警告
针对题目使用的 pnpm 10.32.1,在已有的 pnpm 对象中加入 peerDependencyRules,保留原来的 overrides:
{
"pnpm": {
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
"vitest": "npm:@voidzero-dev/vite-plus-test@latest"
},
"peerDependencyRules": {
"allowAny": ["vite"]
}
}
}
这是需要合并进 package.json 的配置片段,不要用它替换整个文件。Vite+ 项目仓库的相关问答也给出了这项配置。
保存后重新执行:
vp install
该规则针对 peer dependency 名称 vite,因此同时覆盖日志中 @tailwindcss/vite 和 @voidzero-dev/vite-plus-test 对 vite 的版本要求,无需把 vitest 加入 allowAny。
如果项目已统一使用根目录的 pnpm-workspace.yaml 管理这些设置,也可以将以下配置合并到该文件中:
peerDependencyRules:
allowAny:
- vite
选择与项目现有配置一致的写法即可。
只允许当前已确认的版本
allowAny 会放宽所有包对 vite 的 peer 版本要求。如果只想处理日志中的两个依赖,可以用更具体的 allowedVersions 替换前面的 peerDependencyRules:
{
"peerDependencyRules": {
"allowedVersions": {
"@tailwindcss/vite@4.2.2>vite": "0.1.12",
"@voidzero-dev/vite-plus-test@0.1.12>vite": "0.1.12"
}
}
}
使用 package.json 时,这段配置仍放在 pnpm 对象内。它仅为指定依赖允许 vite 解析为 0.1.12;升级相关包后,需要重新确认并调整规则。allowAny 和按依赖限定的 allowedVersions 均见 pnpm 10 配置文档。
消警后还需要检查什么?
运行项目已有的开发和构建命令,确认插件加载正常、Tailwind CSS 样式能够生成。警告消失只表示版本规则被放宽,不能作为兼容性验证结果。
日志显示已经找到了 vite,因此用于处理缺失依赖的 ignoreMissing 不适用。strictPeerDependencies: false 控制依赖问题是否导致命令失败,也不会消除这类警告,参见 pnpm 配置说明。
备注:内容仅供参考。
