vite入坑之路:react+vite动态导入报错@vite-ignore的解决方法

news2025/1/20 14:59:02

正常的动态组件导入方式

webpack搭建的项目,不管是react还是vue通常引入动态组件基本这么写:

  const url = import(`../pages/${locale}`)  // vite不支持

or

  const url = import(`../pages/${locale}/index.jsx`)  // vite不支持

这在vite架构中,一般情况下开发不会有问题,但是使用build打包就会给出警告提示。

错误信息:The above dynamic import cannot be analyzed by Vite. See https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations for supported dynamic import formats. If this is intended to be left as-is, you can use the /* @vite-ignore */ comment inside the import()

或者打完包之后:
TypeError: Failed to fetch dynamically imported module: http://127.0.0.1:8080/pages/home/index.jsx

解决方案

这个需要熟读vite官网教程了:https://cn.vitejs.dev/guide/features.html#glob-import

在这里插入图片描述
用法:

const modules = import.meta.glob('./dir/*.js')

// vite 生成的代码
const modules = {
  './dir/foo.js': () => import('./dir/foo.js'),
  './dir/bar.js': () => import('./dir/bar.js')
}

import.meta.glob() 方法匹配某个菜单下的所有模块,所以你还需要进行遍历。
例如,我用react写的话,因为会有index.jsx的原因:
import.meta.glob('@/pages/*/*') 会匹配pages下的所有一级目录
import.meta.glob('@/pages/*/*/*') 会匹配pages下的所有二级目录

…以此类推

Glob 导入注意事项

这只是一个 Vite 独有的功能而不是一个 Web 或 ES 标准 该 Glob 模式会被当成导入标识符:必须是相对路径(以 ./
开头)或绝对路径(以 / 开头,相对于项目根目录解析)或一个别名路径(请看 resolve.alias 选项)。 Glob 匹配是使用
fast-glob 来实现的 —— 阅读它的文档来查阅 支持的 Glob 模式。 你还需注意,所有 import.meta.glob
的参数都必须以字面量传入。你 不 可以在其中使用变量或表达式。

目录结构

在这里插入图片描述

封装动态方法

// locale为路径名称 例如:dashboard/analysis
function importLocale(locale) {
    // 判断 / 出现次数  用于匹配菜单组件 (pages目录下)
    let n = (locale.split('/')).length - 1;
    // vite动态导入方法
    let modules = import.meta.glob('@/pages/*/*')

    // 组件层级  0一级 ,1二级,2三级,3四级,4五级  
    // pages下一级目录:commonview/index.jsx     login/index.jsx等等
    // pages下二级目录:dashboard/analysis/index.jsx    system/user/index.jsx等等
    switch (n) {
        case 0:
            modules = import.meta.glob('@/pages/*/*')
            break;
        case 1:
            modules = import.meta.glob('@/pages/*/*/*')
            break;
        case 2:
            modules = import.meta.glob('@/pages/*/*/*/*')
            break;
        case 3:
            modules = import.meta.glob('@/pages/*/*/*/*/*')
            break;
        case 4:
            modules = import.meta.glob('@/pages/*/*/*/*/*/*')
            //最多给你5级菜单目录,多了自己加。注意是菜单组件目录不是普通组件,我觉得没哪个傻逼会写好几级目录,菜单是系统设置-菜单管理里面添加的,注意下就行。
            break;
        default:
            break;
    }

    let url = modules[`/src/pages/${locale}/index.jsx`]
    
    // 找不到本地组件直接403
    if (url == undefined) url = () => import(`../components/error403`)
    
    // const url = import(`../pages/${locale}`)  // vite不支持

    return url
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3+vite环境变量配置

在项目开发中,通常来说,不同的环境会有不同的请求api接口,这就需要修改配置,才能满足对应的环境。所以这里就使用了环境变量。环境变量就是在不同的环境中使用不同的变量值。 # 环境变量文件(.env) 在项目根目录(和sr…

TCP协议和相关特性

1.TCP协议的报文结构 TCP的全称为:Transmission Control Protocol。 特点: 有连接可靠传输面向字节流全双工 下面是TCP的报文结构: 源端口和目的端口: 源端口表示数据从哪个端口传输出来,目的端口表示数据传输到哪个端口去。…

FPGA_学习_03_第一个FPGA程序流水灯

学习编程,最重要永远就是动手,本文将在开发板上实现FPGA的“Hello world”→流水灯。本文主要目的是熟悉在Vivado上从零到程序运行起来的基本开发流程。 1 硬件电路介绍 本人购买的开发板接在PL端的只有2个LED灯,刚好达到流水灯的最低要求。…

今年这情况,大家多一手准备吧......

大家好,最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约时间&a…

ASEMI代理MAX5048BAUT+T原装ADI车规级MAX5048BAUT+T

编辑:ll ASEMI代理MAX5048BAUTT原装ADI车规级MAX5048BAUTT 型号:MAX5048BAUTT 品牌:ADI /亚德诺 封装:SOT-23-6 批号:2023 安装类型:表面贴装型 引脚数量:6 工作温度:-40C~125C 类型&a…

npx下载构建nuxt3开发模板失败的解决方案

在搭建nuxt3项目开发的时候,安装nuxt3开发模板的时候,使用命令: npx nuxi init my-app 会出出现一下错误: This is related to npm not being able to find a file. 发生上述错误是因为您有一个未正确安装的依赖项。 以下是解决…

大央企的“中央厨房”,泰裤辣

本文来源:特大号 作者:特大妹 最近两年,大央企大国企在数字化转型中,特热衷成立“中央厨房”。 有的中央厨房,单独挂牌为“数科公司”,有的中央厨房,升级为集团数字化转型的一级部门。 把之前各…

“警”彩集结|北峰通信亮相11届警博会,多场景助力警务智能化

2023年5月11日-14日,第十一届中国国际警用装备博览会(警博会)在北京首钢会展中心隆重召开。“警博会”作为中国乃至亚太地区最具影响力、最权威的警用装备盛会,代表了中国警用装备行业的最高水平。北峰通信作为服务公共安全实战30余年的企业,…

软考A计划-真题-分类精讲汇总-第十二章(法律法规与标准化)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Web渗透 不断更新

Web渗透 SQL注入一般注入步骤 文件上传漏洞过滤绕过空格绕过 针对Linux特定字符过滤绕过 针对Linux(例如:cat) 序列号unserialize SQL注入 一般注入步骤 注入点 --> 查询注入字段数 --> 查询注入回显位 --> 查询当前数据库信息 --> 查询数据库表 --&g…

MySQL基础(三十四)锁

1. 概述 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的 资源。为保证数据的一致性,需要对 并发操作进行控制,因此产生了 锁 。同时 锁机制 也为实现MySQL 的各…

HIT数据结构lab2-树型结构的建立与遍历

title: 数据结构lab2-树型结构的建立与遍历 date: 2023-05-16 11:42:26 tags: 数据结构与算法 哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称:数据结构与算法 课程类型:必修 实验项目:树型结构的建立与遍历 实验题目&#xff1…

【目标检测】模型信息解析/YOLOv5检测结果中文显示

前言 之前写过一篇博文【目标检测】YOLOv5:标签中文显示/自定义颜色,主要从显示端解决目标中文显示的问题。 本文着重从模型角度,从模型端解决目标中文显示问题。 模型信息解析 正常情况下,可以直接加载模型打印信息&#xff0…

GPT专业应用:英语作文修改与解释

正文共 868 字,阅读大约需要 3 分钟 英语学习者/老师必备技巧,您将在3分钟后获得以下超能力: 快速修改英语作文 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda …

字节外包做了5年软件测试,12月无情被辞,想给划水的兄弟提个醒

前言 先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成…

第45讲:Python集合对象生成式的概念以及应用案例

文章目录 1.什么是集合生成式3.使用集合生成式创建集合3.在集合生成式中使用if语句4.在集合生成式中使用嵌套for循环语句 集合的生成式和集合的非常类似,只是符号不同而已,集合的语法格式如下,可以看到只是和集合的符号不同: {集…

【Linux】Linux /proc/iomem与/proc/ioports

目录 1. 前言 2. /proc/iomem 2.1 简介 2.2 ioremap 2.3 mmap 3. struct resource 4. System RAM 4.1 System RAM 简介 4.2 page_is_ram 4.3 Kernel code、data、bss 5. /proc/ioports 6. /proc/iomem/与/proc/ioports/对比 6.1 API简介 6.3 源码解读 7.总结 8.…

再来跟我一起写 Makefile 沉痛悼念技术大牛左耳朵耗子(陈皓)

再来跟我一起写 Makefile 沉痛悼念技术大牛左耳朵耗子(陈皓) 左耳朵耗子redefence 左耳朵耗子 5 月 15 日早晨,一则意外消息打得我们猝不及防:MegaEase CEO、知名架构师、CSDN 资深博主(https://blog.csdn.net/haoel&…

Java的继承与实现

一、Java的继承与实现 继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。这种派生方式体现了传递性。 在Java中,除继承,还有一种体现传递性的方式叫实现。那么,这两者方式有何区别&#xff1f…

通信算法之153: 基于Matlab的OFDM通信系统关键基带算法设计

1. 发射机 TBD 2. 接收机 定时同步主要包括帧(分组)同步和符合同步两种,其中帧同步用于确定分组的起始位置。而符合同步在于正确地定出OFDM符号数据部分的开始位置,以进行正确的FFT操作。 载波频率同步先检测出频率偏移&#xf…