src/web/main.tsx 通常长这样:createRoot(document.getElementById("root")!).render(
<StrictMode>
<I18nProvider messages={messages} defaultLocale={defaultLocale}>
<RootLayout>
<RouterProvider router={routeOption} />
</RootLayout>
</I18nProvider>
</StrictMode>,
);defineRouteOption@buildingai/web-core 提供的:export const routeOption = defineRouteOption({
base: `extension/${packageJson.name}`,
identifier: packageJson.name,
routes: [
{ index: true, element: <BlogIndexPage /> },
{ path: "article/:id", element: <ArticleDetailPage /> },
],
consoleMenus: [
{ title: "文章管理", path: "/", icon: "file-text" },
],
consoleRoutes: [
{ index: true, element: <ArticleListPage /> },
{ path: "article/add", element: <ArticleAddPage /> },
],
});createPluginHttpClients()apiHttpClient,因为插件接口会多一层扩展标识符。import { createPluginHttpClients } from "@buildingai/services";
const { apiHttpClient, consoleHttpClient } = createPluginHttpClients();/{extensionIdentifier}/api/*/{extensionIdentifier}/consoleapi/*apiHttpClient.get("/article/published");
consoleHttpClient.get("/article");src/web/services/
├── base.ts
├── console/
├── web/
└── types/console/*web/*types/*export default defineExtensionViteConfig(packageJson, {
server: {
open: true,
},
});base: /extension/{packageJson.name}.output/publicexport default defineBuildingAITsupConfig();src/api/index.ts 构建成可被主系统动态加载的后端入口。