news 2026/9/14 14:26:56

深入 Effect TypeScript Monorepo:仓库布局、验证工作流与生成文件管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入 Effect TypeScript Monorepo:仓库布局、验证工作流与生成文件管理

深入 Effect TypeScript Monorepo:仓库布局、验证工作流与生成文件管理

【免费下载链接】effectBuild production-ready applications in TypeScript项目地址: https://gitcode.com/GitHub_Trending/ef/effect

本指南基于仓库根目录的 .agents/AGENTS.md(即项目根目录 AGENTS.md 的源文件)展开,系统讲解 Effect TypeScript 单体仓库(monorepo)的目录布局、为 AI Agent 与人类开发者设计的验证(Validation)工作流,以及生成文件(Generated Files)的管理规则。读完本文,你将掌握在该仓库中定位代码、选择最小化验证命令、安全修改代码并提交变更的完整方法。

说明:仓库根目录的AGENTS.md是由 scripts/setup-agents.mjs 通过符号链接指向.agents/AGENTS.md的,后者是权威源文件。该文件是项目面向 Agent 与贡献者的核心工程指南,本文以其为骨架,并结合根目录 package.json、vitest.config.ts、dprint.json、.changeset/config.json 等真实配置进行深化。

一、仓库定位:pnpm 驱动的 TypeScript 单体仓库

AGENTS.md 开篇即点明仓库的核心事实:

  • 这是Effect TypeScript monorepo
  • Git 基础分支为main(与 .changeset/config.json 中的"baseBranch": "main"一致);
  • 所有命令统一在仓库根目录使用pnpm执行(根 package.json 声明"packageManager": "pnpm@11.20.0",仓库通过 pnpm-workspace.yaml 管理多包工作区)。

从根 package.json 可以看到,prepare脚本会执行node scripts/setup-agents.mjs && effect-tsgo patch,其中 setup-agents.mjs 负责把.agents/AGENTS.md符号链接为根目录AGENTS.md。这意味着:当你看到根目录的 AGENTS.md 时,它实际指向.agents/AGENTS.md,任何更新都应作用于.agents/AGENTS.md

二、仓库布局:核心代码、包族与文档源

AGENTS.md 的 Layout 小节给出了权威目录划分,结合实际仓库可以进一步细化:

路径内容
packages/effect/src、packages/effect/test、packages/effect/typetest核心库源码、运行时测试、类型测试
packages/ai、packages/atom、packages/platform、packages/sql、packages/tools其他包族;独立包也直接位于packages下(如 packages/opentelemetry、packages/vitest)
各包内的testtypetest目录与源码并列存放的测试与类型测试
ai-docs/srcAI 文档源(用于生成 LLMS.md)
.changesetChangesets 变更集
migration/annotationsv3 → v4 迁移标注源

各包族的实际形态(从源码结构看):packages/ai下包含 anthropic、openai、openai-compat、openrouter 等 AI 集成包;packages/atom下包含 react、solid、vue 响应式绑定;packages/platform下包含 browser、bun、deno、node、node-shared 等平台实现;packages/sql下包含 clickhouse、d1、libsql、mssql、mysql2、pg、pglite、sqlite 系列等数据库驱动。

AGENTS.md 还强调了一条通用原则:编辑前先观察周边代码(Inspect nearby code before editing),即任何改动都应先阅读相邻源码与测试,遵循仓库内部约定——这与 .agents/skills/effect-development/SKILL.md 中"先查阅 LLMS.md 与 ai-docs/src 定位相关 API,再检查周边源码与测试"的工作流一脉相承。

三、验证工作流:按变更类型选择最小化验证

AGENTS.md 的核心是 Validation 小节:它要求开发者始终使用能覆盖本次变更的最窄验证方式,绝不跑全量测试。下表为原文表格的完整呈现:

变更类型验证命令
代码变更(Code changes)pnpm lint-fix、定向pnpm test --run <test_file.ts>pnpm check
仅测试变更(Tests-only changes)pnpm lint-fix、定向pnpm test --run <test_file.ts>pnpm check
类型层 / API 类型变更(Type-level/API type changes)定向pnpm test-types <filename>;若源码类型有变,再加pnpm check
JSDoc 文本 / 分类 / 链接变更pnpm jsdocs --checkpnpm lint
JSDoc 示例变更pnpm jsdocs --checkpnpm lint、根目录pnpm doctest --run <files>
仅文档变更(Docs-only changes)pnpm lint-fix;除非示例或代码有变,否则无需跑测试

3.1 关键命令在仓库中的真实含义

上述命令均可在根 package.json 中找到对应脚本:

  • pnpm lint-fix:执行oxlint --fix && dprint fmt。oxlint 负责静态检查与自动修复,dprint 负责格式化(格式规则见 dprint.json,包含 TypeScript/Markdown/JSON 三个插件,缩进 2 空格、行宽 120)。
  • pnpm test --run <test_file.ts>test脚本为vitest。vitest.config.ts 将测试组织为多项目(project)运行:核心包packages/effect、AI 系列、atom 系列、platform 系列、sql 系列、tools 系列均注册为独立 vitest project,默认匹配test/**/*.test.{ts,tsx}
  • pnpm check:执行tsc -b tsconfig.json,即对整个 TypeScript 工程做构建级类型检查。
  • pnpm test-types <filename>test-types脚本为tstyche --target '>=5.9'。类型测试文件匹配规则见 tstyche.json(packages/*/typetest/**/*.tst.*等),使用baselinetsconfig。
  • pnpm jsdocs --checkjsdocs脚本为effect-jsdocs,配置见 jsdocs.config.json(检查packages/**/src下的源码注释,排除 internal 与 Generated 文件,输出到.data/jsdocs.json)。
  • pnpm doctest --run <files>doctest脚本为vitest --config vitest.docs.ts。vitest.docs.ts 挂载@effect/doctest插件,通过includeSource扫描packages/*/src/**/*.ts中的可执行文档示例,保证 JSDoc 里的示例代码真实可运行。

3.2 为什么禁止裸跑pnpm testpnpm doctest

AGENTS.md 明确警告:永远不要裸跑pnpm testpnpm doctest——两者都会以 watch 模式启动全量测试套件(这正是 vitest 的默认行为)。正确做法是:

  1. 始终传递--run(一次性运行而非监听);
  2. 始终指定覆盖本次变更的具体文件;
  3. 全量套件由 CI 负责运行。

这一约束与 vitest.config.ts 中sequence: { concurrent: true }(测试并发执行)以及数十个 vitest project 的规模相印证:全量测试代价高昂,定向运行是仓库内协作的基本纪律。

3.3 临时验证沙箱:scratchpad

对于临时性的可运行探针(ad hoc runnable probe),AGENTS.md 给出的流程是:

  1. 在 scratchpad 目录创建<name>.ts
  2. 用普通node运行它;
  3. 完成后删除该文件。

从 scratchpad/package.json 可见,该目录预置了全部工作区依赖(effect@effect/ai-*@effect/platform-*@effect/sql-*@effect/opentelemetry等),因此可以零配置地引用任何仓库内包做快速实验,且不会污染正式源码。

此外,AGENTS.md 要求:报告任何无法执行的命令(Report any commands that could not be run),以保证协作透明、避免静默跳过验证。

四、生成文件管理:只改源头,不改产物

AGENTS.md 的 Generated Files 小节确立了"不直接编辑生成输出"的硬性规则:

  1. @barrel标记的index.ts:部分index.ts中标记为@barrel的段是生成代码,禁止手工编辑。正确做法是修改对应的源模块,然后运行pnpm codegen(根脚本会通过pnpm --recursive --parallelpackages/**/*递归执行各包的 codegen,如packages/effecteffect-utils codegen)。
  2. 手工维护的index.ts与未标记段落:不适用该规则,可正常编辑。
  3. LLMS.mdmigration/v3-to-v4.md
    • LLMS.md 由 ai-docs/src 生成(对应根脚本ai-docgeneffect-ai-docgen ai-docs/src -o LLMS.md,另有ai-docgen:watch监听模式);
    • migration/v3-to-v4.md 由 migration/annotations 生成。
  4. 第三方资产:已签入的第三方资产必须通过其生成器或文档化的导入流程更新,不得直接改动。

这条规则的意义在于保持产物与源的一致性:任何对生成文件的直接修改都会在下次 codegen 时被覆盖,造成漂移(drift)。

五、配套的 Agent 技能体系

.agents目录不仅是 AGENTS.md 的所在地,还内置了一套面向 AI Agent 的技能(skill)定义,与本文工作流配合使用:

  • effect-development:Effect API 组合与代码评审指引;
  • test-development 与 jsdocs:测试开发与 JSDoc 规范;
  • migration-guidance:v3 → v4 迁移指南;
  • changesets、ci-maintenance、dependency-maintenance、performance-analysis、bundle-analysis 等。

这些技能与 AGENTS.md 共同构成了 Agent 在本仓库工作的"操作手册",其中反复强调的做法与 AGENTS.md 一致:以仓库文档为定向参考而非全量上下文,先定位相关 API 与测试,再动手修改

六、实战检查清单

综合全文,一次符合规范的仓库变更应遵循以下步骤:

  1. 定位:在 packages/effect/src(或其他包族)找到相关源码,阅读 packages/effect/test 与 packages/effect/typetest 中相邻测试,理解仓库内部约定;
  2. 判断变更类型:对照本文第三节的验证表格,确定本次变更属于代码 / 测试 / 类型 / JSDoc / 纯文档中的哪一类;
  3. 执行最小化验证:运行对应的pnpm lint-fix、定向pnpm test --run <file>pnpm test-types <filename>pnpm jsdocs --checkpnpm doctest --run <files>绝不在本地跑裸pnpm test
  4. 处理生成文件:若涉及@barrel段、LLMS.md或迁移文档,只修改源文件后运行pnpm codegen/pnpm ai-docgen重新生成;
  5. 快速实验:临时逻辑放入 scratchpad,用node验证后删除;
  6. 记录变更:通过 .changeset 添加变更集(版本与发布由 changesets 流程管理,见 .changeset/config.json 的 fixed 包组配置),并报告任何无法执行的命令。

这套流程既是人类贡献者的工程纪律,也是 AI Agent 在本仓库安全产出代码的行为准则——理解它,你就掌握了进入 Effect TypeScript 生态开发的第一把钥匙。

【免费下载链接】effectBuild production-ready applications in TypeScript项目地址: https://gitcode.com/GitHub_Trending/ef/effect

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 14:25:48

二手交易小程序全栈拆解:Spring Boot + 微信小程序毕设实战

简介&#xff1a;微信小程序二手物品交易系统源码与数据库&#xff0c;面向高校毕业设计及Java课程设计场景&#xff0c;为需要完成类似选题的学生提供一套可直接运行学习的完整项目。源码经过本地编译验证&#xff0c;下载后配置JDK、MySQL及微信开发者工具环境即可运行&#…

作者头像 李华
网站建设 2026/9/14 14:25:31

开源摄影后期 darktable 入门:RAW 修图工作流与批量处理技巧

开源摄影后期 darktable 入门&#xff1a;RAW 修图工作流与批量处理技巧 拍 RAW 格式的摄影爱好者绕不开后期&#xff0c;而 darktable 是这个领域最成熟的开源答案&#xff08;GPL-3.0&#xff09;&#xff1a;RAW 解析、非破坏性编辑、镜头校正、降噪调色全内置&#xff0c;被…

作者头像 李华
网站建设 2026/9/14 14:24:55

Zookeeper在微服务中的服务注册与发现实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 14:24:20

基于Python和OpenCV的虹膜识别签到系统设计与实现

简介&#xff1a;这是一份面向高校计算机相关专业学生的毕业设计资源&#xff0c;基于虹膜特征识别实现简易签到系统&#xff0c;适合用作毕业设计、课程设计或项目初期演示。资源包含完整Python源码、项目部署说明和详细代码注释&#xff0c;涵盖虹膜采集、内圆与外圆检测、区…

作者头像 李华
网站建设 2026/9/14 14:23:53

MATLAB红眼消除实战:HSV阈值与形态学处理全解析

简介&#xff1a;面向图像处理初学者与MATLAB开发者&#xff0c;这份资源提供了一套完整可运行的自动去红眼程序&#xff0c;专门解决闪光灯拍摄下人像照片出现红眼的问题。压缩包共4个文件&#xff0c;包含3个M脚本与1张BMP示例图&#xff1a;redeye.m为主程序&#xff0c;rgb…

作者头像 李华