引擎“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个回答

5

我建议按照错误信息所说的检查你的Node.js版本(node -v)。升级Node.js最简单的方法是使用n版本管理器:

$ npm install -g n

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


3

3

2
有时我们无法升级 Node 引擎(例如老旧项目、客户要求等)。这种情况下我找到的解决方法是通过使用 Yarn 中记录的“选择性依赖项解析”来降级存在问题的版本:选择性依赖项解析
{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  }
}

注意“解析”部分。您可以强制这些软件包降级到与您的旧Node引擎兼容的版本。

2
sudo npm cache clean -f
sudo npm install -g n
sudo n 10.22.1
node -v => Should be on 10.22.1

请告诉我您需要的 Node 版本,这里只是举例使用了 10.22.1。


7
这个用户正在试图用yarn管理他们的软件包。最好坚持使用他们正在使用的工具来回答问题。虽然我不是JS专家,但我知道混合使用yarn和npm可能会导致奇怪的行为。 - Strifey

1
这比表面上看起来要麻烦得多。
如果您包含了一个需要node 6的模块,但是您有其他使用node 11的模块,那么您将会遇到这个错误!
当您使用nom/yarn等工具安装第三方模块时,这就成为了一个问题,因为您没有访问这些软件包仓库的权限,除非您使用git fork。
在我的情况下,我正在使用yarn workspaces,并且一些package.json文件中的模块可能需要foo 1.0,而其他模块则需要foo 2.0,而1.0版本可能需要node 6,而2.0版本可能需要node 14。
我找到的唯一解决方案是使用--ignore-engines,尽管显然这正如其他人所发表的那样 - 这并不能解决问题,只是忽略它,而不考虑可能引起的任何问题(node 6代码可能无法在node 14上运行!)。

1

刚刚发现不仅需要升级node,还需要安装它。

这将升级node到最新版本:

brew upgrade node

这将安装特定版本的node

nvm install 17.0.0

0

ignore-engines 告诉包管理器在安装包时忽略 package.json 文件中 engines 字段的内容。所以当您将 ignore-engine 设置为 true 时,基本上是告诉 Yarn 忽略此字段,并继续进行安装,而不管 Node.js。

engines 允许软件包作者声明需要哪些 Node 引擎才能正常运行。基本上,需要哪个 Node 版本。如果您忽略此指导,就有可能安装一个无法与您正在使用的 Node 版本一起工作的软件包,因为它依赖于您的 Node 版本不支持的功能。

所以我发现最好的解决方案是更新到推荐版本的 Node,如下所示:

卸载旧版本的 Node.js。此命令将删除旧的 Node.js 包及其任何相关依赖项。

sudo apt autoremove nodejs

添加不同的存储库源。这将把 NodeSource 包存储库添加到系统的源列表中。

curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -

从新的存储库安装Node.js。

sudo apt-get install -y nodejs

0

对于使用 asdf 并遇到此问题的任何人,您的 nodejs 插件版本应该升级和/或设置。

检查 asdf 插件版本:

▶ asdf current
nodejs          16.13.0         Not installed. Run "asdf install nodejs 16.13.0"
poetry          1.2.1           /Users/zack/.tool-versions
python          3.9.9           /Users/zack/.tool-versions

验证是否安装了最新版本:

▶ asdf install nodejs latest
nodejs 20.1.0 is already installed

将全局版本设置为最新版本:

▶ asdf global nodejs latest

验证集:

▶ asdf current
nodejs          20.1.0          /Users/zack/.tool-versions
poetry          1.2.1           /Users/zack/.tool-versions
python          3.9.9           /Users/zack/.tool-versions

对我来说,这之后一切都正常工作了。


0
yarn add 是一个糟糕的决定,如果有很多库,不应该忽略引擎,并且当你运行时:
yarn add <your_lib> --ignore-engines

一些库在你的项目中无法工作。

2
目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

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