Vue3异步路由,webpack魔法注释

370 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

首屏加载过慢,单页面应用都会有这个问题,组件我们采用了异步组件,同样路由也可以采用异步路由

异步路由的原理

  • 和异步组件一样,异步路由只有在我们需要这个路由的时候才会去加载
  • 当我们访问到这个路由的时候,会执行路由所对应的component,component所对应的是一个函数,写成一个函数就意味着只有在函数执行时,才会加载这个路由,这样就实现了异步加载

异步路由的实现

{
    path:"/home",
    component:()=>import("../pages/Home.vue")
},

只要把component写成一个函数,就可以实现异步加载,我们先看一下打包时的分包,运行npm run build

名称.png 但是此时的分包名称看不出来是哪个包啊

webpack有个解决方案

魔法注释

我们只需要在import后面加上一个固定语句

/* webpackChunkName:"home-hunk" */

这样我们的包名称就会变成home-hunk

试一下

home-hunk.png 成功分包,这样加载就会只加载固定的包

匹配notFonunt Page

说的有点少,多说点

这个就是说如果没有路由能匹配上,就用这个路由

  • path:"/:pathMatch(.*)" 解析成字符串
  • path:"/:pathMatch(.)" 解析成数组 我们只需要把path改成这样就好了,path:"/:pathMatch(.)" 会将链接解析成字符串,path:"/:pathMatch(.)*"会将连接解析成数组

只要设置这个,如果用户乱输入,就会匹配到这个路由,尝试一下

ZS75L9NvT8.gif

当输入hom时,匹配到了notFount页面

同时我们可以拿到此时url

通过$route.params.pathMatch

<div>
  NOT FOUNT PAGE
  {{$route.params.pathMatch}}
</div>

Z4zb7ofJ15.gif

页面已经展示,如果想在setup语法糖中拿到,需要用的vue提供的hooks useRoute

import { useRoute } from "vue-router"
export default {
    setup() {
        const route = useRoute()
        console.log(route.params.pathMatch);
    }
}

此时的界面

useroute.gif

结束

今天就稍微说一下,状态不好