pnpm

节省磁盘空间的包管理器 - 硬链接、严格依赖、快速 monorepo 支持

TL;DR

是什么:快速、节省磁盘空间的 Node.js 包管理器。

为什么用:比 npm 快 2 倍、节省磁盘空间、严格依赖、优秀的 monorepo 支持。

Quick Start

安装

# npm
npm install -g pnpm

# Homebrew
brew install pnpm

# 检查版本
pnpm --version

基本用法

pnpm init
pnpm add express
pnpm install
pnpm dev

Cheatsheet

命令描述
pnpm add pkg添加依赖
pnpm add -D pkg添加开发依赖
pnpm remove pkg移除包
pnpm install安装所有依赖
pnpm update更新包
pnpm run script运行脚本
pnpm dlx pkg执行包(类似 npx)

Gotchas

安装包

# 生产依赖
pnpm add express

# 开发依赖
pnpm add -D typescript

# 全局包
pnpm add -g nodemon

# 特定版本
pnpm add [email protected]

# 从工作区
pnpm add @myorg/shared --filter @myorg/web

工作区(monorepo)

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
# 安装所有工作区依赖
pnpm install

# 在特定包中运行脚本
pnpm --filter @myorg/web dev

# 在所有包中运行
pnpm -r run build

# 向特定包添加依赖
pnpm add lodash --filter @myorg/utils

# 添加工作区依赖
pnpm add @myorg/shared --filter @myorg/web --workspace

过滤

# 按包名
pnpm --filter @myorg/web dev

# 按目录
pnpm --filter ./packages/web dev

# 所有包
pnpm -r run test

# 有更改的包
pnpm --filter "...[origin/main]" run test

# 包的依赖
pnpm --filter "@myorg/web..." run build

配置(.npmrc)

# 严格模式(推荐)
strict-peer-dependencies=true
auto-install-peers=true

# 羞耻地提升(兼容模式)
shamefully-hoist=true

# 存储位置
store-dir=~/.pnpm-store

# 镜像源
registry=https://registry.npmmirror.com

从 npm/yarn 迁移

# 从 package-lock.json 导入
pnpm import

# 或者删除后重新安装
rm -rf node_modules package-lock.json yarn.lock
pnpm install

脚本

{
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "test": "vitest"
  }
}
# 运行脚本
pnpm dev
pnpm run build

# 运行二进制
pnpm exec vitest

# 不安装直接执行包
pnpm dlx create-react-app my-app

Next Steps