vue3动态引入图片(:src)

vite 官方默认的配置,如果资源文件在assets文件夹打包后会把图片名加上 hash值,但是直接通过 :src="imgSrc"方式引入并不会在打包的时候解析,导致开发环境可以正常引入,打包后却不能显示的问题

实际上我们不希望资源文件被wbpack编译可以把图片放到public 目录会更省事,不管是开发环境还是生产环境,可以始终以根目录保持图片路径的一致,这点跟webpack是一致的

image.png

看到这里,也许问题就解决了,如果在vite确实需要将静态文件放在assets,我们再往下看:

这里我们先假设:

静态文件目录:src/assets/images/

我们的目标静态文件在 src/assets/images/home/home_icon.png

js 复制代码
  <img :src="require('@/assets/images/home/home_icon.png')" />

尝试过require动态引入, 发现报错:require is not defind,这是因为 require 是属于 Webpack 的方法

第一种方式(适用于处理单个链接的资源文件)

js 复制代码
  import homeIcon from '@/assets/images/home/home_icon.png'
	<img :src="homeIcon" />

第二种方式(适用于处理多个链接的资源文件)

推荐,这种方式传入的变量可以动态传入文件路径!!

静态资源处理 | Vite 官方中文文档

new URL() + import.meta.url

这里我们假设:

工具文件目录: src/util/pub-use.ts

pub-use.ts

js 复制代码
// 获取assets静态资源
export default  const getAssetsFile = (url: string) => {
   return new URL(`../assets/images/${url}`, import.meta.url).href
}

使用

js 复制代码
import usePub from '@/util/public-use'
setup () {
  const Pub = usePub()
  const getAssetsFile = Pub.getAssetsFile
  return { getAssetsFile }
}

可以包含文件路径

js 复制代码
<img :src="getAssetsFile('/home/home_icon.png')" />
相关推荐
DevUI团队1 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_431600442 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
avi91112 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
kyriewen3 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程
IT_陈寒3 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635073 小时前
Type vs Interface:读完这篇就没有面试官能难倒你了
前端·面试·typescript
用户938515635074 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
油丶酸萝卜别吃4 小时前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang4 小时前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试
柒和远方5 小时前
V063: TS 面试必考:interface 与 type 的四大差异,与 LLM Harness 的自动化择优
前端·javascript