Vue项目中出现Loading chunk {n} failed问题的解决方法

这种报错来自于webpack进行code spilt之后某些bundle文件lazy loading失败。

当在渲染一个路由的过程中,需要尝试解析一个异步组件时发生错误。 完全符合我们场景,所以在onError方法中我们实现如下代码:

1、服务端解决方式
报错的原因是某些js bundle没有被找到,所以在服务端接收到获取该js文件的请求时先判断该js文件是否存在,如果存在直接返回js文件,如果不存在则返回一个提示信息给前端,让前端处理。假设服务端用express作为静态文件服务器,代码如下:

app.all(/\.js$/, (req, res) => {
    const fileName = req.path.slice(req.path.lastIndexOf('/') + 1);
    const filePath = path.resolve(__dirname, './public/static/js/' + fileName);
    if (fs.existsSync(filePath)) {
        fs.sendFile(filePath);
    } else {
        res.setHeader('Content-Type', 'application/javascript; charset=UTF-8')
        res.setHeader('Accept-Ranges', 'bytes')
        res.setHeader('Vary', 'Accept-Encoding')
        res.setHeader('Transfer-Encoding', 'chunked')
        res.setHeader('Last-Modified', new Date().toUTCString())
        res.setHeader('Cache-Control', 'no-cache')
        res.send('window.serverRebuildHook && window.serverRebuildHook();')
    }
});

当js文件未找到时,通过res.send(‘window.serverRebuildHook && window.serverRebuildHook();’)向前端返回一条消息,并执行前端定义的serverRebuildHook方法。

接着我们在前端实现serverRebuildHook方法:

window.serverRebuildHook = function () {
  alert('服务器版本已更新,正在刷新本地缓存,请稍后...');
  location.replace(location.href);
}

2、前端解决方式

由于项目里面用到了vue-router,vue-router的错误处理函数 onError 是不是能够捕获该错误呢?我们来看一下官方文档的说明:
在这里插入图片描述
当在渲染一个路由的过程中,需要尝试解析一个异步组件时发生错误。 完全符合我们场景,所以在onError方法中我们实现如下代码:

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);
  }
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue项目常见问题解决方法包括但不限于以下几个方面: 1. 跨域问题:在Vue项目,由于浏览器的同源策略限制,经常会遇到跨域问题解决方法可以使用代理服务器来转发请求,或者在后端接口设置允许跨域请求的头信息。 2. 路由问题:有时候会遇到路由跳转不成功或者参数传递错误的问题解决方法是检查路由配置是否正确,确保路由路径和组件对应正确,同时在跳转时传递参数时要注意参数的类型和命名是否一致。 3. 组件通信问题:在Vue项目,组件之间的通信是常见的问题解决方法可以使用Vuex来进行状态管理,或者使用Vue的自定义事件来实现组件间的通信。 4. 性能优化问题:在大型Vue项目,性能优化是一个重要的考虑因素。解决方法包括使用异步组件来提高首屏加载速度,使用懒加载来按需加载组件,合理使用Keep-alive缓存组件等。 5. 打包部署问题Vue项目的打包部署有时候会遇到一些问题,比如打包后文件体积过大或者部署到服务器后页面空白等。解决方法可以使用Webpack进行代码优化和压缩,或者检查部署路径和服务器环境等。 综上所述,Vue项目常见问题解决方法需要深入理解Vue的相关知识,并结合具体问题进行调试和优化。在实际开发,理解这些问题并能够快速解决将有助于提高开发效率和项目质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值