本地开发

使用 crbn CLI 在本地运行完整的 Carbon 栈,每个 worktree 一个隔离环境。

Carbon 是一个 pnpm + Turborepo monorepo,包含 ERP 和 MES 应用以及共享包。packages/dev 中的 crbn CLI 管理本地环境。每个 Git worktree 获得独立的 Compose 栈、端口、Redis 数据库和 JWT 凭据,因此多个分支可以同时运行。

设置

把 crbn 加入 PATH

执行安装脚本来安装 shell 包装器:

bash
source ./setup.sh

启动栈

在 worktree 中启动 Compose 服务以及 ERP 和 MES 开发服务器:

bash
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-portlesslocalhost 模式:固定端口(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
ERP3000
MES3001

从 main 同步文件

新 worktree 不包含 Git 忽略的本地文件。从主检出复制它们:

命令作用
crbn copy <file…>从主检出复制指定文件到当前 worktree。
crbn env sync复制 package.json 中 crbn.copy 列出的文件。

配置

本地设置位于生成的 .env.local。完整配置面参见环境变量,在自己的基础设施上运行 Carbon 参见自托管。