vue 路由懒加载的三种方式,以及遇到线上版本因为路由懒加载会偶发出现Loading chunk xx failed 的解决办法

vue 路由懒加载的三种方式(本人常用ES6的import按需加载)

const login = resolve => require(['@/pages/auth/login/login'], resolve)//vue异步组件按需加载方式

const login = () => import(/* webpackChunkName: "login" */ '@/pages/auth/login/login')//ES6按需加载  本人常用方式

const login = r=>require.ensure([],()=>r(require('@/pages/auth/login/login')))//vue+webpack 按需加载

路由懒加载之后会对项目性能提升很多,但是在服务器上会出现偶发性的报错Loading chunk 12 failed 之类的错误,反复几次项目打包上线后,想到了一种可能。如用户点击过的A模块被浏览器缓存了,当再重新打包上线后,用户在A模块依然是读取的缓存可以正常浏览;如果从A模块中点击链接到B模块中,由于每次打包的文件hash值不同,导致从服务器中找不到该模块,所以就抛出了Loading chunk xx failed的错误。所以如果再刷新一下页面,可恢复正常。查找资源之后也没有什么好的解决办法,只有通过router的onError函数捕获这个错误,刷新当前点击的路由,曲线救国,效果是一样的。贴上代码,放在router.js main.js都可以。
在这里插入图片描述

router.onError((error) => {
    const pattern = /Loading chunk (\d)+ failed/g;
    const isChunkLoadFailed = error.message.match(pattern);
    console.log(isChunkLoadFailed,'/Loading chunk (\d)+ failed/g','路由懒加载找不到对应的moudle')
    if (isChunkLoadFailed) {
        window.location.reload();
    }else{
        console.log(error)
    }
});
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值