用途:在编写或审查 Effect-TS 代码(任何导入 "effect" 或 "@effect/*" 的文件)时提供编码规范,面向该 monorepo 的 Effect v4 beta。
主要能力:给出核心惯用法,包括用 Effect.gen 写 async/await 风格流程、用 Effect.fn 定义具名 Effect 函数、避免 try/catch 而改用 Effect.try / Effect.tryPromise。错误处理提供 Effect.catchAll、catchAllCause、catchTag、catchTags、catchIf。服务推荐用 Effect.Service 并始终使用 scoped:,通过 dependencies 引用如 Database.Default 的自动 Layer;应用层只保留一次 Effect.provide,其余用 Layer 组合。领域实体用 Schema(含 brand、Schema.Class、TaggedError,偏好 DateTimeUtc)。可观测性提供 withSpan、fn、annotateCurrentSpan 及各级 log。测试使用 @effect/vitest,主运行器为 it.effect(已含 Scope),另有 it.live、it.layer,且不在 it 内用 Effect.runSync,expect 替代 assert。
使用方式:先运行 pnpm setup:repos(或 bash scripts/setup-repos.sh)将 Effect v4 源码克隆到 .repos/effect-v4/,该目录被 gitignore。验证 API 时直接 grep .repos/effect-v4/packages/effect/src/ 及 platform-node/src/,源码优先于文档。若目录缺失,重跑 pnpm setup:repos;要更新到上游 main 也重跑该命令(原地快进)。克隆仓库只读,不要从其导入,应使用工作区目录中固定的 effect@beta 与 @effect/platform-node@beta。
适用场景:该 monorepo 内 Effect-TS 代码的开发、审查与测试,需要确认 v4 API 或分包位置时。
限制与约定:目标为 Effect v4 beta;v4 将 Schema、Stream、Sink、Channel、FileSystem、Path、Terminal、Stdio、Schedule、Pool、Semaphore、Cron、DateTime、Match 合并进核心 effect,CLI 位于 effect/unstable/cli(不稳定),子进程用 effect/unstable/process 加 NodeChildProcessSpawner,HTTP/HttpApi/RPC 位于对应 unstable 模块。文档可能滞后于 beta,网页文档部分仍带 v3 风格。代码风格用 Tab 缩进、单引号、尾逗号、宽 100,由 Prettier 处理,lint 用根 pnpm lint(oxlint + prettier),无包级覆盖。这是原型仓库,直接破坏 API,不提供兼容层或弃用周期;摩擦记录在 packages/<pkg>/notes/friction.md。当本指南与克隆源码冲突时,以源码为准并更新本技能。