Skip to content

pnpm 中,Monorepo 项目具有先天的优越性。

因为 pnpm 对于 Monorepo 提供了原生支持,最大程度的便利开发。

1.创建根项目

利用 pnpm init 创建根项目,然后新建 pnpm-workspace.yaml 文件,并添加:

yaml
packages:
  - 'packages/*'
  - 'examples/*'
  - '!**/test/**'

2.添加子项目

利用 pnpm 添加 monorepo package,大致有以下几种方式:

2-1.使用 pnpm 命令(推荐)

bash
# 创建新包目录并初始化
pnpm create package packages/my-new-package

# 或者使用简写
pnpm create pkg packages/my-new-package

2-2.手动创建

bash
# 1. 创建包目录
mkdir -p packages/my-new-package

# 2. 进入目录
cd packages/my-new-package

# 3. 初始化 package.json
pnpm init

在新包的 package.json 中设置必要的字段:

json
{
  "name": "@my-scope/my-new-package",  // 包名,通常使用 scope
  "version": "1.0.0",
  "main": "dist/index.js",            // 入口文件
  "types": "dist/index.d.ts",         // TypeScript 类型文件
  "files": [                          // npm 发布时包含的文件
    "dist"
  ],
  "scripts": {
    "build": "tsc",
    "test": "vitest"
  }
}

3.添加依赖

bash
# 在 package-b 中添加对 package-a 的依赖
pnpm add @my-scope/package-a --filter @my-scope/package-b

# 添加开发依赖
pnpm add -D typescript --filter @my-scope/package-b

# 给所有包添加依赖
pnpm add -D vitest -w  # -w 表示添加到工作区根目录

或者,包之间的版本引用可以使用 workspace 协议:

使用如下命令可指定安装 workspace 下的包:

bash
pnpm add pkg-name --workspace
json
{
  "dependencies": {
    "@my-scope/package-a": "workspace:*"  // 自动使用本地版本
  }
}

这样,当这个包发布时,package.json 会自动更新依赖版本并发布。