pnpm 介绍及使用

180 阅读2分钟

机制介绍

项目的node_modules下只包含直接依赖(dependencies/devDependencies)的pkg,没有其他次级依赖。并且它还只是个软连接方式展示在node_modules目录下,实际内容在.pnpm目录下。然后所有的次级依赖也都扁平的存放在该目录下,它们之间如果还有依赖关系也是软连接关联。最终.pnpm目录下会硬连接到.pnpm store内,它是最终存放实际包的位置

  • pnpm是基于软连接来创建非扁平化的node_modules,解决了依赖嵌套及代码重复问题
  • node_modules下只包含直接的依赖pkg,解决了幽灵依赖问题
  • 并且因为所有的包都在全局的store下,节省了存储空间
  • 同时如果已经在store下的包,不用重复安装直接关联就行。提高了安装效率

pnpm.png

基础内容

大部分语法和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/nnode版本工具的能力

  • 本地安装:pnpm env use <node版本号>
  • 全局安装:pnpm env use -global <14>

monorepo使用

  • 创建pnpm-workspace.yaml来管理关联的工作空间范围(支持目录匹配)
  • 项目之间依赖安装pnpm add <pkg> [-F <name>]