记录van-rate组件输入图片打包后无效问题

问题复线

在使用vat-rate组件中输入参数icon与void-icon可以自定义图片

开发环境

在dev后开发环境有效果,但在生产环境显示无效

生产环境

根据生产代码可以发现vite未将图片做处理直接写入生产代码

生产环境

问题解决

使用new URL 但方式进行路径写入动态的

js 复制代码
export const getAssestImg = (file: string) => {
  return new URL(`/src/assets/${file}`, import.meta.url).href;
};
//使用
            <van-rate
              class="score"
              v-model="item.siteScore"
              :icon="getAssestImg('/images/find/xing2.png')"
              :void-icon="getAssestImg('/images/find/xing1.png')"
              size="0.4rem"
              gutter="0.1rem"
              readonly
            />

小细节

如果在开发模式上你会发现又没有效果了,但在生产模式下会有效果

这是开发模式下的图片路径,会发现指向了utils而不是assets下面,原因在于import.meta.url取的是当前执行函数的文件所在的文件夹,因为开发模式中我的图片工具写在utils下面所以显示的是这个路径,如果该执行函数与图片所处同一个文件夹下面,那开发环境也会有效果。

注意!! 如果在生产环境上静态资源做了处理,如分包,将css js 图片文件等这类进行文件夹分类,那将也无效

生产环境打包默认全部打到assets文件下面,如果做了分包需额外处理配置。

vite图片打包原理

在vite中图片打包官方默认如果需要动态就使用 new URL(图片所在文件路径,import.meta.url).href

如果图片小于50kb将直接转为base64嵌入到代码中,作为一个变量

大于50kb的vite将所有图片转为一个对象,k值为我们传入的路径,value为打包后实际对象的路径

js 复制代码
Ih = e => (
new URL(Object.assign({
...其他图片
    "/src/assets/bg_banner.jpg": Pu,
  ...其他图片
   
})[`/src/assets/${e}`],import.meta.url).href)

这是打包后的函数 /src/assets/bg_banner.jpg为k,既在开发时输入的值,Pu是vite打包后实际的图片数据

js 复制代码
const Pu = "/assets/bg_banner-Bkxmh7e8.jpg"
  , Qu = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqQAAABSCAYAAACCEsaEAA..."

上面一个base64 一个大于50kb图片的实际路径,携带了Bkxmh7e8的哈希值。

相关推荐
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫4 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux5 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水6 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger6 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)6 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态6 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态6 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart6 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe57 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架