首页 >web前端 >js教程 >ERR_PNPM_BAD_PM_VERSION 该项目配置为使用 pnpm 的 vX。您当前的 pnpm 是 vY

ERR_PNPM_BAD_PM_VERSION 该项目配置为使用 pnpm 的 vX。您当前的 pnpm 是 vY

WBOY
WBOY原创
2024-08-19 17:08:03778浏览

ERR_PNPM_BAD_PM_VERSION This project is configured to use vX of pnpm. Your current pnpm is vY

问题

如果您开始使用 corepack 来管理包管理器的版本,您可能会遇到一个非常奇怪的情况,两个非常相似命令返回不同的结果 :

# Calling `pnpm` directly, this works perfectly fine:
> pnpm install
Lockfile is up to date, resolution step is skipped
Already up to date
Done in 1.5s

# Calling `pnpm` through `ember-cli`, this one fails:
> ember install ember-leaflet
?  Installing packages... This might take a couple of minutes.
Command failed with exit code 1: pnpm add --save-dev ember-leaflet
 ERR_PNPM_BAD_PM_VERSION  
This project is configured to use v9.7.0 of pnpm.
Your current pnpm is v9.1.2

您可能(像我一样)尝试通过运行来“修复项目”:

> corepack prepare pnpm@9.7.0 --activate
> corepack use pnpm@9.7.0
> corepack install --global pnpm@9.7.0

但结果还是一样。

分析

这里有什么问题吗?为什么我们到处强制执行 v9.7.0,但 ember 命令却以某种方式使用 v9.1.2?

如果您在项目中运行版本检查,您确实会获得正确的版本:

> cd ~/my-project
> pnpm --version
9.7.0

但是如果您从其他地方(您的主)目录运行相同的命令,您将得到“错误”版本:

> cd ~
> pnpm --version
9.1.2

这是一条线索。现在让我们看看你的 ember install ember-leaflet 命令中的 ember 是从哪里来的:

> cd ~/my-project
> which ember
/Users/michal/Library/pnpm/ember

啊哈!所以这是我的全局 ember-cli 安装,而不是项目安装(位于 ~/my-project/node_modules/ember-cli/bin/ember 中)。

解决方案

当地的

如果您想在项目中使用已安装的ember-cli版本,您可以通过pnpm exec执行ember命令来实现:

> pnpm exec ember install ember-leaflet

全球的

或者您可以将 pnpm 的全球版本固定到与您的项目匹配的版本:

> corepack install --global pnpm@9.7.0
> pnpm --version
9.7.0
> cd ~/my-project
> ember install ember-leaflet
?  Installing packages... This might take a couple of minutes.
pnpm: Installed leaflet@^1.9.3
Installed addon package.

pnpm 由 corepack 管理

如果您想解决全局版本不匹配问题,您可能会遇到一个问题,即pnpm是从与corepack不同的源安装的,并且更改corepack中的版本不会影响什么版本执行时其他安装优先。

我没有一个简单的解决方案,因为它很大程度上取决于您的情况以及您想要运行的设置,但是如果您(像我一样)只想继续使用 corepack 来管理您的您可以尝试以下 pnpm 版本:

  1. brew 卸载 pnpm
  2. npm uninstall pnpm -g
  3. 按照卸载 pnpm 文档进行操作
  4. 从 shell 配置 (~/.zshrc) 中删除 PNPM_HOME 的所有引用
  5. 重新加载您的 shell 配置 (~/.zshrc)
  6. corepack install --global pnpm@9.7.0
  7. 通过在您的主目录中运行来检查现在全局可用的版本:pnpm --version

主目录恶作剧

可能发生这样的情况:当您在主目录中时,pnpm --version 命令仍然显示某个其他版本而不是您的全局版本。这是为什么? corepack 使用 package.json 中的 packageManager 字段来确定是否应该使用 local 版本而不是 global 版本。您的主目录可能包含 package.json 文件,因此它看起来像一个项目文件夹。只需删除此文件,您很可能是偶然创建的,并且不希望 package.json 位于 ~ 目录中。


ChatGPT v4o 使用提示制作的插图:“困惑的仓鼠看着源代码的意大利面条,试图理解它 --ar 16:9”

以上是ERR_PNPM_BAD_PM_VERSION 该项目配置为使用 pnpm 的 vX。您当前的 pnpm 是 vY的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn