Repository navigation
Frontend Introduction
worable edited this page Oct 20, 2026
·
2 revisions
前端包是 StackPanel 主题和插件共享的前端能力系统。它允许主题和插件携带编译后的 React 模板组件,由平台渲染。
第一次开发?先读《快速上手》,照着做一个最小插件前端跑通,再回来查字段。
前端包的失败大多是静默的——页面不报错,只显示「未找到插件管理页面」之类。以下三点是所有坑的根源:
-
必须
export default frontend。 运行时的注册表从入口模块的default导出解析前端包(frontend-registry.ts的packageOf取mod.default ?? mod)。只写export const frontend而没有 default,该插件的全部页面与路由都会变成 not-found,且不报错。(构建期的元数据探测会额外接受frontend命名导出,但运行时只认 default。) -
交互式管理后台页面必须放在
src/admin.tsx,不要在src/index.tsx里写ui.adminPages。 服务端入口index.tsx打包出的ui.adminPages不会被任何渲染方读取。管理后台页面是客户端组件,由src/admin.tsx编译成dist/admin.js后注册给客户端渲染。详见管理后台扩展。 -
frontend/manifest.json是编译产物,不要手改。 每次pnpm build:frontend都会根据源码重新生成它(含revision、files等)。手写的字段会被覆盖。要改声明就改src/index.tsx里的ui/pages等,再重新编译。
一个前端包是一组编译后的 JS 组件 + 一份清单(manifest.json),声明了:
- 页面(pages)— 用户可访问的页面路由
- Layout(layouts)— 可复用的页面布局包装器
- Finder(finders)— 类型化数据源
- 管理后台路由(adminRoutes)— 插件的管理后台子页面
- 管理操作(adminActions)— 插件的快捷操作组件
- 声明式操作(actions)— 表单式提交操作,平台统一处理鉴权和审计
- 账户路由(accountRoutes)— 用户账户页面
- 账户 Widget(accountWidgets)— 用户账户页面的 Widget
- 设置 Schema(settingsSchema)— 自动生成 admin 设置表单
页面渲染优先级:主题 > 插件 > 内置。
请求 /blog/hello-world
→ 主题 frontend 声明了 /blog/:slug? → 使用主题模板
→ 否则,插件 frontend 声明了 /blog/:slug? → 使用插件模板
→ 否则,使用内置模板
一个插件的前端包有两个源码入口,对应两种渲染模式:
| 入口 | 编译产物 | 渲染位置 | 提供的能力 |
|---|---|---|---|
frontend/src/index.tsx |
dist/index.js |
服务端(SSR) |
pages、layouts、finders、settingsSchema、ui.adminRoutes/ui.accountRoutes/ui.actions 等声明,以及服务端渲染组件 pageComponents、ui.accountPages、ui.adminWidgets、ui.adminActionComponents、ui.accountWidgetComponents、主题 overrides
|
frontend/src/admin.tsx |
dist/admin.js |
客户端('use client') |
交互式管理后台页面 adminPages
|
要点:
-
index.tsx里的ui.adminRoutes只声明路由元数据(path、component 名、permission、data 绑定);真正的组件在admin.tsx的adminPages里,两者的component名必须对上。 - 只有存在
src/admin.tsx时才会产出dist/admin.js并注册到客户端渲染表。没有交互需求(纯静态展示)时,可以不给admin.tsx,但该插件就不能有管理后台页面。 - 两个入口都可以导入
@stackpanel/ui、lucide-react、zod(由平台外置提供)。
前端包位于主题或插件包的 frontend/ 目录:
frontend/
├── manifest.json # 前端清单(编译产物,勿手改)
├── src/
│ ├── index.tsx # 服务端入口(pages / finders / 路由声明)
│ └── admin.tsx # 客户端管理后台入口(可选,交互式 admin 页)
└── dist/
├── index.js # 编译后的组件(必须)
└── admin.js # 客户端管理后台组件(可选,来自 src/admin.tsx)
src/admin.tsx是管理后台交互页面的专属入口,会被编译为dist/admin.js并注册到客户端渲染表。详见管理后台扩展。
| 规则 | 限制 |
|---|---|
| manifest 路径 | frontend/manifest.json |
| dist 路径 | frontend/dist/ |
| 允许的文件 |
manifest.json + dist/*.js + dist/*.map
|
| 禁止的文件 |
.ts/.tsx/.jsx 等源码 |
| 单文件最大 | 1 MB |
| 入口文件最大 | 512 KB |
前端包源码使用 TypeScript + React 编写,通过 scripts/build-frontend.mjs 编译。esbuild 以 src/index.tsx(必选)和 src/admin.tsx(可选)为入口分别打包,产物为 dist/index.js / dist/admin.js(各带 .map),而不是每个组件一个模块。
pnpm build:frontend # 编译所有主题和插件的前端包| 包类型 | 可携带前端包 | 前端包能力 |
|---|---|---|
| 主题 | ✅ | pages, layouts, finders, settingsSchema, overrides(主题专有) |
| 插件 | ✅ | pages, layouts, finders, settingsSchema, adminRoutes, adminActions, accountRoutes, accountWidgets, actions |
开始
- 核心开发
构建内核扩展
- 插件
- 主题与前端包
AI 与自动化
- 内核 Agent
- MCP
对接平台
- Open Platform API
- Partner API