引擎“node”与此模块不兼容。

339

在将代码部署到AWS时,我遇到了以下的yarn错误

error fs-extra@7.0.1: The engine "node" is incompatible with this module. Expected version ">=6 <7 || >=8". Got "7.0.0"
任何想法这将如何解决?
如果我在package.json中指定引擎,这是否有效?
{ 
  "engines" : { 
    "node" : ">=8.0.0" 
  }
}

4
是的,您会遇到这个错误是因为软件包版本与Node引擎不兼容。 - Shubham Sharma
1
@ShubhamSharma,谢谢。如果我在package.json中指定引擎块,那么就不会出现任何错误了,对吧?我要试一下。 - JN_newbie
2
尝试在您的代码库中站点的基本目录中添加 .node-version 或 .nvmrc 文件。 - Shardul
24个回答

410

您可以尝试忽略引擎:

$ yarn install --ignore-engines

或者

$ yarn global add <your app> --ignore-engines

您可以运行以下命令查看所有可忽略的内容:

$ yarn help | grep -- --ignore

--ignore-scripts     don't run lifecycle scripts
--ignore-platform    ignore platform checks
--ignore-engines     ignore engines check
--ignore-optional    ignore optional dependencies

28
或者,如Peter在下面回答的那样,只需运行yarn config set ignore-engines true来永久禁用整个系统上的这种侵入性检查,以使其更易于理解。 - Nabil Freeman
9
除了忽略版本错误之外,另一种选择是使用类似于“nvm install 16.16.0”和“nvm use 16.16.0”这样的命令来更新您的节点版本。这些命令将更新您本地的.nvmrc文件,该文件指定了每个项目的节点版本。从此页面https://nodejs.org/en/about/releases/选择一个稳定的长期支持(LTS)版本,并确保它与错误信息中的预期版本匹配。请注意,不要改变原文的意思。 - Hartley Brody

158

您需要升级您的 node 版本。

我也遇到了同样的问题。

如果您使用了 Homebrew,请运行:

brew update  # This updates Homebrew to latest version
brew upgrade node

如果你使用 nvm ,则运行:
nvm current node -v  # Checks your current version
nvm install <version>  # Example: nvm install 12.14.1

对于上述步骤,请前往Node.js - Downloads

获取一个满足您错误条件的版本,最新版本应该可以正常工作。

更详细的步骤说明:如何更新Node.js


5
如果你需要特定的 Node 版本而不是最新版本,你可以执行以下命令:brew update; brew search node; brew unlink node; brew install node@12 - J.Z.
在回答中应该提到“如果您不是Windows用户”。 - Sanan Ali
2
@J.Z. 你忘记了链接已安装的版本 brew link node@12 的最后一步骤。 - azizbro
即使更新后我得到了“node 17.3.0已安装”,仍然存在相同的错误。你知道如何解决吗? - glushkina1
1
这对我有用,使用错误中提到的版本号。我的错误是 Expected version ">=16". 所以我运行了 nvm install 16. - John Skiles Skinner

150
一个被称为“hack”的修复方法可以是:
yarn config set ignore-engines true

但是,如果您想要一个永久的解决方案,则需要执行以下操作:

  1. 删除 node_modules/、package-lock.json 和 yarn.lock
  2. 再次运行 yarn install 或 npm i。

7
删除 yarn.lock 文件并重新运行 yarn install 对我有用,看起来这是最合理的解决方案——我克隆了一个我多年未接触的存储库,并且我的 node 版本已经升级了。出现错误的原因是 yarn.lock 告诉 yarn 应该期望某个特定的 node 版本,在我的情况下是“期望版本“> = 4 <=9”。得到“16.1.0””,所以要删除 yarn.lock 文件。 - drkvogel
谢谢!那个有效。 - Adam
删除这两个锁定文件(我的next.js项目中没有node_modules文件夹)对我有用! - Ð..

34
在安装包时,可以像这样在后缀中添加--ignore-engines来忽略引擎检查:

yarn add <package_name> --ignore-engines


2
谢谢这个 :) 我不建议忽略任何东西,但是嘿,在本地一切都很好 :D - LukyVj

21
不建议使用这个:
% yarn install --ignore-engines

它避免了问题,而不是解决问题。
一个可能的解决方案是将您的节点更新到版本> 8.0
% brew upgrade node

或者你可以使用nodenv或nvm来管理多个节点版本,以防你在其他项目中需要它们。
% brew install nodenv
% nodenv init
# Load nodenv automatically by appending
# the following to ~/.zshrc:

eval "$(nodenv init -)"
% nodenv install 6.0.0 //or some other version

1
nvm 是一种替代工具,用于管理您的 Node 版本。 - rosalynnas

18

许多答案建议设置标志以忽略版本错误。

更好的选择是将此用作提醒,更新您的Node版本为最近支持您要安装的包的版本。

nvm install 16.16.0  # download & install locally on your system
nvm use 16.16.0      # update current project's .nvmrc file

请注意,第二个命令将会更新您本地的.nvmrc文件,用于指定每个项目所使用的Node.js版本。
Node.js生态环境变化迅速,即使是"长期支持"(LTS)版本也在约三年后停止支持。请使用此页面查看最新的LTS版本,同时确保它与您要安装的软件包期望的Node.js版本匹配,根据错误信息进行确认。

2
在大多数情况下,这可能是正确的答案,感谢@HartleyBrody。 - fredrivett
1
这是一个答案。这就是为什么StackOverflow正在失去信誉,没有解释修复方案,只有解决方法或以前解决方案的副本。每个人都在寻找“赞”。向@HartleyBrody致敬。 - AFetter
我的回答刚刚超过一年,我包含的节点版本 16.16.0 已经接近生命周期的尾声了! - undefined

18

我用yarn --ignore-engines解决了我的问题,但我不确定为什么以及如何做到的。


16

我在Ubuntu上遇到了类似的问题,即使多次安装最新版本的Nodejs,它仍然显示相同的旧版本;我发现每次都会安装相似的旧Debian软件包,即使执行了apt-get update命令。

最终,我通过清除旧的nodeJs,添加不同的存储库源,并按照以下方式正常安装nodeJs来解决了这个问题:

sudo apt-get purge --auto-remove nodejs
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

请在此处查找所有NodeJs发行版的列表:Node.js二进制发行版 您可能会发现其他更新方式,但这种方法对我有效。

可能是旧的配置文件在阻碍进程。 - Teekin
这对我来说效果最好。即使尝试使用NVM设置默认的Node版本,也没有成功。我移除了NVM,并使用这个解决方案安装了Node。现在一切都很顺利。 - Matt Budz

11
你可以尝试:
1. 打开你的package.json文件。 2. 找到"engines": { "node": "14.x" }。 3. 把14.x改成>=14.x

这实际上是做什么的?背后的上下文意义是什么?谢谢 - mattsmith5

6
您需要运行以下命令,问题将得到解决。
yarn install --ignore-engines

或者

npm install --ignore-engines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接