--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来安装依赖(即依赖会安装多次,但是版本不同,从而解决了版本冲突的问题)。