引擎“节点”与此模块不兼容

JN_*_*bie 121 dependencies node.js npm yarnpkg

部署到 AWS 时,我遇到了纱线错误

error fs-extra@7.0.1: The engine "node" is incompatible with this module. Expected version ">=6 <7 || >=8". Got "7.0.0"
Run Code Online (Sandbox Code Playgroud)

知道这将如何解决吗?

如果我在 package.json 中指定引擎,这会解决吗

{ 
  "engines" : { 
    "node" : ">=8.0.0" 
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 138

您可以尝试忽略引擎:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 或者,正如 Peter 在下面回答的那样,只需运行“yarn config setignore-engines true”即可在整个系统上永久禁用这种侵入性检查。 (30认同)
  • 除了忽略版本错误之外,另一个选择是使用“nvm install 16.16.0”之类的内容实际更新节点版本,然后使用“nvm use 16.16.0”。这些将更新您的本地“.nvmrc”,它指定每个项目节点版本。从此页面选择一个稳定的长期支持 (LTS) 候选版本,并确保它也与错误消息中的预期版本匹配:https://nodejs.org/en/about/releases/ (9认同)

Dav*_*ngo 75

您需要升级您的node版本。

我遇到了同样的问题。

如果您使用Homebrew运行:

brew update  # This updates Homebrew to latest version
brew upgrade node
Run Code Online (Sandbox Code Playgroud)

如果您使用nvm运行:

nvm current node -v  # Checks your current version
nvm install <version>  # Example: nvm install 12.14.1
Run Code Online (Sandbox Code Playgroud)

对于上述步骤,请转到https://nodejs.org/en/download/

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

更详细的演练:https : //flaviocopes.com/how-to-update-node/

  • 或者,如果您需要特定的而不是最新版本的节点,您可以执行以下操作:`brew update; 酿造搜索节点;酿造取消链接节点;酿造安装节点@12` (6认同)
  • @JZ你忘记了链接已安装版本`brew link node@12`的最后一步 (2认同)

小智 51

一个黑客修复可以是

yarn config set ignore-engines true
Run Code Online (Sandbox Code Playgroud)

但是,如果您想要一个永久的解决方案是:

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

  • 删除yarn.lock并再次执行yarn install对我有用,并且似乎是最明智的解决方案 - 我克隆了一个我多年没有碰过的存储库,并且我的节点版本已经升级了 - 错误是因为yarn.lock正在告诉yarn 期望某个节点版本 - 在我的例子中,“期望版本”&gt;=4 &lt;=9”。得到“16.1.0” - 所以删除yarn.lock。 (9认同)

The*_*awk 22

建议使用这个:

% yarn install --ignore-engines
Run Code Online (Sandbox Code Playgroud)

它避免问题而不是解决问题。
一个可能的解决方案是将您的节点更新到version > 8.0.

% brew upgrade node
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用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
Run Code Online (Sandbox Code Playgroud)


Har*_*ody 21

很多答案都说设置标志来忽略版本错误。

更好的选择是使用它作为提醒,将您的节点版本更新到最新版本并受您要安装的软件包支持。

nvm install 16.16.0  # download & install locally on your system
nvm use 16.16.0      # update current project's .nvmrc file
Run Code Online (Sandbox Code Playgroud)

.nvmrc请注意,第二条命令将更新指定每个项目节点版本的本地版本。

节点生态系统周转很快,即使是“长期支持”(LTS)版本也会在大约 3 年后停止获得支持。使用此页面查看最新的 LTS 发行版本,并根据错误消息确保它与您正在安装的包所需的节点版本匹配。

  • 在大多数情况下,这可能是正确的答案,谢谢@HartleyBrody (2认同)

cmc*_*des 12

--ignore-engines在安装包时添加后缀,如下所示:

yarn add <package_name> --ignore-engines

  • 谢谢你:)我不建议忽略任何东西,但是嘿,在本地这一切都很好:D (2认同)

小智 11

我的问题已通过 解决yarn --ignore-engines,但我不确定为什么以及如何解决。


And*_*iko 11

你可以试试:

  1. 打开你package.json
  2. 寻找 "engines": { "node": "14.x" }
  3. 改变14.x->>=14.x


Han*_*akr 6

即使在使用最新版本多次安装 Nodejs 之后,我在 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
Run Code Online (Sandbox Code Playgroud)

请在https://github.com/nodesource/distributions/blob/master/README.md下面找到所有 NodeJs 发行版的列表

您可能会找到其他方法来进行更新,但这个方法对我有用。


Sad*_*auf 6

您需要运行以下命令,您的问题就会得到解决

yarn install --ignore-engines
Run Code Online (Sandbox Code Playgroud)

或者

npm install --ignore-engines
Run Code Online (Sandbox Code Playgroud)


小智 5

我建议按照错误消息所述执行操作并检查您的 Node.js 版本 ( node -v)。升级 Node.js 最简单的方法是使用n版本管理器:

$ npm install -g n
Run Code Online (Sandbox Code Playgroud)

然后安装最新 ( n latest) 或 LTS ( n lts) 版本的 Node。