Uncaught (in promise) ChunkLoadError: Loading chunk 28 failed.

在尝试使用Vue动态加载菜单时遇到了ChunkLoadError,问题源于懒加载组件与history路由模式的不兼容。通过将router中的history模式更改为默认的hash模式,成功解决了报错,程序得以正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用vue动态加载菜单,报了这个错:

Uncaught (in promise) ChunkLoadError: Loading chunk 28 failed.
(missing: http://localhost:8080/sal/js/28.js)
    at Function.requireEnsure [as e] (app.js:896)
    at Function.fn.e (app.js:177)
    at component (menu.js?2971:47)
    at eval (vue-router.esm.js?8c4f:2144)
    at eval (vue-router.esm.js?8c4f:2171)
    at Array.map (<anonymous>)
    at eval (vue-router.esm.js?8c4f:2171)
    at Array.map (<anonymous>)
    at flatMapComponents (vue-router.esm.js?8c4f:2170)
    at eval (vue-router.esm.js?8c4f:2106)

我的菜单menu.js如下:

import {getRequest} from './api'  
export const initMenu = (router,store) => {  
    if(store.state.routes.length > 0 ){  
        return;
    }
    getRequest("/system/cfg/getMenu").then(data => {  //如果routes为空,则初始化菜单
       if(data){
          
           let fmtRoutes = formatRoutes(data.obj);  //格式化router
           for(var i = 0 ; i < fmtRoutes.length ; i += 1 ){
               const route = fmtRoutes[i];
               router.addRoute(route)
           }
           //router.addRoutes(fmtRoutes); //添加到路由 addRoutes已经废弃
           store.commit('initRoutes',fmtRoutes); //将数据存入vuex
       }
    })

}
export const formatRoutes = (routes) => {
    let fmtRoutes = [];
    routes.forEach((router) => {
        let  {       //将返回的对象封装(定义匿名对象,并将router的值赋给它)
            path,
            component,
            name,
            iconCls,
            children
        } = router;

        if(children && children instanceof Array){
            children = formatRoutes(children);
        }
        let fmRouter = {       //temp对象
            path:path,
            name:name,
            iconCls:iconCls,
            children:children,
            component(resolve){    //等效于component: function conponent(resolve){},通过函数获取值
                if(component.startsWith('Home')){
                    require(['../view/' + component +'.vue'],resolve);
                }else if(component.startsWith('Emp')){
                    require(['../view/emp/' + component +'.vue'],resolve);
                }else if(component.startsWith('Per')){
                    require(['../view/per/' + component +'.vue'],resolve);   
                }else if(component.startsWith('Sal')){
                    require(['../view/sal/' + component +'.vue'],resolve); 
                }else if(component.startsWith('Sta')){
                    require(['../view/sta/' + component +'.vue'],resolve);    
                }else if(component.startsWith('Sys')){
                    require(['../view/sys/' + component +'.vue'],resolve);
                }
                
            }
        }
        fmtRoutes.push(fmRouter);
    });
    return fmtRoutes;
}

当我点击二级菜单员工奖惩的时候报错
在这里插入图片描述
查找原因是因为require加载component方式为懒加载,懒加载的时候用history路由模式,就会出现这种错误。

在router里面注释掉history路由模式,改用默认的hash模式。重新启动项目,程序运行成功。
在这里插入图片描述

[HMR] Update check failed: Loading hot update chunk main failed. (missing: http://localhost:4010/main.f0ca7b43470cc41785c9.hot-update.js) ChunkLoadError at http://localhost:4010/main.js:121195:26 at new Promise (<anonymous>) at loadUpdateChunk (http://localhost:4010/main.js:121190:20) at http://localhost:4010/main.js:121647:29 at Array.forEach (<anonymous>) at __webpack_require__.hmrC.jsonp (http://localhost:4010/main.js:121642:22) at http://localhost:4010/main.js:121001:47 at Array.reduce (<anonymous>) at http://localhost:4010/main.js:120997:55 (anonymous) @ main.js:119235 (anonymous) @ main.js:119360 Promise.catch check @ main.js:119351 (anonymous) @ main.js:119371 emit @ main.js:84121 reloadApp @ main.js:119033 ok @ main.js:112124 (anonymous) @ main.js:118709 (anonymous) @ main.js:111803 (anonymous) @ main.js:113516 (anonymous) @ main.js:114197 (anonymous) @ main.js:114195 (anonymous) @ main.js:113426 (anonymous) @ main.js:116172Understand this warningAI remoteEntry.js:8480 [HMR] Nothing hot updated. remoteEntry.js:8480 [HMR] App is up to date. remoteEntry.js:9345 Uncaught TypeError: Cannot set properties of undefined (setting './node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true') at self.webpackHotUpdate (remoteEntry.js:9345:39) at src_utils_request_js-src_views_login_vue.f0ca7b43470cc41785c9.hot-update.js:2:25module.exports = { 使用模块联邦,修改代码之后报错,不用正常
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值