Vite-Plugin-Pages与Keep-Alive
vite-plugin-pages是一个Vite插件,用于在Vite中使用基于文件的路由。(Vue3+ Vite项目)
安装
| 1 | npm install -D vite-plugin-pages | 
配置
| 1 | //vite.config.js | 
使用
默认在src/pages文件夹下的vue/js文件夹下的文件都会被视为页面,页面的文件名与文件夹名相同,例如:
| 1 | src/pages/index.vue | 
会生成一个路由,如下:
| 1 | / | 
也可以在vite.config.js中配置路由文件夹,例如:
| 1 | //vite.config.js | 
也可以配置多个:
| 1 | // vite.config.js | 
- extensions配置识别的文件后缀:- 1 
 2
 3
 4
 5
 6
 7
 8- // vite.config.js 
 export default {
 plugins: [
 Pages({
 extensions: ['vue', 'ts', 'js'],
 }),
 ],
 }
- exclude排除某些文件:- 1 
 2
 3
 4
 5
 6
 7
 8- // vite.config.js 
 export default {
 plugins: [
 Pages({
 exclude: ['**/components/*.vue'],
 }),
 ],
 }
- importMode设置导入形式:
 类型:- 'sync' | 'async' | (filepath: string, pluginOptions: ResolvedOptions) => 'sync' | 'async')
 可以用这个方式更细致地控制路由的加载方式,如果返回- 'sync',则使用同步加载,如果返回- 'async',则使用异步加载。也可以配置一个方法,这个方法的参数为文件路径,返回值为- 'sync'或- 'async'。
| 1 | // vite.config.js | 
- routeBlockLang,设置页面的- <route>块的语言模式,可选值- json5- yaml(默认)
- routeStyle,路由形式,- next(默认),- remix,- nuxt
- resolver
 类型: ‘vue’ | ‘react’ | ‘solid’ | PageResolver
 默认: ‘auto detect’
- extendRoute
 扩展路由的方法,可以在这里为路由添加额外的属性,例如- route.meta
 类型:- (route: any, parent: any | undefined) => any | void,可以配合路由守卫完成路由权限验证工作
| 1 | // vite.config.js | 
- onRoutesGenerated
 类型:- (routes: any[]) => Awaitable<any[] | void>
 在生成的路由之后修改路由信息
- SFC custom block for Route Data单文件组件中的- <route>块:
 可以在vue文件中指定route信息,例如meta
 json/json5:- 1 
 2
 3
 4
 5
 6
 7
 8- <route> 
 {
 name: "name-override",
 meta: {
 requiresAuth: false
 }
 }
 </route>- yaml: - 1 
 2
 3
 4
 5- <route lang="yaml"> 
 name: name-override
 meta:
 requiresAuth: true
 </route>
路由对应
- 捕获所有 - src/pages/[...all].vue->- /*- (/non-existent-page)
- index: - src/pages/index.vue->- /- src/pages/user/index.vue->- /user
- 动态路由 - src/pages/user/[id].vue->- /user/:id
- 嵌套路由 - 1 
 2
 3
 4
 5- src/pages/ 
 ├── users/
 │ ├── [id].vue
 │ └── index.vue
 └── users.vue- 生成路由如下: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- [ 
 {
 "path": "/users",
 "component": "/src/pages/users.vue",
 "children": [
 {
 "path": "",
 "component": "/src/pages/users/index.vue",
 "name": "users"
 },
 {
 "path": ":id",
 "component": "/src/pages/users/[id].vue",
 "name": "users-id"
 }
 ]
 }
 ]
与keep-alive,transition一起使用
app.vue
| 1 | <router-view v-slot="{ Component, route }"> | 
如果要单独给某个页面指定keep-alive,在app.vue动态设置include即可
| 1 | <router-view v-slot="{ Component, route }"> |