工程化
包管理工具
- 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
代码可维护性
- 可分析性/可读性
- 能快速定位线上问题
- code review
- 减少人为因素,加强工具干预(各种 lint)
- source-map 定位
- 可改变性/可拓展性
- 稳定性
- 避免修改代码造成 bug
- 核心业务代码测试覆盖率