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
2
3
pnpm store path  // 获取包仓库地址(pnpm的仓库不能跨磁盘)
pnpm store prune // 从store中删除当前未被引用的包来释放store的空间

结语

文中对于软链接和硬链接等概念(操作系统里面的概念)并没有过多解释,但是这些概念对于理解pnpm的特点却又至关重要,建议先去了解一下。
想要了解更多,请移步官网:pnpm中文官网链接

4k 长辫子女孩 耳环 侧脸 唯美 梅花 红色背影