coleava / me

1 stars 0 forks source link

pnpm #38

Open coleava opened 1 year ago

coleava commented 1 year ago

一、什么是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的空间