#每天一个知识点# - npm 从第 3版开始,package.json 中的依赖安装方式采用的扁平化处理(flattened dependency tree)。假设我们项目有一个依赖 A,A 本身依赖 B,B 又依赖 C,即
```bash
A → B → C
```
那么扁平化处理后,node_modules 中目录结构是这样的
```bash
A
B
C
```
这有效的解决了两个问题:1. 避免出现过长的路径(许多Windows工具有256个字符限制)2. 同名依赖包去重(避免重复安装)。
不过也引来了一个为人所诟病的问题——项目中虽然只依赖A ,但在代码中引入 B 或 C 包不会报错,因为 node_modules 中包含这些包名,这就会有一些隐藏很深的BUG 出现,yarn 也有一样的问题,但是 pnpm 很好地解决了这个问题
```bash
A → B → C
```
那么扁平化处理后,node_modules 中目录结构是这样的
```bash
A
B
C
```
这有效的解决了两个问题:1. 避免出现过长的路径(许多Windows工具有256个字符限制)2. 同名依赖包去重(避免重复安装)。
不过也引来了一个为人所诟病的问题——项目中虽然只依赖A ,但在代码中引入 B 或 C 包不会报错,因为 node_modules 中包含这些包名,这就会有一些隐藏很深的BUG 出现,yarn 也有一样的问题,但是 pnpm 很好地解决了这个问题
展开
评论
点赞