pnpm是前端的包管理器,和yarn,npm是一种东西。
不知道是前端的原因,还是什么原因,万恶的node_modules,貌似是个前端或类似我这种半吊子前端都要上前喷两句,我喷这个的原因就是这东西太多了,在我不会快速删除时,刚接触Vue工程项目时,一个项目删除时可以耗时十几分钟甚至半个小时,我当时就感觉这东西多少有点布盒里,当时还是处于一个虚心求教的心理,
感觉这是特性,前端开发的特性。
看着pnpm的兴起,我感觉这个特性可能不能称之为特性了,可以说是缺陷了。
pnpm介绍
快速的,节省磁盘空间的包管理工具。
pnpm的特点
快速
pnpm比其他包管理器快2倍。
高效
node_modules 中的文件为复制或链接自特定的内容寻址存储库。
支持monorepos
pnpm内置支持单仓多包。
严格
pnpm 默认创建了一个非平铺的 node_modules,因此代码无法访问任意包。
pnpm到底做了什么
当使用npm或yarn时,如果你有100个项目,并且所有项目都有一个相同的依赖包,那么,你在硬盘上就需要保存100份该相同依赖包的副本。
如果是使用pnpm,依赖包将被存放在一个统一的位置,因此:
- 如果你对同一依赖包使用相同的版本,那么磁盘上只有这个依赖包的一份文件;
- 如果你对同一依赖包需要使用不同的版本,则仅有版本之间不同的文件会被存储起来;
- 所有文件都保存在硬盘的统一的位置:
- 当安装软件包时,其包含的所有文件都会硬链接到此位置,而不会占用而外的硬盘空间;
这让你可以在项目之间方便地共享相同版本的依赖包。
pnpm创建非平铺的node_modules目录
npm和yarn
当使用npm或yarn安装依赖包时,所以软件包都被提升到node_modules的根目录下;
其结果是,源码可以访问本不属于当前项目所设定的依赖包。
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常用命令
1 | pnpm store path // 获取包仓库地址(pnpm的仓库不能跨磁盘) |
结语
文中对于软链接和硬链接等概念(操作系统里面的概念)并没有过多解释,但是这些概念对于理解pnpm的特点却又至关重要,建议先去了解一下。
想要了解更多,请移步官网:pnpm中文官网链接