Skip to content

二次开发总览

交付包是一套完整的 TypeScript monorepo,不是只能换 Logo 的页面主题。你可以修改前后端、数据模型、权限、任务和部署方式,也可以把它扩展成面向特定行业的社区产品。

选择你的开发方式

方式适合谁从哪里开始
人工二次开发熟悉 TypeScript、React、Node.js、PostgreSQL 和 Docker 的开发者或团队继续阅读本页,先建立私有 Git 仓库,再按 contract → API → Web → Mock → 文档的顺序修改
AI 协作二次开发希望让 Codex、Claude Code 等代码 Agent 负责分析、实现、测试或部署的人阅读 AI 二次开发指南,让 AI 先遵守仓库根目录 AGENTS.md

两种方式使用同一套代码边界和验收标准。AI 可以减少查找与机械修改的工作,但不能跳过权限、迁移、数据安全、Mock 对齐和回滚检查。

第一次修改建议

先在完整 Mock 中修改站点名称、首页文案或一个不涉及数据库的展示组件,跑通“建立分支 → 修改 → 测试 → 浏览器走查 → 合并”的完整过程,再开始支付、权限或数据模型改造。

先建立自己的 Git 仓库

压缩包不包含 .git。解压并完成首次验证后,建议立即建立私有仓库:

bash
git init
git add .
git commit -m "chore: import community template"
git tag template-import-v1

不要把 .env.secrets/、数据库备份、上传文件或私钥加入 Git。允许员工或外部开发者参与时,应只授予必要权限并明确保密义务。

代码结构

目录作用
apps/space社区 Web、路由、页面和用户交互
apps/auth登录、注册、账户和 SSO 前端
apps/template-docs产品、部署和扩展文档站
services/authSession、OAuth 2.0、OIDC 和账户服务
services/space-api社区业务 API、数据库迁移与 Provider 接入
services/community-template-worker通用定时任务与维护任务
packages/space-contract前后端共享的数据结构和校验规则
packages/template-core模块开关、Provider 和路由能力模型
packages/brand品牌叙事生成与共享品牌文案
config/community-template.json唯一的站点身份、模块与 Provider 配置入口

修改现有功能

  1. 先修改共享 contract,再修改 API 与页面,避免前后端各自定义字段。
  2. 数据结构变化必须新增迁移,不要回写已经发布的迁移文件。
  3. 权限判断必须同时覆盖页面入口和 API;隐藏导航不等于关闭接口。
  4. 为正常、无权限、空数据和失败状态增加测试。
  5. 运行 pnpm typecheck && pnpm test && pnpm build

人工开发的标准流程

  1. 从干净的产品分支创建功能分支,写清楚目标、用户角色、数据变化和回滚方式。
  2. pnpm dev:community-templatefull Mock 场景复现当前行为。
  3. 先更新共享 contract、配置 schema 或迁移,再修改 API、Web、后台和 Mock。
  4. 至少覆盖正常、无权限、功能关闭、空数据和失败五类状态。
  5. 使用桌面与 390px 移动视口检查导航、表格、图片、弹窗和错误提示。
  6. 合并前运行相关包测试、完整类型检查、生产构建和 pnpm ops:template:preflight

只修改前端显示而不检查真实接口,会留下可以直接调用的越权入口;只修改真实 API 而不更新 Mock,会让本地演示和交付文档逐渐失真。

增加一个新模块

新增模块通常需要同步处理:

  • packages/template-core 增加模块键、路由和配置校验。
  • packages/space-contract 增加请求、响应与权限结构。
  • services/space-api 增加迁移、service、routes 和错误映射。
  • apps/space 增加页面、导航、空状态和管理入口。
  • 在 Worker 中增加任务时,必须提供幂等键、dry-run 和失败重试边界。
  • 在 Mock 中增加可重置的虚构数据与至少一条完整交互路径。
  • 在文档中说明开关、Provider、环境变量、备份和回滚影响。

品牌与身份

站点名称从 config/community-template.json 读取,并用于主站、Auth UI、邮件和支付标题。生产域名、包名、SMTP 发件人和对象存储地址只能由部署者在 .env 中配置。

修改品牌后执行:

bash
pnpm --filter @zaowu/template-core validate:config -- config/community-template.json
pnpm typecheck

接收后续版本

每个发行压缩包都是不可变快照。推荐保留三个 Git 引用:

  • template-import-v1:首次收到的原始版本。
  • template-import-v2:新版本解压后形成的临时导入分支。
  • 你的产品分支:保存自己的功能和品牌修改。

升级时先在独立分支导入新版本,查看 git diff template-import-v1..template-import-v2,再把变更合并到产品分支。先处理迁移和配置差异,再处理业务代码;验证通过后才切换生产版本。不要通过覆盖 .env 或重建持久卷解决冲突。

如果使用 AI 协助升级,把旧模板标签、新模板标签、产品分支和允许修改的范围同时提供给 AI;不要只说“同步最新版”。AI 应先输出冲突清单和迁移风险,获得确认后再合并有歧义的业务改动。

许可边界

源码修改、委托开发、客户部署和衍生产品的许可范围以根目录 LICENSE 为准。生产域名、Logo、账号、数据和 Secret 不属于源码许可内容。