前言

最近在写个​​vue​​​的​​demo​​,调试过程中出现个问题,vconsole中提示

[vue-router] Failed to resolve async component default:
Error:Loading chunk 10 failed.

大致意思就是路由异步加载组件的时候报错了

报错来自于​​webpack​​​进行​​code spilt​​​之后某些​​bundle​​​文件​​lazy loading​​失败。但是这个问题的根本原因没有被找到,因为这个问题出现的偶然性太高了,而且有的手机上会出现,有的不会,用模拟器不会出现

实在找不到原因,又因为是偶发性的所以还是做容错处理解决该问题

解决方案

  • 使用​​router.onError​

具体API地址​router.onError​

router.onError

router.onError(callback)

注册一个回调,该回调会在路由导航过程中出错时被调用。注意被调用的错误必须是下列情形中的一种:


  1. 错误在一个路由守卫函数中被同步抛出;
  2. 错误在一个路由守卫函数中通过调用 next(err) 的方式异步捕获并处理;
  3. 渲染一个路由的过程中,需要尝试解析一个异步组件时发生错误。

具体解决代码:

router.onError((error) => {
const pattern = /Loading chunk (\d)+ failed/g;
const isChunkLoadFailed = error.message.match(pattern);
const targetPath = router.history.pending.fullPath;
if (isChunkLoadFailed) {
router.replace(targetPath);
}
});
  • 将异步组件改为同步组件

该方法属于损失性能从源头上解决问题,但是不太可取