在 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
会自动更新依赖版本并发布。