初始化宿主
宿主初始化的目标,是把 Vue 应用、状态管理、国际化、路由和插件运行时连接起来。
这一页先使用最小配置启动宿主。登录、权限和请求会在后续章节逐步加入。
最小入口
src/main.ts:
ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { bootstrapPlugins, createHostI18n, createHostRouter } from 'vue-bag-admin'
import App from './App.vue'
import { appRoutes } from './routes'
import 'vue-bag-admin/style.css'
import './style.css'
async function setupApp() {
const app = createApp(App)
const pinia = createPinia()
const i18n = createHostI18n()
const router = createHostRouter({
routes: appRoutes,
auth: false
})
app.use(pinia)
app.use(i18n)
await bootstrapPlugins({
app,
router,
i18n,
plugins: []
})
await router.isReady()
app.mount('#app')
}
setupApp()src/App.vue:
vue
<template>
<HostApp />
</template>
<script setup lang="ts">
import { HostApp } from 'vue-bag-admin'
</script>src/routes.ts:
ts
import type { AdminRouteRecordRaw } from 'vue-bag-admin'
export const appRoutes: AdminRouteRecordRaw[] = [
{
path: '/',
redirect: '/dashboard'
},
{
path: '/dashboard',
name: 'Dashboard',
component: () => import('./views/Dashboard.vue'),
meta: {
title: 'Dashboard',
layout: 'default',
public: true
}
},
{
path: '/404',
name: 'NotFound',
component: () => import('./views/NotFound.vue'),
meta: {
layout: 'default',
public: true
}
},
{
path: '/:pathMatch(.*)*',
redirect: '/404'
}
]现在访问 /dashboard,就能看到带默认布局的宿主页面。
初始化顺序
入口代码看起来不多,但顺序很重要。
1. 创建基础实例
ts
const app = createApp(App)
const pinia = createPinia()
const i18n = createHostI18n()
const router = createHostRouter({ routes: appRoutes, auth: false })createHostI18n()提供宿主内置词条和插件语言包合并能力。createHostRouter()创建路由,并根据auth决定是否启用登录与权限守卫。auth: false只适合无登录系统或宿主接入初期。
2. 先安装 Pinia 和 i18n
ts
app.use(pinia)
app.use(i18n)后面的插件引导、用户状态和菜单状态会读取 Pinia,因此不要把它放到 bootstrapPlugins() 后面。
3. 引导插件
ts
await bootstrapPlugins({
app,
router,
i18n,
plugins: []
})bootstrapPlugins() 会:
- 初始化宿主 UI。
- 过滤并排序插件。
- 检查插件、路由和菜单冲突。
- 注册插件路由。
- 合并插件菜单和语言包。
- 执行插件
install。 - 把 Router 安装到 Vue 应用。
因此,不需要再单独调用 app.use(router)。
4. 等待路由后再挂载
ts
await router.isReady()
app.mount('#app')插件路由是异步引导阶段注册的。等待 Router 准备完成,可以避免首屏路由尚未注册就开始渲染。
样式顺序
框架样式必须先于项目样式:
ts
import 'vue-bag-admin/style.css'
import './style.css'这样项目可以覆盖框架变量和局部样式。顺序写反时,常见表现是主题色、自定义布局或 Tailwind 样式没有生效。
加载本地插件
准备好业务插件后,只需要把它传入 plugins:
ts
import workspacePlugin from './plugins/workspace'
await bootstrapPlugins({
app,
router,
i18n,
plugins: [workspacePlugin]
})插件数组的书写顺序不是最终注册顺序。运行时会优先根据每个插件的 order 排序。
从最小宿主升级
一个真实后台通常还需要:
setAuthProvider():接入真实登录系统。registerPermissionDirective():注册v-permission。setupHttp():注入接口地址、token 和错误处理。bootstrapPlugins({ plugins }):加载业务插件。
不要一次把所有能力都塞进入口。建议先确保宿主与路由正常,再依次接认证、插件和请求。
下一步
继续阅读 路由与菜单,先建立“页面能访问”和“页面出现在导航中”之间的关系。
