一、什么是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文件,里面保存的是所有包的硬链接;
- 其结果是,源码不可以访问本不属于当前项目所设定的依赖包。
-
五、使用
1.官网: https://pnpm.js.org/installation/
2.使用
版本切换
pnpm env use --global 14 //(使用偶数版本,奇数版本为不稳定版本)
常见命令
pnpm install 包名 //
pnpm i 包名
pnpm add 包名 // -S 默认写入dependencies
pnpm add -D // -D devDependencies
pnpm add -g // 全局安装
pnpm remove 包名 //移除
pnpm up //更新所有依赖项
pnpm upgrade 包 //更新包
pnpm upgrade 包 --global //更新全局包
在系统上禁止使用脚本解决方法
# 以管理员身份运行power shell
set-executionpolicy remotesigned
快速删除node_modules依赖包
npm i rimraf // 安装删除快捷依赖包
rimraf node_modules // 执行删除