阅读 2118

vite-plugin-pages配置浅析

官方文档传送门: vite-plugin-pages

大家好!我是二蛋,前端菜鸡一枚,近期在了解一个开源脚手架vitesse,其中用到了vite-plugin-pages这个插件,简单记录一下各个配置属性的作用以及测试demo,安装方式同学们直接在官方文档看就可以了。有错误欢迎指出(轻点骂,求求了)

再附上我学习这个插件所配置的项目vitesse-route-demo,里面有我一些简单的页面代码,搭配代码看本文效果更佳,可以的话可以点个star

配置属性

本文大部分配置都写在vite.config.ts->defineConfig->plugins->Pages里面

指定需要生成路由的文件夹

类型:string | array

默认路径为 src/pages

Pages({   // default   pagesDir: 'src/pages' }) 复制代码

可以自行修改

Pages({   pagesDir: [    { dir: 'src/pages', baseRoute: '' },    // src/features/pages文件夹下会生成/features/filename这样的路由    { dir: 'src/features/pages', baseRoute: 'features' },    // 会识别fruits下多个分类下pages的文件    { dir: 'src/fruits/**/pages', baseRoute: 'fruits' },   ], }) 复制代码

指定需要生成路由的文件

类型: array

Pages({   // 识别带有vue和md后缀的文件为路由(md文件需要有插件支持)   extensions: ['vue', 'md'], } 复制代码

加载方式

类型:  'sync' | 'async' |  (stirng)=> 'sync' : 'async'

可以直接设定全局的路由加载方式,也可以通过设置syncIndex配置项来转换为同步加载

也可以通过传入一个方法,通过返回 syncasync 来确定加载方式

Pages({   importMode: 'async',   // 只要包含fruits的路由,就会变为异步懒加载   // importMode(path) {   //   return path.includes('fruits') ? 'async' : 'sync'   // }, }) 复制代码

路由块语言类型

类型:string

在使用自动化路由插件之后,我们的一些路由信息就没有写在config文件中了,所以在SFC文件中,可以用route标签来填写一些必要的路由信息。

Pages({   routeBlockLang: 'json5', }) 复制代码

默认会使用json5(即我们常见的对象语法)的方式来写

<route> {   meta: {     layout: 'default'   } } </route> 复制代码

如果不使用默认,可以自己指定使用yaml的方式编写route代码块

<route> meta:   layout: 404 </route> 复制代码

替换方括号(实验中)(看官方issue好像是有问题的,我没有测试成功)

类型: boolean

这个配置是将识别动态路由的 [ ] 换成识别 _ 前缀,跟nuxtjs的风格相似

nuxtStyle路由风格

应该是比较人性化,方便nuxtjs迁移过来?

route处理方法

类型: function

写入之后,我们可以通过这个方法获取到单个路由对象,从而对这个对象进行一定的操作,比如设置身份校验,设置layout

      extendRoute(route) {         // console.log(route.path)         // 这里为了测试这个方法的效果,就是判断一下路由中包含了fruit字符串的,更换layout         if (route.path.includes('fruit')) {           return {             ...route,             meta: { layout: 'home' },           }         }         return route       }, 复制代码

routes处理方法

类型: function

写入之后,可以获取到完整的array,通过循环遍历获取之后对route进行处理

      // 整体处理整个routes的信息,然后进行相应的处理       onRoutesGenerated(routes) {         const temp_routes = JSON.parse(JSON.stringify(routes))         temp_routes.forEach((item: any) => {           // 这里依然是判断一下路由中包含了fruit字符串的,更换layout           if (item.path.includes('fruit')) {             item.meta = {               layout: 'home',             }           }         })         return temp_routes       }, 复制代码

clientCode处理方法

类型:function

写入之后可以获取到整个插件渲染之后的代码,这里我们可以在这里通过字符串操作,对这个代码进行最后的拦截处理。

      // 这里涉及到更改客户端代码       onClientGenerated(clientCode) {         // 能够完整获取到我们实际生成的路由的完整代码,string格式的,         // 感觉可以通过正则对这个方法进行替换,或者各种字符串骚操作进行替换         return clientCode       }, 复制代码

常见使用场景

这一部分可以在文档最后面看到,后期看情况更新


作者:王二蛋
链接:https://juejin.cn/post/7016585379235135496


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐