vue打包后,图片不显示,img路径404

本文详细解析了Vue项目在打包后图片无法显示的问题,主要原因是webpack更改了图片引用路径。阐述了不同场景下图片引入方式的变化,并提供了解决方案,包括修改配置文件以确保正确路径。

vue打包后,背景图片不显示了

遇到的问题:开发时图片好好的,打包后,图片不显示,如下图,转盘背景图没有了:
在这里插入图片描述
首先,说一下项目里图片引入的三种方式:

  1. 在页面中,通过<img src=''>路径"属性;
  2. 在css文件中,通过背景图片的url('路径')引入图片;
  3. 在js中通过require('路径')引入图片;

造成图片找不到的原因主要是:webpack打包以后,生成一个目录/static和一个index.html文件,会改变这几种图片引入的路径。

具体改变如下:
  • 在页面中和js中,改变是一样的,直接将路径直接改为‘static/img/XXX.png’,所以,如果是在页面中或者js中引入的图片,正常打包后,没有问题正常显示;
//.wheel-pointer {
//  background: url("../../assets/img/draw_btn.png") no-repeat center top;
//}
//打包后如下:
.wheel-pointer[data-v-bb1116d8] {
    background: url(../../static/img/draw_btn.f43e809.png) no-repeat top;
}
  • 在css中,是将路径中的文字路径替换为‘static/img’,这样替换一定会出现问题,因为在打包好的文件中就只有两层目录‘../../’就不知道返回到什么目录下面去了;
    注意url中的路径改变,图片展示如下,
    – 打包前的样式:
    打包前的样式
    – 打包后的样式
    打包后的样式

其原理就是不管哪种方式都去static/img下寻找图片。
在这里插入图片描述

解决方案

在这里插入图片描述
build/utils.js中添加好参数保存后,重新打包上传到服务器,再运行图片就出现了:
在这里插入图片描述
该文章为记录自己遇到的问题所用,如果有什么错误,欢迎指出。
【补充】:
遇到问题:打包后的路径少了一层项目名,导致404
解决方法:在config/index.js下的build里,修改assetsPublicPath: '/确实的路径name/'
参考链接:https://blog.youkuaiyun.com/qq_30346089/article/details/77947998
在打包即可

### Vue3 + Vite 打包图片显示的原因分析与解决方案 在使用 Vue3 和 Vite 构建项目时,如果发现打包后的图片无法正常加载,通常是因为资源路径未被正确处理或缺少必要的配置。以下是可能原因及对应的解决方案: #### 1. 资源导入方式错误 当通过 `import` 或 `<img>` 标签引入静态资源时,如果没有按照 Vite 的约定放置文件,则可能导致图片路径解析失败。 - **推荐做法**: 将所有静态资源放在项目的 `public` 文件夹下[^1]。 如果图片位于 `public/images/logo.png` 中,在模板中可以直接引用 `/images/logo.png`。 - 对于非公共资源(如组件内的图标),可以将其放入 `src/assets` 并通过模块化的方式引入: ```javascript import logo from './assets/logo.png'; ``` #### 2. 配置项缺失 Vite 默认会自动复制某些类型的资产到构建输出目录。可以通过调整 `vite.config.js` 来确保这些资源能够被打包并正确映射。 - 添加 `assetsInclude` 属性来指定额外需要包含的文件类型: ```javascript export default { build: { assetsInclude: ['**/*.png', '**/*.jpg'], // 明确声明要包含的图片格式 }, }; ``` - 使用 Rollup 插件进一步自定义行为,例如设置别名或将特定文件移动至目标位置: ```javascript import { defineConfig } from 'vite'; export default defineConfig({ resolve: { alias: { '@': '/src', }, }, build: { rollupOptions: { output: { assetFileNames: (assetInfo) => { const info = assetInfo.name.split('.'); 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、付费专栏及课程。

余额充值