pnpm早在五年前就发布了第一个正式的版本,一直到现在使用的还是不多。抛开速度和安全性(并不觉得这两点是抛开npm或者yarn的重点),高效利用磁盘空间和支持monorepo是最大的特性。
之前分享monorepo也提到了,尤雨溪把vue3和vite迁移使用pnpm,所以未来的包管理工具会不会是pnpm?
还有一个信息是,node在16.9.0之后实验性的新增了管理包的管理工具corepack : Corepack is an experimental tool to help with managing versions of your package managers.
有趣的是Corepack现在只支持pnpm和yarn,当强制使用pnpm或者yarn的时候,用另外一种就会被拦截无法使用(npm却不会被拦截),而且还能强制使用pnpm或者yarn的版本,不需要自己手动下载某个pnpm或者yarn的版本。
都在说node官方现在对npm开始不满,因为npm越来越商业,还被GitHub收购,再加上yarn和pnpm这些包管理工具的突起,所以另外搞个cli替代npm,就是不知道哪个大版本会正式启用Corepack。
npm早期是node_modules嵌套,到后面yarn出现,node_modules平铺,新增lock等,npm把yarn实现的都实现了。如果都依赖一个相同的包,就会在各自的目录下创建node_modules文件夹。
回到pnpm对磁盘空间的高效利用(monorepo就是这点的天然产物),官网地址 : 项目初衷:节约磁盘空间并提升安装速度
使用pnpm的开源项目还是蛮多的: https://pnpm.io/workspaces#usage-examples
很多东西好好看看官网就了解了,这边就不复制官网的一些介绍,但是,自己通过旧项目进行了几个测试,发现pnpm并不好用。
我并不了解硬链接和原始链接,我只是最简单的把项目复制几份,然后用pnpm install安装依赖,发现每一个项目node_modules还是占用磁盘空间,然后通过看盘符使用的空间,发现还是占用了。而官网常见问题里面的解释并不能理解: https://pnpm.io/zh/faq#does-pnpm-work-across-multiple-hard-drives-or-filesystems
也有人说Linux测试是正确的,可能我使用的方式不对?需要使用junctions才能在Windows看见效果?。文件系统根目录下的.pnpm-store也找到了,
还有最重要的一点,我用了三个项目使用pnpm安装依赖,结果三个项目都运行不了,也并不没有想着去解决。看来使用pnpm并没有像官网说的那样直接平替npm、yarn。又或者说pnpm专门为了monorepo而生?
最后,并不是不想拥抱新的技术,只是在我个人感受来说,yarn、npm现在的各种缺点我完全是能接受的,磁盘空间?对我来说,我的项目不会多到需要优化磁盘空间。