本地开发
使用 crbn CLI 在本地运行完整的 Carbon 栈,每个 worktree 一个隔离环境。
Carbon 是一个 pnpm + Turborepo monorepo,包含 ERP 和 MES 应用以及共享包。packages/dev 中的 crbn CLI 管理本地环境。每个 Git worktree 获得独立的 Compose 栈、端口、Redis 数据库和 JWT 凭据,因此多个分支可以同时运行。
设置
启动栈
在 worktree 中启动 Compose 服务以及 ERP 和 MES 开发服务器:
crbn up这会生成 .env.local,包含 worktree 专用端口、本地 Supabase 密钥、REDIS_URL、Inngest 开发设置和 DEV_BYPASS_EMAIL。
访问应用
通过其 portless .dev URL 或 localhost:<端口> 打开应用。
HEADS UP
DEV_BYPASS_EMAIL 仅供本地使用。它会以该邮箱直接登录,无需魔法链接。绝不要在生产部署中设置它。
栈命令
| 命令 | 作用 |
|---|---|
crbn up | 启动 compose 栈和应用。 |
crbn up --no-portless | localhost 模式:固定端口(API 54321、ERP 3000、MES 3001)。 |
crbn up --no-apps | 仅服务:Postgres、Kong、Supabase、Inngest、邮件。 |
crbn up --no-migrate | 启动时跳过数据库迁移。 |
crbn up --no-regen | 跳过类型和 Swagger 重新生成。 |
crbn up --borrow | 复用另一个 worktree 已运行的容器。 |
crbn up --pull | 即使本地已有镜像也强制 docker compose pull。 |
crbn down | 停止栈(保留卷)。 |
crbn reset | 清空卷并刷新 Redis 数据库后重新启动。 |
crbn migrate | 对运行中的栈应用数据库迁移。 |
crbn status | 显示端口分配和容器健康状态。 |
NOTE
pnpm dev 是 crbn up --no-portless 的简写:固定端口的 localhost 模式。
Worktree
每个分支获得独立的 worktree 和栈,因此可以并行运行多个。
| 命令 | 作用 |
|---|---|
crbn checkout <branch> | 切换到分支的 worktree,不存在时创建(从 origin 自动拉取)。 |
crbn checkout -b <branch> | 从 --base(默认 HEAD)创建新分支和 worktree。 |
crbn checkout <pr-number> | 把 PR 的 head 拉取到 pr-<num> 分支和 worktree。 |
crbn checkout main | 返回主检出(从不单独建 worktree)。 |
crbn new [branch] | 交互式创建 worktree。 |
crbn list | 列出所有 worktree 及其栈状态。 |
crbn remove | 多选要拆除的 worktree;加 --prune 同时删除分支。 |
Portless 与 localhost
默认情况下,crbn up 使用 portless 为每个应用分配稳定的 TLS .dev URL,例如 erp.<branch>.dev。传入 --no-portless 或设置 CARBON_PORTLESS=0 使用固定的 localhost 端口:
| 服务 | 端口 |
|---|---|
| Supabase API(Kong) | 54321 |
| ERP | 3000 |
| MES | 3001 |
从 main 同步文件
新 worktree 不包含 Git 忽略的本地文件。从主检出复制它们:
| 命令 | 作用 |
|---|---|
crbn copy <file…> | 从主检出复制指定文件到当前 worktree。 |
crbn env sync | 复制 package.json 中 crbn.copy 列出的文件。 |