vite 动态路径引入图片资源

vite Glob 导入

今年 vite 有一个特别好用的功能出现了, 注意的是仅限于 vite 框架

官方链接 : https://cn.vitejs.dev/guide/features.html#glob-import

glob导入 功能点在于能够批量导入你想要的资源, 如果在这个基础上加上 资源变量名 的筛选 就能实现,动态导入了

这里展示一个我批量导入图片的函数

有时候项目需要 根据某些情况更换 页面中固定位置的图片, 但是 vite 本身不支持 url 链接添加变量, 因为 有变量的图片链接无法在 build 时解析, 所以想要控制 url 链接发生改变就只能 import 导入图片,然后 js 控制变量发生改变

图片一多就会显得很繁琐, 都是 import 语句, 当然我也尝试过其他的全局导入, 不是打包有问题, 就是图片限制要放在 public 目录

所以 glob导入 也是解决我这一大痛点的功能, 图片在打包后也不会出现问题

实例

function getStaticFilePath(path) {
  const modules = import.meta.glob("/src/assets/**/*.{png,svg,jpg,jpeg,json}", {
    eager: true,
    import: "default",
  });

  //modules 返回内容, 前面是匹配的变量名, 后面是解析后的正确路径(build后会根据结构改变)
  // {
  //   "/src/assets/images/hot/banner.png": "/src/assets/images/hot/banner.png",
  // }

  path = path.replace(/.*?(\/assets\/)/, "/src$1");
  return modules[path];
}

//使用方式
let imgName = "banner.png";
getStaticFilePath(`../assets/images/hot/${imgName}`); // 结果:/src/assets/images/hot/banner.png

其功能就是批量引入图片资源, 然后我用path变量去匹配图片资源, path变量是可以动态嵌入变量的

这样就可以直接获取到图片等静态资源的正确路径了, 路径可以全路径也可以相对路径, 甚至可以 /assets 开头,

主要是为了 路径插件,开发工具的提示 服务 ,因为在某些工具或插件(vscode,auto import等)在输入 ../ 获取正确路径提示后再嵌入变量会方便很多, 无需自己查看图片结构

注意的是 路径里必须要有 /assets/

注意事项

eager: true 情况下, 资源会在第一时间调用, 所以 不要 引入会影响当前环境的资源文件, 比如 js,css 等, 会导致 变量重新初始化, 样式覆盖等一系列问题

如果实在要引 js,css 等文件, 需要把 eager: true 改为 eager: false, 然后 .then 手动加载获取内容

还有 import.meta.glob 的参数 是 支持变量或表达式的

结语

glob导入 除了处理 图片等静态文件, 也可以用于组件的批量导入, 功能多多, 不妨回到头部, 看看官方文档吧

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vite中打包并压缩图片的方法有多种。根据引用,每次打包都会走一遍图片压缩的流程,所以在每次改动很小时,运行npm run build可能会导致需要长时间等待。根据引用[2],可以在打包前运行脚本npm run build:img进行图片压缩,将压缩后的图片记录下来,并记录时间戳。在二次打包时,只需要比较时间戳,如果图片没有改动,则可以跳过图片压缩的过程,从而减少打包时间。另外,根据引用,你还可以使用vite-plugin-imagemin插件来进行图片压缩。 所以,如果你想在Vite中进行图片压缩,你可以选择以下方法之一: 1. 每次改动很小时,直接运行npm run build进行图片压缩; 2. 在打包前运行脚本npm run build:img进行图片压缩,并记录压缩后的图片和时间戳,以便在二次打包时进行比较; 3. 安装vite-plugin-imagemin插件,并按照其文档进行配置和使用,以实现自动的图片压缩。 请根据你的具体需求选择适合的方法来进行Vite打包压缩图片。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vite图片压缩(vite-plugin-imagemin) imagemin error: XXXX解决办法](https://blog.csdn.net/qq_43806604/article/details/124732352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值