最近执行yarn install 时,突然遇到这样一个段报错
error @achrinza/node-ipc@9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.10.0"
error Found incompatible module.
问题描述的很清楚,@achrinza/node-ipc 不支持现在的node版本18.10.0,确切的说是除了它指定的 8 || 10 || 12 || 14 || 16 || 17 这些版本外,其他的node版本都不支持。
处理办法网上也有很多,例如:
1、将自己的node版本降低的插件包指定的版本上 (不建议 降版本)
2、直接执行 yarn config set ignore-engines true (不建议)
3、更新**@achrinza/node-ipc** 到一个新的版本,让它支持 现在的node版本 (强烈支持)
办法很好,但是都没有具体执行步骤,这里我简单完善一下。
1、更改node版本 (不建议)
首先声明一下,我其实不建议更改node版本的,大家不可能只有一个开发项目,既然目前使用这个node版本,证明是你目前需要的,盲目的更换 node版本治标不治本
但是随着技术的更新换代,node版本 也确实需要对应的升级,所以我这里讲 node版本更换,更多的是 为了 升级去使用,而不是为了 @achrinza/node-ipc 去降级
安装 nvm
现在如果大家还是通过删除node,然后下载对应node,实现变化版本的话,那么就需要好好看一下了。
至于知道nvm ,或者 已经再使用的小伙伴,可以跳过 这里。
nvm 是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
因为早前我详细讲过nvm的安装,以及使用,所以这里就不一一的写了,大家可以通过上边链接,直接看详细内容
nvm 常用语法
//查看node的所有的版本
nvm ls-remote
//安装node指定版本
nvm install 版本号
//查看本地node的所有版本
nvm list
//切换到指定的node版本
nvm use 10.xx.xx
//卸载指定的node版本
nvm uninstall 版本号
//安装最新的node稳定版本
nvm install --lts
// 设置默认node版本
nvm alias default vxx.xx.xx
2、yarn config set ignore-engines true (不建议)
这个配置项的作用是告诉 Yarn 在安装依赖时忽略模块的引擎版本限制,在依赖包的package.json文件中有 engines 属性,它对 node的版本做了限制
yarn config set ignore-engines true
这样虽然解决了问题,但是太过于强硬,人家既然做了限制,就有一定原因,现在直接忽略掉限制,肯存在出现其他问题的可能,因此不建议这么干。
3、更新@achrinza/node-ipc
既然**@achrinza/node-ipc** 的 9.2.2 不支持现在的node版本,那么它是否有其他版本支持 高版本的node呢?
大家可以去npm网站 查看@achrinza/node-ipc所有版本~
果然 @achrinza/node-ipc 有着非常多的版本,既然 9.2.2 版本不支持。那么咱们就找比它高的,这里 9.2.9的下载量非常多,我们就看一下它 是否支持高版本node
不负众望,9.2.9版本确实支持目前大多数的node,那我们就去下载它
安装@achrinza/node-ipc@9.2.9
这里的安装也需要注意一个细节,大家不要直接错误的执行,我们需要将合适的版本,写入resolutions 里才可以
错误的下载
// 这是错误的方法
yarn add @achrinza/node-ipc@9.2.9 --save
正确方式
我们项目中,肯定都有 package.json 文件,我们找到 resolutions,如果没有可以直接 添加
// 这只是一个案例。方便理解 resolutions 所在位置,找到它 添加 @achrinza/node-ipc
{
"name": "my-project",
"version": "1.1.0",
"scripts": {
"dev": "vue-cli-service serve --mode dev --open",
"build": "vue-cli-service build --mode test"
....
},
"dependencies": {
....
"sass": "1.32.8",
"sass-loader": "8.0.2",
"vue": "^2.6.11",
"vue-router": "3.3.1"
....
},
"devDependencies": {
....
"address": "^1.1.2",
"eruda": "^2.5.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2"
....
},
// 这是重点,这里添加 @achrinza/node-ipc
"resolutions": {
"@achrinza/node-ipc": "9.2.9"
},
....
}
resolutions 是一个用于解决依赖项冲突的 npm 特殊字段。在某些情况下,项目依赖项可能需要不同的版本,而这些版本之间可能存在冲突。
这时候,可以使用 resolutions 字段来指定应该使用哪个版本,以解决这些冲突。