包管理工具

176 阅读1分钟

一、背景

研发效能

优化依赖安装速度

npm现状

模块数量多,模块关系错综复杂,重复依赖,小文件多

二、包管理工具

npm@2

  • 项目依赖结构干净,每个依赖都有自己的node_modules
  • 依赖树过深
  • 多重身

npm@3、yarn

  • 项目依赖结构扁平化
  • 相同依赖不同版本只会有一个会提升
  • 幽灵依赖、多重身

pnpm

  • 项目依赖结构同npm@2
  • 软硬链接,减少文件复制,节省磁盘占用

三、优化

image.png

image.png

  • 更快的获取依赖关系(解析策略)
  • 更快的下载tgz包(网络 IO)
  • 更快的写入到硬盘、重复依赖处理(文件 IO)

四、多包管理(monorepo)

workspace

依赖关系:工作区可以相互依赖,同时始终使用最新的可用代码

锁文件:一个单独的锁文件而不是为每个工程使用一个不同的锁文件

workspace与lerna 的关系

Lerna利用工作区的底层机制,封装大量的高层API,能够提供新的用法并提高性能

参考:

pnpm是凭什么对npm和yarn降维打击的: zhuanlan.zhihu.com/p/549189023

Pnpm: 最先进的包管理工具 zhuanlan.zhihu.com/p/404784010

深入浅出 tnpm rapid 模式 - 如何比 pnpm 快 10 秒 zhuanlan.zhihu.com/p/455809528

幽灵依赖 rushjs.io/zh-cn/pages…

npm分身 rushjs.io/zh-cn/pages…

软硬链: mp.weixin.qq.com/s?__biz=MzI…

pnpm 为什么不全都用 hard link pnpm.io/zh/blog/202…