Skip to content

速查表

这一页把全书反复出现的源码入口、命令和改动路线压缩成查阅表。读源码时可以先看这里,再回到对应章节展开。

仓库地图

目标先看哪里说明
看 Web UI 和 tRPCweb/srcNext.js 应用、页面、组件、服务端 router 都在这里。
看后台消费worker/src队列消费者、批处理、异步任务和 ClickHouse 写入集中在这里。
看稳定契约packages/shared/srcdomain schema、queue payload、DB client、repository、查询抽象都在 shared。
看企业能力eeweb 消费,但仍依赖 shared 里的基础契约。
看 API 定义fern/apisPublic API contract 变更应从 Fern 源头更新。
看生成产物generated只读,不手改。
看中文架构图architecture/langfuse-current-architecture.drawio/architecture/langfuse-current-architecture.drawiodraw.io XML,可以用 diagrams.net 打开。

五层架构

主要职责不应该做什么
外部入口层浏览器、SDK、API client、webhook、LLM provider 进入系统不保存业务状态。
webUI、tRPC、Public API、ingestion HTTP endpoint不直接复制 shared 已有契约。
packages/shared类型、Zod schema、队列名、DB/query/repository 契约不 import webworkeree
worker消费 BullMQ job、批量写入、异步处理不定义新的跨进程 payload 契约。
数据设施层Postgres、ClickHouse、Redis、S3/blob、Prisma不把业务规则散落在脚本里。

常用命令

命令用途
pnpm install安装 workspace 依赖。
pnpm run dev启动主要开发进程。
pnpm run dev:web只启动 web。
pnpm run dev:worker只启动 worker。
pnpm run lint全仓 lint。
pnpm run typecheck全仓类型检查。
pnpm run build:checkNext.js build check。
pnpm run seed -- list查看可用 seed 场景。
pnpm run dev启动这本书的本地阅读站点。
pnpm run build构建这本书的静态站点。
pnpm run preview预览构建产物。

改动路线

你要做什么推荐路线
新增 UI 功能找 feature 目录 -> 找 tRPC router -> 找 shared schema/query -> 加测试和浏览器验证。
新增 Public API改 Fern contract -> 改 public API type/route -> 用 Zod 校验输入输出 -> 回归 API 测试。
新增 worker job先改 packages/shared/src/server/queues.ts -> 再加 producer -> 最后加 worker processor。
修改 ingestion 字段先确认事件 schema -> 更新 S3/queue/worker/ClickHouse 写入链路 -> 加迁移和回归。
修改筛选能力先读 web/src/features/search-bar/README.md -> 保持 grammar、validate、lower、FilterState 一致。
修改数据查询从 shared query builder 或 repository 下手,不把 SQL 拼到 UI 组件里。
复刻类似 infra先读 ingestion 链路 -> 抽 queue/schema/writer/query contract -> 做第 8 篇实验课。

验证选择

改动范围至少验证
文档站点pnpm run build
web/**pnpm run lint + 目标测试 + 真实浏览器检查。
worker/**pnpm run lint + 目标 worker 测试。
packages/shared/**pnpm run lint + 一个 web 侧检查 + 一个 worker 侧检查。
Prisma 或 ClickHouse schemapnpm run lint + pnpm run db:generate + 目标回归。
Public API contractpnpm run lint + API 测试 + Fern 更新或再生成。

判断边界

看到一个文件时,先问四个问题:

  1. 它是入口、契约、执行器,还是数据访问?
  2. 它的输入输出有没有 Zod 或 TypeScript 类型固定?
  3. 它是否跨进程、跨包、跨存储?
  4. 改它以后,哪个消费者最容易坏?

这四个问题通常比文件名更快定位风险。