2021-07-22 初稿 2021-10-10 补充 目前主力使用 pnpm 了真香

看github上一个项目的源码,发现他用的 pnpm作为包管理工具,这啥?有一个 yarn还不够?这里简单体验一下,后面再用到了,补充技术细节。

官网介绍:

Fast, disk space efficient package manager快速的,节省磁盘空间的包管理工具
https://github.com/pnpm/pnpm

image.png
截至 2021-07-22 版本 v6

存在的意义

为何存在,能解决什么问题?https://zhuanlan.zhihu.com/p/377593512

通过阅读能了解到,

  • 安装速度快。比 yarn PnP 还快。走的是 npm mirror 确实特别快
  • 体积不冗余。说到底安装时候是写入硬盘,后续硬链接hard link 连接,这意味着多次安装相同项目到不同目录,不会产生冗余,多版本也会尽可能复用。
  • monorepo 本身支持常见命令

特点:

  • 快速pnpm 比替代品快2x
  • 高效 Node_modules 中的文件是从一个单一的可内容寻址的存储中链接过来的
  • 支持 monorepos pnpm 内置支持了单仓多包
  • 严格 pnpm 创建了一个非平铺的 node_modules,因此代码无法访问任意包

安装配置使用

  1. # 安装
  2. npm install -g pnpm
  3. # 升级
  4. pnpm add -g pnpm

日常使用

  1. pnpm install axios
  2. pnpm i axios -D --prefer-offline
  3. pnpm i axios -S
  4. pnpm uninstall axios --filter package-a
  5. pnpm add xx
  6. pnpm build/dev
  7. # 内置了类似 npx 的东西
  8. pnpx xx
  9. pnpm link ../../axios 本地项目链接到另一个项目

简单过了一下命令,可以更倾向于使用offline,对monorepo 工作空间有细致描述。

从日常的使用上没太看出来区别。先不管了,先用着。

还有,一定要看node兼容性,比较追新。

pnpx 类似 npx 调整你为

  • pnpm exec 从项目内执行,也可以不写 exec
  • pnpm dlx 临时下载

过滤
pnpm xxx —filter some package