Coze Studio 前端架构解析:React 18 + Rsbuild + Rush 的 AI Agent 开发平台工程化实践
【免费下载链接】coze-studioAn AI agent development platform with all-in-one visual tools, simplifying agent creation, debugging, and deployment like never before. Coze your way to AI Agent creation.项目地址: https://gitcode.com/GitHub_Trending/co/coze-studio
Coze Studio 是一个面向 AI Agent 的一站式开发平台,其前端基于 React 18 与 TypeScript 构建,采用 Rush + PNPM 管理的 Monorepo 架构,并通过 Rsbuild 完成高效构建。本文以 frontend/README.md 为核心,结合仓库内真实源码与配置,系统讲解其技术选型、目录组织、环境搭建、开发调试与生产构建全流程,帮助读者掌握这套大型 AI 应用前端的工程化方案与核心模块设计思路。
项目定位与核心结论
Coze Studio 前端是典型的大型 Monorepo 工程:一个主应用(apps/coze-studio)+ 十个左右功能包(packages/*)+ 一套共享配置体系(config/*)+ 基础设施工具(infra/*)。它支撑的是"Agent 创建、调试、发布"全链路可视化 IDE,覆盖 Agent IDE、工作流画布、知识库、插件市场、发布流程等核心业务。
从仓库实际代码看,几个关键工程决策贯穿始终:
- Rush 统一管理多包依赖与构建顺序,保证 Monorepo 中数百个包(仅
packages/workflow就包含 1600+ TS/TSX 文件)可增量、并行、可复现地构建; - Rsbuild 作为构建内核(底层为 Rspack),承担 dev server 代理、编译、产物分包等职责;
- React 18 + React Router v6 + Zustand构成应用运行时骨架,入口通过
createBrowserRouter定义全站路由。
技术栈总览
根据 frontend/README.md,前端核心技术栈如下:
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 框架 | React 18 + TypeScript | 应用运行时与类型保障,apps/coze-studio中react: ~18.2.0 |
| 构建工具 | Rsbuild(底层 Rspack) | 开发服务器、代理、生产构建,配置见 rsbuild.config.ts |
| 包管理 | Rush + PNPM | Monorepo 依赖管理与工作区协议(workspace:*) |
| 路由 | React Router v6 | createBrowserRouter集中式路由 |
| 状态管理 | Zustand | 轻量全局状态 |
| UI 组件 | @coze-arch/coze-design | 自研设计系统组件库 |
| 国际化 | @coze-arch/i18n | 中英文双语初始化 |
从 package.json 可以看到,所有@coze-*工作区包均以workspace:*版本引用,说明这些包由 Rush 统一安装与链接;而@coze-arch/coze-design与@coze-arch/semi-theme-hand01使用固定版本(0.0.6-alpha.346d77),是少数外部锁定版本。
Monorepo 目录结构详解
README 给出了完整的目录树,与仓库实际结构一致,这里逐层拆解其职责:
frontend/ ├── apps/ # 应用层 │ └── coze-studio/ # 主应用(可独立 dev / build / test) ├── packages/ # 核心功能包 │ ├── agent-ide/ # AI Agent 集成开发环境(1318 文件) │ ├── arch/ # 架构基础设施(1507 文件) │ ├── common/ # 公共组件与工具(1524 文件) │ ├── components/ # UI 组件库(918 文件) │ ├── data/ # 数据层:知识库/记忆等(1220 文件) │ ├── devops/ # DevOps 工具(199 文件) │ ├── foundation/ # 基础能力(289 文件) │ ├── project-ide/ # 项目级开发环境(610 文件) │ ├── studio/ # Studio 核心功能(1018 文件) │ └── workflow/ # 工作流引擎(3582 文件,最大包) ├── config/ # 共享工程配置 │ ├── eslint-config/ # ESLint 规则集 │ ├── rsbuild-config/ # 构建配置基座 │ ├── ts-config/ # TypeScript 配置 │ ├── postcss-config/ # PostCSS 配置 │ ├── stylelint-config/ # 样式规范 │ ├── tailwind-config/ # Tailwind 主题与插件 │ └── vitest-config/ # 测试配置基座 └── infra/ # 基础设施 ├── idl/ # 接口定义语言(thrift/proto)工具 ├── plugins/ # 构建插件 └── utils/ # 工具库这种"应用层 - 功能包 - 配置 - 基础设施"四层结构,让团队可以独立演进各业务域(如工作流引擎单独一个包,含 1606 个 TS 文件),同时通过共享配置保证跨包的一致性。
快速开始:环境要求与依赖安装
环境前置条件
README 明确要求的版本(以仓库实际为准):
- Node.js >= 21(注意:生产 Dockerfile 使用
node:22-alpine,见 frontend/Dockerfile,本地开发与 CI 构建均满足 ≥21 即可) - PNPM 8.15.8
- Rush 5.147.1(Dockerfile 中通过
npm install -g @microsoft/rush安装)
安装依赖
在仓库根目录执行:
rush install # 依据 lockfile 精确安装 rush update # 更新依赖并重写 lockfilerush install依赖仓库根部的 rush.json 描述项目清单,而 Rush 的公共锁文件位于 common/config/rush 下。Dockerfile 中的安装步骤(先复制rush.json、common/、scripts/,再执行rush install)也印证了 Rush 对这几个目录的强依赖。
启动开发服务器
cd frontend/apps/coze-studio npm run dev # 等价写法:rushx devdev脚本的实际内容(见 package.json)是:
"dev": "IS_OPEN_SOURCE=true CUSTOM_VERSION=release rsbuild dev"即通过环境变量IS_OPEN_SOURCE=true与CUSTOM_VERSION=release切换开源构建模式后交给 Rsbuild。
开发代理的关键细节: rsbuild.config.ts 将/api与/v1两个前缀的请求代理到后端:
const API_PROXY_TARGET = `http://localhost:${process.env.WEB_SERVER_PORT || 8888}/`; server: { strictPort: true, proxy: [ { context: ['/api'], target: API_PROXY_TARGET, secure: false, changeOrigin: true }, { context: ['/v1'], target: API_PROXY_TARGET, secure: false, changeOrigin: true }, ], },这意味着本地调试时后端服务默认监听 8888 端口,可用环境变量WEB_SERVER_PORT覆盖;前端请求/api/*、/v1/*会被透明转发,前端代码中无需写死后端地址。
生产构建
cd frontend/apps/coze-studio npm run build # 或 rushx build构建脚本为IS_OPEN_SOURCE=true rsbuild build,产物输出到dist/。chunk 分包策略值得注意(rsbuild.config.ts):
performance: { chunkSplit: { strategy: 'split-by-size', minSize: 3_000_000, maxSize: 6_000_000 }, },即以 3MB~6MB 的粒度按体积切分 chunk,兼顾首屏加载与缓存利用率——这是针对大型 IDE 类应用(依赖众多、单包体积大)的典型优化。
主应用入口与运行时架构
入口初始化链路
src/index.tsx 是应用真正的入口,启动顺序清晰:
- 拉取特性开关:
pullFeatureFlags初始化功能开关(4 秒超时兜底); - 初始化国际化:从
localStorage读取i18next,未设置时按IS_OVERSEA决定en或zh-CN(src/index.tsx); - 动态加载 mdbox 样式(
dynamicImportMdBoxStyle); - React 18 挂载:
createRoot($root).render(<App />)。
应用骨架与路由
src/app.tsx 以Suspense包裹RouterProvider,加载态使用coze-design的Spin组件,配合react-error-boundary处理渲染错误。
全站路由集中在 src/routes/index.tsx,采用createBrowserRouter,并通过loader 元数据驱动布局行为,例如:
hasSider:是否显示侧边栏;requireAuth:是否需要登录鉴权;subMenu/menuKey:侧边栏菜单与高亮项。
路由覆盖的主要业务域(与 README 的 Core Modules 一一对应):
| 路由路径 | 业务模块 | 对应包 |
|---|---|---|
/space/:space_id/develop | 项目开发 | @coze-project-ide/main |
/space/:space_id/bot/:bot_id | Agent IDE 与发布 | @coze-agent-ide/* |
/space/:space_id/project-ide/:project_id | 项目级 IDE | @coze-project-ide/main |
/space/:space_id/library、knowledge、database | 资源库/知识库/数据库 | @coze-studio/*、@coze-foundation/* |
/space/:space_id/plugin/:plugin_id | 插件与工具配置 | @coze-studio/bot-plugin-store |
/work_flow | 工作流 | @coze-workflow/* |
/explore/plugin、/explore/template | 插件/模板市场 | @coze-community/explore |
/sign、/oauth/confirm | 登录与 OAuth 授权 | @coze-foundation/* |
值得注意:所有页面组件通过./async-components异步加载,配合Suspense实现路由级代码分割,避免首屏一次性加载整个 IDE 体积。
布局与初始化
src/layout.tsx 仅做两件事:调用useAppInit()完成全局初始化,再渲染GlobalLayout(来自@coze-foundation/global-adapter)。应用外壳(登录态、空间切换、侧边栏)由 foundation 包统一提供,业务包只关心自身页面,这是 Monorepo 下"基础能力下沉"的典型实践。
核心模块:Agent IDE、arch 层与工作流引擎
Agent IDE(agent-ide)
AI Agent 的集成开发环境,包含:
- prompt:提示词编辑器;
- tool:工具配置管理(仓库中
pages/plugin/tool/目录即工具配置页面,支持 plugin-mock-set 的模拟参数设置); - workflow:工作流集成。
架构层(arch)
提供跨业务复用的架构能力:
- bot-api:接口层封装;
- bot-hooks:React Hooks 库;
- foundation-sdk:基础 SDK;
- i18n:国际化支持(入口处
initI18nInstance即来源于此); - bot-flags:特性开关(入口处
pullFeatureFlags来源于此); - web-context:Web 上下文工具(路由 loader 中的
BaseEnum常量即来自此包)。
工作流引擎(workflow)
packages/workflow是体量最大的包,包含:
- fabric-canvas:画布渲染引擎;
- nodes:节点组件库;
- sdk:工作流 SDK;
- playground:调试运行环境。
从包体积(3582 个文件,其中 1377 个 tsx)可以推断,工作流编排是 Coze Studio 最核心也最复杂的可视化能力,与后端 domain/workflow 的 250+ 内部文件形成前后端呼应。
数据层(data)
覆盖知识库(knowledge)、记忆系统(memory)、通用数据处理(common),为 Agent 提供上下文与长期记忆能力,对应后端 backend/application/knowledge 与 backend/application/memory 的服务域。
构建与配置体系详解
Rsbuild 配置的三层协作
主应用 rsbuild.config.ts 并非从零编写,而是调用defineConfig来自@coze-arch/rsbuild-config(frontend/config/rsbuild-config),实现"共享基座 + 应用覆盖"的配置模式。
关键配置点:
- HTML 模板:标题为"扣子 Studio",模板为 index.html,favicon 使用
assets/favicon.png; - PostCSS:注入
tailwindcss(配置见 tailwind.config.ts); - Rspack 规则:通过
addRules接入@coze-arch/import-watch-loader(CSS/LESS/JSX/TSX 源码热更新监听),并设置watchOptions.poll以适配部分文件系统; - 编译范围:
source.include显式包含../../packages与infra/flags-devtool,并特别纳入marked、@dagrejs、@tanstack等含 ES2022 私有方法语法的第三方包; - 装饰器支持:
decorators.version: 'legacy',兼容 inversify 的@injectable()/@inject装饰器(服务化注入在 arch 层被广泛使用); - 路径别名:
@coze-arch/foundation-sdk统一解析到@coze-foundation/foundation-sdk,避免双 SDK 实例。
环境变量注入
source.define段在编译期注入运行时常量(rsbuild.config.ts):
'process.env.IS_REACT18': JSON.stringify(true), 'process.env.ARCOSITE_SDK_REGION': JSON.stringify(GLOBAL_ENVS.IS_OVERSEA ? 'VA' : 'CN'), 'process.env.ARCOSITE_SDK_SCOPE': JSON.stringify(GLOBAL_ENVS.IS_RELEASE_VERSION ? 'PUBLIC' : 'INSIDE'), 'process.env.TARO_ENV': JSON.stringify('h5'),其中GLOBAL_ENVS来自@coze-arch/bot-env,用于区分海外版(VA 区域)与国内版(CN 区域)等运行形态。
质量保障:Lint、类型与测试
README 的 Development Standards 强调:ESLint + Prettier 格式化、TypeScript strict 模式、单元测试覆盖要求。
仓库中对应的落点:
- Lint:主应用脚本
lint: eslint ./ --cache --quiet,规则集由@coze-arch/eslint-config(frontend/config/eslint-config)统一提供; - TypeScript:
@coze-arch/ts-config(frontend/config/ts-config)承载 strict 配置,各包引用共享; - 测试:主应用 vitest.config.ts 仅两行——调用
@coze-arch/vitest-config的defineConfig并指定preset: 'web';脚本test: vitest --run --passWithNoTests,test:cov追加--coverage(v8 覆盖率); - 样式规范:
@coze-arch/stylelint-config与@coze-arch/postcss-config分别治理样式与 CSS 编译。
这种"规则集中在 config 目录、各包零配置接入"的方式,是大型 Monorepo 保持工程质量一致性的关键。
容器化部署与生产环境
frontend/Dockerfile 展示了完整的两阶段构建:
- 构建阶段(
node:22-alpine):安装@microsoft/rush→ 复制rush.json、frontend/、common/、scripts/→ 执行rush install→rush build --to @coze-studio/app(--to只构建目标应用及其依赖,体现 Rush 增量构建能力); - 运行阶段(
nginx:1.25-alpine):将dist/拷贝到 nginx 静态目录,EXPOSE 8888对外提供服务。
同时 Dockerfile 内置了面向国内环境的加速配置(阿里云 apk 镜像、registry.npmmirror.comnpm 镜像),并做dos2unix换行转换,保证 shell 脚本在容器内可执行。
结合开发代理默认的 8888 端口可以看出:整个平台的统一对外端口是 8888(后端默认监听该端口,前端 nginx 也暴露该端口),前后端通过同一端口 + 路径前缀(/api、/v1)区分流量。
常见问题与调试技巧
- 开发时后端端口不同:通过环境变量
WEB_SERVER_PORT=<port>启动rsbuild dev,代理目标会随之变化; - 本地无后端如何预览:
npm run preview可直接预览dist/产物(rsbuild preview); - 只构建主应用:使用
rush build --to @coze-studio/app,Rush 会只编译该应用及其依赖链,节省大量时间; - 测试不需要每个包都配 vitest:直接复用
@coze-arch/vitest-config,传入preset: 'web'即可获得一致的测试环境; - 国际化语言切换:清除
localStorage中i18next字段可回到按IS_OVERSEA自动判断的语言,也可手动设en/zh-CN。
总结
Coze Studio 前端是"React 18 运行时 + Rsbuild 构建 + Rush 治理 + 分层配置体系"的组合典范:README 描绘的目录骨架在实际代码中均有完整落地——主应用承担路由与装配,十个功能包按业务域自治,共享配置保证数百个包的工程质量统一。对希望搭建大型 AI 应用前端的团队而言,其 Monorepo 组织方式、基于 loader 的路由权限设计、以及"共享配置基座 + 应用覆盖"的构建模式,都是可以直接借鉴的工程范式。
Apache License 2.0 的开源协议(见仓库根目录 LICENSE-APACHE)也意味着这套架构可以放心地在合规前提下学习与复用。
【免费下载链接】coze-studioAn AI agent development platform with all-in-one visual tools, simplifying agent creation, debugging, and deployment like never before. Coze your way to AI Agent creation.项目地址: https://gitcode.com/GitHub_Trending/co/coze-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考