pnpm
更先进的 npm 包管理工具
Node.js 模块的问题
安装速度慢
磁盘占用多
磁盘上存在大量重复文件
每次安装版本不一致
早期 npm 方案的问题
全局包缓存:解决重复下载问题
Hoisting:模块扁平化至根目录,解决重复文件
Lock 文件:固定版本号
1.x 的改进
扁平化未解决的问题
不同项目内还是有大量重复文件
扁平化引入的新问题
版本不确定性
幽灵依赖 Phantom dependencies
NPM 包分身 NPM doppelgangers
依赖版本不确定性
幽灵依赖 Phantom dependencies
举个例子
你在项目中用了 webpack,webpack 依赖了 lodash
你使用了 lodash 但未在 package.json 声明依赖
由于 Hoisting,代码可以正常运行
一段时间之后
webpack 不再依赖 lodash 了
或者 webpack 依赖的 lodash 版本变了
NPM doppelgangers
NPM 分身的问题
重复文件导致磁盘占用
包体积变大
破坏单例模式
pnpm 的方案
硬盘每个包的每个版本只存一份(Store)
创建从 Store 到项目 node_modules 的链接
保持 node_modules 树型结构
为什么需要 .pnpm 目录?
软连接和硬连接区别?
问题
npm 包的加载机制
Plug'n'Play (yarn 2+ & pnpm)
可以不要 node_modules 吗?
benchmark
Performant Node Package Manager
pnpm 社区生态
15.4K Github star
知名用户
Microsoft
Bytedance
Vue 生态
避免混用包管理器 (pnpm only)
corepack: Node.js' manager of package managers
使用 pnpm
扩展阅读
深入浅出 tnpm rapid 模式 - 如何比 pnpm 快 10 秒
Deno
Thank You!
Questions?
Made with Slides.com