pnpm+monorepo实践

1.初始化 Monorepo 项目

首先创建一个新的monorepo项目,并初始化一个 pnpm 工作空间。

1
2
3
mkdir my-monorepo
cd my-monorepo
pnpm init

2.配置 pnpm 工作空间

在项目的根目录下创建一个pnpm-workspace.yaml文件,用于定义工作空间的包结构:

1
2
3
packages:
- 'packages/*'
- 'apps/*'

此文件告诉pnpmpackagesapps目录下的所有包都是工作空间的一部分。

3.创建子包

packagesapps目录中创建你的子项目,例如:

1
2
mkdir -p packages/utils
mkdir -p apps/webapp

然后分别在这些目录下初始化 package.json 文件:

1
2
cd packages/utils
pnpm init
1
2
cd apps/webapp
pnpm init

4.安装依赖

在项目根目录执行依赖安装:

1
pnpm install

pnpm会自动在根目录创建node_modules,并使用硬链接方式共享依赖,节省空间。

5.子包之间的依赖管理

apps/webapp中引用packages/utils

1
2
cd apps/webapp
pnpm add @my-scope/utils --filter ./packages/utils

pnpm 会将 utils 包作为依赖添加到 webapp 项目中,并实现本地引用。

6.运行脚本

可以在 pnpm 工作区内执行特定包的脚本。例如,在 webapp 中启动应用:

1
pnpm --filter webapp run start

7.发布和版本管理

通过 pnpm,可以使用changesets进行版本管理和发布。

8.pnpm 常用命令

模块 命令 功能描述
管理依赖 pnpm add 安装软件包及其依赖的任何软件包。
管理依赖 pnpm install 安装依赖
管理依赖 pnpm update 更新所有依赖
管理依赖 pnpm remove 删除包
运行脚本 pnpm run 运行一个在 package.json 中定义的脚本

ps:其他命令可以参考文档

总结

这种 pnpm + monorepo 的大仓实践能够很好地管理大型前端项目的多个包,使得依赖关系和包之间的联动更加简单、清晰,并能提高团队协作效率。