vue3+vite(2.9.9)构建打包到线上环境时动态路由导入失败

前言:当前项目包含了2个子项目,自己vite.config.ts与父级vite.config.ts有关联关系,声明别名时会导致整个项目报错,直接逻辑导入路径前缀会导致打包线上时找不到路由前面的路径,故而使用动态导入路径方式来处理。

1、本地运行好好的没问题,发版到线上就报下面错误

此处使用vite动态导入方式,import.meta.glob('../../../lib/saas/view/*.ts');

const modules2 = import.meta.glob('/src/view/**/*.vue');

const sessionStoreRoute = sessionStorage.getItem('dynamicRouteList');
const getDynamicRouteList = sessionStoreRoute ? JSON.parse(sessionStoreRoute) : [];
const dynamicRoute: any = [];
// 使用 import.meta.glob 动态导入所有视图组件
const modules = import.meta.glob('../../../lib/saas/view/*.ts');
const modules2 = import.meta.glob('/src/view/**/*.vue');
// getDynamicRouteList.map(itemRouter => {
//     if(itemRouter.children && itemRouter.children.length > 0){
//       itemRouter.children.map(childRoute => {
//         let modulePath0 = childRoute.component;
//         childRoute.component = () => new Function(`return import('/nerv-lib/saas/view/${modulePath0}')`)();///nerv-lib/saas/view/
//         if(childRoute.children && childRoute.children.length > 0){
//           childRoute.children.map(child2=>{
//             let modulePath = child2.component;
//             child2.component = () => new Function(`return import('/@/view/${modulePath}')`)();///@/view/
//           })
//         }else{//如没有下一级菜单代表是一级,重新处理一级菜单路由
//             childRoute.component = () => new Function(`return import('/@/view/${modulePath0}')`)();
//         }
//       })
//     }
//     dynamicRoute.push(itemRouter)
// })
getDynamicRouteList.forEach((itemRouter) => {
  if (itemRouter.children && itemRouter.children.length > 0) {
    itemRouter.children.forEach((childRoute) => {
      const modulePath0 = childRoute.component;
      // 修改 component 属性
      // childRoute.component = () => import(`${saasView}/${modulePath0}`).then((mod) => mod.default);
      // childRoute.component = () => new Function(`return import('${baseURL}${modulePath0}')`)();
      // (childRoute.component =
      //   modules[`../../../lib/saas/view/${modulePath0}`] ||
      //   (() => import(`../../../lib/saas/view/${modulePath0}`).then((mod) => mod.default)));
      childRoute.component = modules[`../../../lib/saas/view/${modulePath0}`];
      if (childRoute.children && childRoute.children.length > 0) {
        childRoute.children.forEach((child2) => {
          const modulePath = child2.component;
          // 修改 component 属性
          // child2.component =
          //   modules2[`./SaaS-lib/src/view/${modulePath}`] ||
          //   (() => import(`./SaaS-lib/src/view/${modulePath}`).then((mod) => mod.default));
          // child2.component = /* @vite-ignore */ () =>
          //   import(`/@/view/${modulePath}`).then((mod) => mod.default);
          // child2.component = () => new Function(`return import('${baseURL2}${modulePath}')`)();
          child2.component = modules2[`/src/view/${modulePath}`];
        });
      } else {
        // 如果没有下一级菜单代表是一级,重新处理一级菜单路由
        // childRoute.component = /* @vite-ignore */ () =>
        //   import(`/@/view/${modulePath0}`).then((mod) => mod.default);
        // childRoute.component = () => new Function(`return import('${baseURL2}${modulePath0}')`)();
        childRoute.component = modules2[`/src/view/${modulePath0}`];
        // modules2[`./SaaS-lib/src/view/${modulePath0}`] ||
        //   (() => import(`./SaaS-lib/src/view/${modulePath0}`).then((mod) => mod.default));
      }
    });
  }
  dynamicRoute.push(itemRouter);
});
export default dynamicRoute;

最后发布到线上可以正常访问,并且能打印出所有指定的路由文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值