解决VUE3 Vite打包后动态图片资源不显示问题

解决VUE3 Vite打包后动态图片资源不显示问题

<script setup>
let url = ref('')
 
const setimg = (item)=>{
 let src = `../assets/image/${e}.png`
 url.value = src
}
 
</script>
 
 
<template>
    <div v-for="item in 6">
        <h1 @click="setimg(item)">{{ item }}</h1>
    </div>
    <img :src="url" alt="">
    <img src="" alt="">
</template>

原因:Vite打包时不会打包以模板字符串包裹的图片相对路径,所以vite不知道此处要用哪个图片

方法一 将静态资源放到pbulic文件中 (最简单有效)
方法二 通过import 逐个导入图片资源

import one from '../assets/image/1.png'
import two from '../assets/image/2.png'

方法三 在函数中动态导入

const setimg = async (e)=>{
    // 动态引入
    console.log(e);  //图片名
  let src = await import(`../assets/image/${e}.png`);
    url.value = src.default
}
 <img :src="getdiimg1()" alt="" class="cardimg" />
const getdiimg1 = () => {
  // return `/src/assets/imgs/card${state.tabIndex}.png`; 图片文件放在assets 不生效 
  return `/card${state.tabIndex}.png`; // 把图片移到public文件下
};

### Vue3 + Vite 打包图片显示的原因分析与解决方案 在使用 Vue3Vite 构建项目时,如果发现打包后的图片无法正常加载,通常是因为资源路径未被正确处理或缺少必要的配置。以下是可能原因及对应的解决方案: #### 1. 资源导入方式错误 当通过 `import` 或 `<img>` 标签引入静态资源时,如果没有按照 Vite 的约定放置文件,则可能导致图片路径解析失败。 - **推荐做法**: 将所有静态资源放在项目的 `public` 文件夹下[^1]。 如果图片位于 `public/images/logo.png` 中,在模板中可以直接引用 `/images/logo.png`。 - 对于非公共资源(如组件内的图标),可以将其放入 `src/assets` 并通过模块化的方式引入: ```javascript import logo from &#39;./assets/logo.png&#39;; ``` #### 2. 配置项缺失 Vite 默认会自动复制某些类型的资产到构建输出目录。可以通过调整 `vite.config.js` 来确保这些资源能够被打包并正确映射。 - 添加 `assetsInclude` 属性来指定额外需要包含的文件类型: ```javascript export default { build: { assetsInclude: [&#39;**/*.png&#39;, &#39;**/*.jpg&#39;], // 明确声明要包含的图片格式 }, }; ``` - 使用 Rollup 插件进一步自定义行为,例如设置别名或将特定文件移动至目标位置: ```javascript import { defineConfig } from &#39;vite&#39;; export default defineConfig({ resolve: { alias: { &#39;@&#39;: &#39;/src&#39;, }, }, build: { rollupOptions: { output: { assetFileNames: (assetInfo) => { const info = assetInfo.name.split(&#39;.&#39;); if (/png|jpe?g|gif|svg/.test(info[info.length - 1])) { return `static/img/[name].[hash][extname]`; } return `static/[name].[hash][extname]`; }, }, }, }, }); ``` #### 3. Electron 环境下的特殊问题 对于基于 Electron 的应用,可能存在运行时环境差异导致的路径冲突。例如,Node.js 原生模块中的变量未正确定义会引发异常(如 `sys is not defined`)。虽然此情况主要涉及 TypeScript 编译器插件的问题[^2],但它也可能间接影响其他依赖链路。 因此建议验证以下几点: - 更新所有核心库版本以获得最新修复补丁; - 清理旧缓存数据重新执行安装流程 (`npm cache clean --force && npm i`)。 --- ### 总结 针对 Vue3 + Vite 项目打包过程中遇到的图片丢失现象,应优先确认资源存储结构是否遵循框架标准;其次检查是否有遗漏的关键选项需补充至配置文件之中;最后考虑跨平台兼容性带来的潜在干扰因素加以排除即可有效解决问题。 ```html <img src="/images/logo.png" alt="Logo"> <!-- public 下 --> <img :src="logoPath" alt="Dynamic Logo"> <!-- 动态绑定路径 --> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值