工程化
包管理工具
- npm1/npm2
- npm3/yarn
- pnpm
npm1/2
采用了嵌套树的结构,大量的包会被重复安装。
npm3/yarn
将依赖拍平后(hoist
)放在了根目录下。但是存在安全性的问题,由于依赖被拍平造成的扁平化结构,会导致能够使用到未声明的其他包。
例如:A 依赖 B、B 依赖 C,拍平后 A 也能使用到 C (幽灵包)。不确定性,例如 A 依赖于 C1.0、B 依赖于 C2.0,导致 A 中 C 和 B 中的 C 都有可能被提升到根节点上,而这取决于 A 和 B 在 package.json
中的顺序。
pnpm
- 速度快
- 通过
hard link
不同的项目也可以复用相同的包 - 支持 monorepo
- .pnpm store hardlink