什么!vue3+ts+vite不能使用require引入图片了?那我用什么!

697 阅读1分钟

“一个这么简单的东西你怎么写这么多v-if,明天别来上班了!”领导大叫着,一拳就把我鼻子打骨折了, 当时流眼泪了,捂着眼。

两分多钟以后,我说: “好的,那我后天再来”

代码如下:

image.png

使用require引入图片资源

本着打工人原则,我放弃了带薪休假的一天,这个地方必须优化,按照以前的思路使用require

<img  :src="require(`../../../../assets/images/icon/ji0${item.user?.level}.png`)"/>

马老师,发生甚么事了,怎么报错了

 require is not defined

发现是在vite中不能使用require引入图片资源,因为这里的require是webpack提供的一种加载能力,由于我们使用的是Vite,因此这里必须转用 Vite提供的静态资源载入到主角出场了。

Vite中静态资源处理

官方例:

const imgUrl = new URL('./img.png', import.meta.url).href 
document.getElementById('hero-img').src = imgUrl

简单的说 new URL 一共接收两个参数,第一个参数即图片的路径,这里就是对应require中的值,第二个参数是vite的一个全局变量,可以理解成直接写死了 import.meta.url

于是又有了一种方法,如下:

<img :src="getVipUrl(item.user?.level)"/>

const getVipUrl = computed(() => (level:string):string => {
  return new URL(`../../../../assets/images/icon/ji0${level}.png`, import.meta.url).href
})

我找到领导说优化完成了,明天不让我休息了吧。

‘给你机会你也不中用啊’ 领导继续大叫着。

我劝、这位领导耗子尾汁,好好反思,不要搞、窝~里斗!