跳到主要内容

工程化

包管理工具

https://juejin.cn/post/6932046455733485575

  • 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
    • 核心业务代码测试覆盖率