Vue 3 集成
本指南涵盖了将 @esmx/router 与 Vue 3 集成所需的全部内容。阅读完毕后,你将拥有一个带有路由和服务端渲染(SSR)的完整 Vue 3 应用。
安装
安装核心路由包和 Vue 集成包:
@esmx/router 是框架无关的路由核心。@esmx/router-vue 提供 Vue 专属绑定 —— 插件、组合式函数和组件。
核心概念
Vue 3 集成依赖三个部分:
- RouterPlugin — 将
RouterView和RouterLink注册为全局组件 - useProvideRouter() — 通过
provide/inject将路由实例提供给组件树 - useRouter() / useRoute() — 用于访问路由实例和当前路由的组合式 API
分步设置
1. 定义路由
创建路由定义的单一数据源:
src/routes.ts
2. 创建应用工厂
客户端和服务端入口共用的工厂函数:
src/create-app.ts
关键点:
useProvideRouter(router)必须在根组件的setup()中调用。它通过useRouter()和useRoute()将路由实例提供给所有后代组件。RouterPlugin将RouterView和RouterLink注册为全局组件,并在globalProperties上设置$router和$route。- SSR 使用
createSSRApp,仅客户端使用createApp。
3. 客户端入口
客户端入口以 history 模式创建路由并挂载应用:
src/entry.client.ts
RouterMode.history 使用浏览器的 History API(pushState、popstate)实现简洁的 URL。
4. 服务端入口(SSR)
服务端入口以 memory 模式创建路由并渲染 HTML:
src/entry.server.ts
RouterMode.memory 将路由状态保存在内存中 —— 不调用浏览器 API,非常适合 Node.js 环境。
5. Node 入口
Node 入口配置开发服务器和构建工具:
src/entry.node.ts
@esmx/rspack-vue 中的 createRspackVue3App 配置了 Rspack,支持 Vue 3 SFC、HMR 和 SSR 打包。
在组件中使用路由
RouterView 和 RouterLink
RouterView 渲染当前路由匹配的组件。RouterLink 创建带有激活状态管理的导航链接:
src/App.vue
当当前路由匹配链接的 to 路径时,RouterLink 会自动应用 router-link-active 类名。通过 activeClass 属性自定义:
useRouter 和 useRoute
在 <script setup> 中访问路由实例和当前路由:
src/pages/UserProfile.vue
导航方法
路由提供多种导航方法:
访问路由信息
route 对象提供当前路由的完整信息:
项目文件结构
典型的 Vue 3 + SSR 项目结构(使用 @esmx/router):