前言
pnpm近两年盛行起来,很多公司及开源项目纷纷转向pnpm,那么它究竟有什么魔力呢?
一、什么是pnpm
快速的,节省磁盘空间的包管理工具。
二、pnpm的特点
1、快速
pnpm比其他包管理器快2倍。
2、高效
node_modules 中的文件为复制或链接自特定的内容寻址存储库。
3、支持monorepos
pnpm内置支持单仓多包。
4、严格
pnpm 默认创建了一个非平铺的 node_modules,因此代码无法访问任意包。
三、pnpm到底做了什么
1、当使用npm或yarn时,如果你有100个项目,并且所有项目都有一个相同的依赖包,那么,你在硬盘上就需要保存100份该相同依赖包的副本。
2、如果是使用pnpm,依赖包将被存放在一个统一的位置,因此:
- 如果你对同一依赖包使用相同的版本,那么磁盘上只有这个依赖包的一份文件;
- 如果你对同一依赖包需要使用不同的版本,则仅有版本之间不同的文件会被存储起来;
- 所有文件都保存在硬盘的统一的位置:
- 当安装软件包时,其包含的所有文件都会硬链接到此位置,而不会占用而外的硬盘空间;
- 这让你可以在项目之间方便地共享相同版本的依赖包。
四、pnpm创建非平铺的node_modules目录
1、npm和yarn
- 当使用npm或yarn安装依赖包时,所以软件包都被提升到node_modules的根目录下;
- 其结果是,源码可以访问本不属于当前项目所设定的依赖包。
2、pnpm
- 使用pnpm安装依赖包时,只有安装的那个包会在node_modules的根目录下,并且以软链接(符号链接)的方式存在;
- 在node_modules的根目录下同时还会有一个.pnpm文件,里面保存的是所有包的硬链接;
- 其结果是,源码不可以访问本不属于当前项目所设定的依赖包。
五、npm与pnpm命令对比
npm命令 | pnpm等价命令 |
---|---|
npm install | pnpm install |
npm install 包名 | pnpm add 包名 |
npm uninstall 包名 | pnpm remove 包名 |
npm run 脚本 | pnpm 脚本 |
六、pnpm常用命令
pnpm store path // 获取包仓库地址(pnpm的仓库不能跨磁盘)
pnpm store prune // 从store中删除当前未被引用的包来释放store的空间
结语
文中对于软链接和硬链接等概念(操作系统里面的概念)并没有过多解释,但是这些概念对于理解pnpm的特点却又至关重要,建议先去了解一下。
想要了解更多,请移步官网:pnpm中文官网链接