一、背景
研发效能
优化依赖安装速度
npm现状
模块数量多,模块关系错综复杂,重复依赖,小文件多
二、包管理工具
npm@2
- 项目依赖结构干净,每个依赖都有自己的node_modules
- 依赖树过深
- 多重身
npm@3、yarn
- 项目依赖结构扁平化
- 相同依赖不同版本只会有一个会提升
- 幽灵依赖、多重身
pnpm
- 项目依赖结构同npm@2
- 软硬链接,减少文件复制,节省磁盘占用
三、优化
- 更快的获取依赖关系(解析策略)
- 更快的下载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
npm分身 rushjs.io/zh-cn/pages…
软硬链: mp.weixin.qq.com/s?__biz=MzI…
pnpm 为什么不全都用 hard link pnpm.io/zh/blog/202…