vue中使用require动态获取图片地址方式
作者:全蛋
这篇文章主要介绍了vue中使用require动态获取图片地址方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
使用require动态获取图片地址
项目场景
项目中根据图片不同的后缀名,展示不同的图片
问题描述
直接给图片的src
绑定图片地址,图片不显示,使用 require('图片本地路径' + '地址变量' + '.png') 也不显示
<img :src="require('@/assets/img/' + item.url + '.png')" alt="" />
原因分析
vue
在DOM
中直接引入的图片会被转为base64
格式,但是使用变量引入的话,图片不会转为base64
,所以不显示
解决方案
使用require.context
实现前端工程化引入文件
require.context(directory, useSubdirectories, regExp)
directory
检索的目录useSubdirectories
: 是否检索子文件夹regExp
: 匹配文件的正则表达式,一般是文件名mode
: 加载模式。同步还是异步
require.context
执行后,返回一个方法 webpackContext
,这个方法又返回一个 __webpack_require__
, 这个 __webpack_require__
相当于require
或者import
。
同时webpackContext
还有第二个静态方法 keys
与resolve
,一个id
属性
keys
:返回匹配成功模块的名字组成的数组resolve
:接受一个参数request
,request
为test
文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径id
:执行环境的id
,返回的是一个字符串,只要用在module.hot.accpet
,应该是热加载
主要代码
const images = require.context("@/assets/test", false, /\.png$/); let imageURL = '' images.keys().forEach(key => { const name = path.basename(key, '.png') if (name === 图片后缀名) { imageURL = images(key).default || images(key) } }) return imageURL;
vue中require图片失败问题
在vue里,require路径上无法使用变量(会因找不到上下文环境而查找失败),报依赖错误,可通过require.context()解决。
变量在路径上,require找不到上下文环境:
// 错误 require("../assets/image/" + 变量 + "/img.jpg")
变量是最后的文件名或部分文件名,上下文环境找的到可以:
// 正确 require("../assets/image/ipad/" + "变量.jpg") require("../assets/image/ipad/i" + "变量.jpg") require("../assets/image/ipad/img" + "变量.jpg") require("../assets/image/ipad/img.jpg")
require.context()
传入三个参数分别对应:
context = require.context("../assets/image/ipad/", true, /\.(png|jpg)$/); // 相当于"../assets/image/ipad/img.jpg" context("./img.jpg"); //指定上下文环境后,路径上可用变量 // "../assets/image/ipad/" + 变量 + "/img.jpg" context("./"+"变量"+"img.jpg");
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。