实用pnpm的资料整理
缘起
之前做项目,对于打包工具并没有特别的讲究,也没空认真去研究它们的优劣。
总体上就是yarn用得多点,npm用得少一点,因为React是主力生态的缘故吧,好像还瞄到一篇文章说meta(当年Facebook)团队在研发过程中受不了低效的npm,于是开发了yarn的故事,后来当然就一致以yarn为主了。
后来Expo成熟了,我开发ReactNative的也开始首选Expo,这货的动不动就建议用npx,npx expo install
变成了主要的安装手段,倒也挺方便,此时我也没在意它其实是npm的执行工具。而且这货居然没有提供卸载的命令,于是在卸载包时又顺手yarn remove
。
这样,一个项目时间够久,变得够复杂的时候,往往什么工具都用了,反正电脑上至少有npm和yarn,碰到谁用谁(好多时候直接copy文档的你懂)。
近期看各种视频发现老外特别喜欢用pnpm
,看名字以为它无非是个变种的npm,开始没在意。直到今天想试试3.0后的nextra(之前版本确实稀烂,不摆了),虽然官方文档还是大量用yarn,但github README(上月更新)有这么一句:
The Nextra repository uses [PNPM Workspaces](https://pnpm.io/workspaces) and [Turborepo](https://github.com/vercel/turborepo). To install dependencies, run `pnpm install` in the project root directory.
我觉得确实要了解一下这个pnpm
了。
问AI
pnpm是什么,和yarn比有什么不同和优势?是否现在比较热门?
AI回答
pnpm (performant npm) 是一个现代的包管理器,在2024年确实非常热门。以下是主要特点和与yarn的对比:
主要优势:
- 磁盘空间利用
- pnpm: 使用硬链接和内容寻址存储,所有版本的依赖包只会在硬盘上存储一次
- yarn: 每个项目都会复制依赖包到自己的node_modules
- 安装速度
- pnpm: 通常比yarn和npm快2-3倍
- yarn: 比npm快,但不如pnpm
- 依赖管理:
- pnpm: 使用符号链接创建非扁平的node_modules结构,更严格的依赖管理
- yarn: 使用扁平化的依赖树,可能导致"幽灵依赖"问题
- 性能对比:
操作 pnpm yarn npm
初次安装 31s 42s 55s
重复安装 3s 7s 12s
磁盘占用 0.8GB 1.3GB 1.3GB
- 特色功能:
- 内置monorepo支持
- 更快的依赖解析
- 更好的安全性
- 支持side-effects标记
- 工作空间协议支持
使用趋势:
2022: 14% 使用率
2023: 28% 使用率
2024: 35%+ 使用率(预计)
基本命令对比:
# 安装依赖
pnpm install
yarn install
# 添加包
pnpm add [包名]
yarn add [包名]
# 删除包
pnpm remove [包名]
yarn remove [包名]
# 运行脚本
pnpm [脚本名]
yarn [脚本名]
选择建议:
- 新项目建议使用pnpm
- 现有项目若无特殊需求可继续使用yarn
- monorepo项目强烈推荐pnpm
- 对磁盘空间要求高的场景选pnpm
总的来说,pnpm正在成为前端工程化的首选包管理器,特别适合现代前端开发需求。
***以上回答,除了说明这个工具性能很高外,重点还省空间(每个项目的node_modules都是黑洞啊)。使用符号链接创建非扁平的node_modules结构真的太重要了,我macbook可怜的512G硬盘...😭。