Coze Studio 前端架构解析:React 18 + Rsbuild + Rush 的 AI Agent 开发平台工程化实践
2026/9/13 15:18:17 网站建设 项目流程

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-studioreact: ~18.2.0
构建工具Rsbuild(底层 Rspack)开发服务器、代理、生产构建,配置见 rsbuild.config.ts
包管理Rush + PNPMMonorepo 依赖管理与工作区协议(workspace:*
路由React Router v6createBrowserRouter集中式路由
状态管理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 # 更新依赖并重写 lockfile

rush install依赖仓库根部的 rush.json 描述项目清单,而 Rush 的公共锁文件位于 common/config/rush 下。Dockerfile 中的安装步骤(先复制rush.jsoncommon/scripts/,再执行rush install)也印证了 Rush 对这几个目录的强依赖。

启动开发服务器

cd frontend/apps/coze-studio npm run dev # 等价写法:rushx dev

dev脚本的实际内容(见 package.json)是:

"dev": "IS_OPEN_SOURCE=true CUSTOM_VERSION=release rsbuild dev"

即通过环境变量IS_OPEN_SOURCE=trueCUSTOM_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 是应用真正的入口,启动顺序清晰:

  1. 拉取特性开关pullFeatureFlags初始化功能开关(4 秒超时兜底);
  2. 初始化国际化:从localStorage读取i18next,未设置时按IS_OVERSEA决定enzh-CN(src/index.tsx);
  3. 动态加载 mdbox 样式dynamicImportMdBoxStyle);
  4. React 18 挂载createRoot($root).render(<App />)

应用骨架与路由

src/app.tsx 以Suspense包裹RouterProvider,加载态使用coze-designSpin组件,配合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_idAgent IDE 与发布@coze-agent-ide/*
/space/:space_id/project-ide/:project_id项目级 IDE@coze-project-ide/main
/space/:space_id/libraryknowledgedatabase资源库/知识库/数据库@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),实现"共享基座 + 应用覆盖"的配置模式。

关键配置点:

  1. HTML 模板:标题为"扣子 Studio",模板为 index.html,favicon 使用assets/favicon.png
  2. PostCSS:注入tailwindcss(配置见 tailwind.config.ts);
  3. Rspack 规则:通过addRules接入@coze-arch/import-watch-loader(CSS/LESS/JSX/TSX 源码热更新监听),并设置watchOptions.poll以适配部分文件系统;
  4. 编译范围source.include显式包含../../packagesinfra/flags-devtool,并特别纳入marked@dagrejs@tanstack等含 ES2022 私有方法语法的第三方包;
  5. 装饰器支持decorators.version: 'legacy',兼容 inversify 的@injectable()/@inject装饰器(服务化注入在 arch 层被广泛使用);
  6. 路径别名@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-configdefineConfig并指定preset: 'web';脚本test: vitest --run --passWithNoTeststest:cov追加--coverage(v8 覆盖率);
  • 样式规范@coze-arch/stylelint-config@coze-arch/postcss-config分别治理样式与 CSS 编译。

这种"规则集中在 config 目录、各包零配置接入"的方式,是大型 Monorepo 保持工程质量一致性的关键。

容器化部署与生产环境

frontend/Dockerfile 展示了完整的两阶段构建:

  1. 构建阶段node:22-alpine):安装@microsoft/rush→ 复制rush.jsonfrontend/common/scripts/→ 执行rush installrush build --to @coze-studio/app--to只构建目标应用及其依赖,体现 Rush 增量构建能力);
  2. 运行阶段nginx:1.25-alpine):将dist/拷贝到 nginx 静态目录,EXPOSE 8888对外提供服务。

同时 Dockerfile 内置了面向国内环境的加速配置(阿里云 apk 镜像、registry.npmmirror.comnpm 镜像),并做dos2unix换行转换,保证 shell 脚本在容器内可执行。

结合开发代理默认的 8888 端口可以看出:整个平台的统一对外端口是 8888(后端默认监听该端口,前端 nginx 也暴露该端口),前后端通过同一端口 + 路径前缀(/api/v1)区分流量。

常见问题与调试技巧

  1. 开发时后端端口不同:通过环境变量WEB_SERVER_PORT=<port>启动rsbuild dev,代理目标会随之变化;
  2. 本地无后端如何预览npm run preview可直接预览dist/产物(rsbuild preview);
  3. 只构建主应用:使用rush build --to @coze-studio/app,Rush 会只编译该应用及其依赖链,节省大量时间;
  4. 测试不需要每个包都配 vitest:直接复用@coze-arch/vitest-config,传入preset: 'web'即可获得一致的测试环境;
  5. 国际化语言切换:清除localStoragei18next字段可回到按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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询