机制介绍
项目的node_modules下只包含直接依赖(dependencies/devDependencies)的pkg,没有其他次级依赖。并且它还只是个软连接方式展示在node_modules目录下,实际内容在.pnpm目录下。然后所有的次级依赖也都扁平的存放在该目录下,它们之间如果还有依赖关系也是软连接关联。最终.pnpm目录下会硬连接到.pnpm store内,它是最终存放实际包的位置
pnpm是基于软连接来创建非扁平化的node_modules,解决了依赖嵌套及代码重复问题- 在
node_modules下只包含直接的依赖pkg,解决了幽灵依赖问题 - 并且因为所有的包都在全局的
store下,节省了存储空间 - 同时如果已经在
store下的包,不用重复安装直接关联就行。提高了安装效率
基础内容
大部分语法和npm基本一致
- 安装依赖:pnpm add -D|-O|-g|-w|-F (可用于项目之间的依赖)
- -w 将依赖包安装到根目录下
- --workspace 仅添加能在 workspace 中找到的依赖包
- -F 只让特定的 selector 来安装依赖(支持匹配方式)
- --save-peer
- 升级/删除:pnpm up/rm
- 安装项目全部依赖:pnpm i
- 执行本地命令:pnpm exec
- 查看过期:pnpm outdated
- 启动套件创建项目:pnpm create
- 导入lock文件:pnpm import
- 查看store位置:pnpm store path
- 从store删除未引用的包:pnpm store prune
- 发布公共包:pnpm publish(记得切换源)
- 版本管理 pnpm version major|minor|patch
管理node环境
可实现nvm/n等node版本工具的能力
- 本地安装:pnpm env use <node版本号>
- 全局安装:pnpm env use -global <14>
monorepo使用
- 创建
pnpm-workspace.yaml来管理关联的工作空间范围(支持目录匹配) - 项目之间依赖安装
pnpm add <pkg> [-F <name>]