vue+vite项目,无法使用绝对地址动态导入

博主的桌面工具软件已经正式开发,获取方式:

  • 可以关注我的小程序【中二少年工具箱】获取。(若小程序更新有延迟,可先收藏小程序)

  • 通过下载链接

  • 百度网盘:
    链接:https://pan.baidu.com/s/15zDnSoEzJGSZLjpD2FYrMw?pwd=1234 提取码:1234 复制这段内容后打开百度网盘手机App,操作更方便哦

具体已实现功能,参考文章中二少年工具箱简介

文章目录

  • 前言
  • 一、静态导入
  • 二、import函数
  • 三、new URL(url, import.meta.url)
  • 四、import.meta.glob
  • 总结


前言

项目中遇到一个场景,页面的标题栏结构基本相同,只是图片需要动态改变,不同类型的页面,进入后,加载不同的图片。

在这里插入图片描述
在这里插入图片描述


一、静态导入

代码示例

      <img :src="imgt" alt="">import img from '@/common/assets/images/base-info/org-user-edit.png'

如果用静态导入的方式,那么就需要穷举所有可能情况,把所有图片都导入,然后加载,显然并不优雅。如果这个组件用在更多的模块,穷举的方式可能还会造成高耦合。

二、import函数

import(`/src/common/assets/images/base-info/${props.titleImg}`).then(res=>{console.log(res)
})

写文章这部分的时候,中文官网挂了,只能贴英文的截图了:
在这里插入图片描述

  1. 文档翻译:vite支持原生import函数,但是变量中只能有一层文件路径,也就是说如果写成“import(${xxx}/common/assets/images/base-info/${props.titleImg})”或者titleImg是多层文件,例如:xxx/xxx.png,都会报错
  2. 尽量不要在script中直接写await语法糖,否则容易造成一些不可预知的问题。比如说template已经渲染完毕,而函数部分阻塞,导致props中的变量无法解析,依赖props渲染的dom,可能会有异常。
  3. 这样写有可能vite会报错:

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() call to suppress this warning.

其实这是不用管的,如果感觉碍眼,可以增加vite忽略:/* @vite-ignore */,修改上面的代码为:

import(/* @vite-ignore */`/src/common/assets/images/base-info/${props.titleImg}`).then(res=>{pathr.value=res.default
})

三、new URL(url, import.meta.url)

这是vite官网介绍的一种方式,官网原文对它的介绍是:
import.meta.url 是一个 ESM 的原生功能,会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用,在一个 JavaScript 模块中,通过相对路径我们就能得到一个被完整解析的静态资源 URL
简单来说,就是通过当前模块的路径【import.meta.url】配合相对路径【url】,就能获取到绝对路径。

const path=new URL('../../',import.meta.url).href

在哪个模块调用上面的代码,就是得到模块祖父级文件的绝对路径。

四、import.meta.glob

最后介绍glob的方式。这是vite官网介绍的一种方式,官网介绍如下:
在这里插入图片描述
import.meta.glob可以得到一个json对象,对象的keys由符合条件的绝对路径组成,对应的value是函数,返回一个promise对象,所以根据路径筛选符合条件的json元素,然后运行对应的函数,就能得到资源。

获取对应目录下的所有图片地址:

const getPathFn=import.meta.glob('@/common/assets/images/base-info/**')[`/src/common/assets/images/base-info1/${props.titleImg}`]
if(getPathFn){getPathFn().then(res=>{console.log(res.default)})
}

我推荐这种方式,因为它限制更少,功能全面。


总结

遇到问题,查官网。官网不懂,问博主。

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

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

相关文章

C语言之随心所欲打印三角形,金字塔,菱形(倒金字塔)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 三角形 金字塔 倒金字塔 菱形 三角形 题目&#xff1a;根据输入的行数打印对应的三角形。&#xff08;用 * 号打印&#xff09; #includ…

在windows平台上mysql的安装教程

1.下载 mysql下载网址&#xff1a;https://dev.mysql.com/downloads/installer/ 这里直接选择的是mysql的社区版。自己使用直接选择免费的就行 直接选择下载 2.安装过程 选择Server only 就行 下一步 下一步 下一步&#xff0c;选择弱密码把&#xff0c;方便学习和自己使用 设置…

Redis实现:每个进程每30秒执行一次任务

前言 项目中要实现每一进程每30秒执行一次 代码实现: public class DistributedScheduler {private final RRedisClient redisson;private final String processKeyPrefix; // 例如 "process_"public DistributedScheduler(RRedisClient redisson) {this.redisson…

蓝桥杯Web应用开发-浮动与定位

浮动与定位 浮动布局比较灵活&#xff0c;不易控制&#xff0c;而定位可以控制元素的过分灵活性&#xff0c;给元素一个具体的空间和精确的位置。 浮动 我们使用 float 属性指定元素沿其容器的左侧或右侧放置&#xff0c;浮动布局常见取值如下&#xff1a; • left&#xff0…

K8S之Namespace的介绍和使用

Namespace的理论和实操 Namespace理论说明Namespace实操创建、查看命名空间使用ResouceQuota 对Namespace做资源限额更多ResouceQuota 的使用 Namespace理论说明 命名空间定义 K8s支持多个虚拟集群&#xff0c;它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间&…

seatunnel数据集成(一)简介与安装

seatunnel数据集成&#xff08;一&#xff09;简介与安装seatunnel数据集成&#xff08;二&#xff09;数据同步seatunnel数据集成&#xff08;三&#xff09;多表同步seatunnel数据集成&#xff08;四&#xff09;连接器使用 1、背景 About Seatunnel | Apache SeaTunnel …

Docker下安装GitLab

极狐GitLab Docker 镜像 | 极狐GitLab 安装所需最小配置 内存至少4G 系统内核至少3.10以上 uname -r 命令可以查看系统内核版本 安装Docker 1.更新 yum源 yum update 2.安装依赖(如果在操作第三步的时候提示yum-config-manager 未找到命令 就安装下面依赖) yum instal…

R语言学习case11:ggplot 置信区间(包含多子图)

ggplot Geometric objects How are these two plots similar? 两个图都包含相同的x变量、相同的y变量&#xff0c;并且描述相同的数据。但是这两个图并不相同。每个图使用不同的可视化对象来表示数据。在ggplot2语法中&#xff0c;我们说它们使用不同的geoms。 geom是绘图…

=代码分享=

//建堆 void AdjustDwon(int a[], int n, int i) { int root i; //默认满足条件的是左孩子 int child root * 2 1; while (child < n) { //如果右孩子更符合条件&#xff0c;就改 if (child1<n&&a[child 1] > a[child]) { child 1; } if (a[child] > …

开发实践10_PurchaseOrder笔记

0 NewProj 01 将source_data材料包放到项目根目录。将其中的static文件夹剪切到根目录。将剩下的temps文件剪切到templates文件夹下。可删source_data。后续用默认sqlite。 STATIC_URL "/static/" STATICFILES_DIRS [os.path.join(BASE_DIR, static) ] 02 pytho…

使用 Python、Elasticsearch 和 Kibana 分析波士顿凯尔特人队

作者&#xff1a;来自 Jessica Garson 大约一年前&#xff0c;我经历了一段压力很大的时期&#xff0c;最后参加了一场篮球比赛。 在整个过程中&#xff0c;我可以以一种我以前无法做到的方式断开连接并找到焦点。 我加入的第一支球队是波士顿凯尔特人队。 波士顿凯尔特人队是…

C语言实现memcpy、memmove库函数

目录 引言一、库函数介绍二、库函数详解三、源码实现1.memcpy源码实现2.memmove源码实现 四、测试1.memcpy函数2.memmove函数 五、源码1.memcpy源码2.memmove源码 六、参考文献 引言 关于memcpy和memmove这两个函数&#xff0c;不论是算法竞赛还是找工作面试笔试&#xff0c;对…

同步復位和異步復位二者各自的優缺點

同步復位和異步復位二者各自的優缺點 一、同步復位&#xff1a;當時鐘上升沿檢測到復位信號&#xff0c;執行復位操作&#xff08;有效的時鐘沿是前提&#xff09;。 always ( posedge clk ); 1.1 優點&#xff1a; a、有利於仿真器的仿真&#xff1b; b、可以使所設計的系…

感悟笔记——2024年2月5日

今日阅读了一篇挺有深度的文章&#xff0c;主要阐述进入职场后的大部分人&#xff0c;是怎么逐渐沦为螺丝钉的?即使起点巨高的优等生&#xff0c;也不可避免。文章指路&#xff1a; 「优等生思维」正在将你变成「螺丝钉」和「老黄牛」从小到大&#xff0c;我一直都是那个「别…

Python类与对象

目录 面向对象 定义类 创建对象 类的成员 实例变量 构造方法 实例方法 类变量 类方法 封装性 私有变量 私有方法 使用属性 继承性 Python中的继承 多继承 方法重写 多态性 继承与多态 鸭子类型测试与多态 面向对象 类和对象都是面向对象中的重要概念。面向…

【react】react+es6+antd5.13.2+ts,antd表格的操作如何在父组件写?

reactes6antd5.13.2ts,antd表格的操作如何在父组件写&#xff1f; 我的子组件columns.tsx&#xff0c;只加表头&#xff0c;操作放在父组件。 columns.tsx的代码&#xff1a; export const dataColumns [{title: 项目成员,dataIndex: name,key: name,},{title: 可选账号,alig…

GNU C和标准C

要理解GNU C和标准C的区别&#xff0c;我们需要先了解C语言的标准化过程以及GNU项目。 标准C&#xff1a; C语言最初由Dennis Ritchie在1973年设计并实现。随着其流行度的增加&#xff0c;为了保证不同编译器之间的可移植性和一致性&#xff0c;美国国家标准局&#xff08;Ame…

非springboot 使用aop 切面

在非Spring Boot应用中使用AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;的代码实现需要依赖Spring AOP库。由于Spring AOP库并不直接支持非Spring应用&#xff0c;你需要将Spring AOP库作为依赖项添加到项目中&#xff0c;并使用Spring AO…

Web课程学习笔记--CSS盒模型

CSS 盒模型 盒模型 网页设计中常听的属性名&#xff1a;内容(content)、填充(padding)、边框(border)、边界(margin)&#xff0c; CSS盒子模式都具备这些属性。 这些属性我们可以把它转移到我们日常生活中的盒子&#xff08;箱子&#xff09;上来理解&#xff0c;日常生活中所…

目标检测:3采用YOLOv8 API训练自己的模型

​ 目录 ​1.YOLOv8 的新特性 2.如何使用 YOLOv8? 3使用YOLOv8训练模型 4.验证训练集 5.测试训练集 6.测验其他图片 7 其他问题 参考: 1.YOLOv8 的新特性 Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统…