--legacy-peer-deps 解决 npm 安装失败问题
4/19/2024 npm
# 出现场景
legacy 是
遗产
的意思,他告诉 npm 忽略各个依赖模块之间依赖相同但版本不同的问题,以过去的方式来安装依赖(即依赖会安装多次,但是版本不同,从而解决了版本冲突的问题)。
在 npm install 的时候,经常会出现这个问题,依赖冲突
首先要明白,在 package.json 中
- dependencies 是开发环境和生产环境都需要的依赖
- devDependencies 是仅在开发环境下依赖的模块
- peerDependency 是对等依赖
就好比 prettier 这个用于代码美化的插件,我只在开发环境,写代码的时候用到,所以可以通过 npm install -D prettier
来下载。
而 peerDependency 就是依赖的子依赖存在重复的问题,比如项目依赖插件A
,于此同时还依赖插件B
和插件C
,结果插件B
和插件C
的子依赖还包含了插件A
。
├── 项目
│ └── node_modules
│ ├── 插件A
│ ├── 插件B
│ │ └── nodule_modules
│ │ └── 插件A
│ └── 插件C
│ │ └── nodule_modules
│ │ └── 插件A
这样就安装了三次 插件A
,造成了安装冗余。
peerDependency 就解决了这个问题,只会安装一次 插件A
。
├── 项目
│ └── node_modules
│ ├── 插件A
│ ├── 插件B
│ └── 插件C
npm 从版本 7 就开始支持这个特性了。这些插件是放在 node_modules 下面的,相当于根目录下面(你可以打开看一下,是以名字为文件夹名的,没有版本),但是这样就引入了新的问题,这三次 插件A
可能版本不一致,就造成了依赖的版本冲突。
而 --legacy-peer-deps 参数告诉 npm 忽略各个依赖模块之间依赖相同但版本不同的问题,以过去的方式npm v3-v6
来安装依赖(即依赖会安装多次,但是版本不同,从而解决了版本冲突的问题)。