pnpm Monorepo 架构
目标:一个仓库维护两个前端项目(Vite + React / Vite + Vue3),覆盖完整流程:项目架构、开发运行、打包。
1. 最终目录结构
2. 初始化
2.1 工作区配置
pnpm-workspace.yaml:
.npmrc:
2.2 根 package.json
初始化后生成,修改为:
2.3 创建子项目
2.4 子项目命名与配置
把两个 app 的 package.json 中的 name 改为 @apps/project-a-react / @apps/project-b-vue3。
同时在 vite.config.ts 中固定端口,避免并行 dev 时冲突:
apps/project-a-react/vite.config.ts:
apps/project-b-vue3/vite.config.ts:
3. 依赖管理(核心操作)
3.1 安装根依赖(工具链)
eslint、prettier、typescript、commitlint 等工具链依赖装根目录:
3.2 安装子项目依赖
3.3 内部包引用
子项目引用公共包,在 package.json 中写:
然后根目录执行 pnpm install。
3.4 删除、查看、升级
3.5 原则
- 工具链依赖 → 根目录(
-w) - 业务依赖 → 子项目(
--filter) - 内部包 →
workspace:* - 所有命令在根目录执行
4. 公共包示例
packages/shared-utils/package.json:
packages/shared-utils/src/index.ts:
在 app 中使用:
5. 运行与构建
6. 常见问题
6.1 子项目找不到 workspace 依赖
- 检查
pnpm-workspace.yaml是否包含packages/* - 检查依赖是否写成
"workspace:*" - 根目录重新
pnpm install
6.2 端口冲突
各自 vite.config.ts 配置 server.port 固定端口。
6.3 部署后刷新 404
前端 history 路由 + 服务端未配置 fallback。Nginx 加 try_files $uri $uri/ /index.html;。

