[ PROMPT_NODE_26146 ]
monorepo
[ SKILL_DOCUMENTATION ]
# Monorepo 参考
Railway 支持两种类型的 Monorepo 部署,并提供不同的配置方法。
## 关键决策:根目录 vs 自定义命令
| 方法 | 适用场景 | 效果 |
|----------|-------------|--------------|
| **根目录 (Root Directory)** | 独立应用 (无共享代码) | 仅该目录下的代码可用 |
| **自定义命令 (Custom Commands)** | 共享 Monorepo (TypeScript, workspaces) | 整个仓库可用,在构建/启动时进行过滤 |
**关键点:** 设置根目录意味着在构建期间该目录之外的代码不可用。对于包含共享包的 Monorepo,请改用自定义命令。
## 独立 Monorepo
应用完全独立 - 目录之间没有共享代码。
├── frontend/ # React 应用 (独立)
│ ├── package.json
│ └── src/
└── backend/ # Python API (独立)
├── requirements.txt
└── main.py
### 配置
为每个服务设置 **根目录 (Root Directory)**:
- 前端服务: `/frontend`
- 后端服务: `/backend`
每个服务只能看到其自身目录的代码。
### 适用场景
- 前端和后端使用不同语言
- 没有共享包或依赖
- 每个应用都有自己的 package.json/requirements.txt
- 应用不会从兄弟目录导入代码
## 共享 Monorepo
应用共享来自公共包或根目录的代码。
├── package.json # 根工作区配置
├── packages/
│ ├── frontend/
│ │ ├── package.json
│ │ └── src/
│ ├── backend/
│ │ ├── package.json
│ │ └── src/
│ └── shared/ # 共享工具库
│ ├── package.json
│ └── src/
└── tsconfig.json # 共享 TS 配置
### 配置
不要设置根目录。相反,使用自定义构建和启动命令:
**pnpm:**
Build: pnpm --filter backend build
Start: pnpm --filter backend start
**npm workspaces:**
Build: npm run build --workspace=packages/backend
Start: npm run start --workspace=packages/backend
**yarn workspaces:**
Build: yarn workspace backend build
Start: yarn workspace backend start
**bun:**
Build: bun run --filter backend build
Start: bun run --filter backend start
**Turborepo:**
Build: turbo run build --filter=backend
Start: turbo run start --filter=backend
### 适用场景
- 使用工作区的 TypeScript/JavaScript Monorepo
- 包从兄弟包导入代码 (`@myapp/shared`)
- 在根目录使用共享的 tsconfig.json, eslint 配置
- 使用 pnpm, yarn workspaces, npm workspaces, o