vue打包后el-image图片不出来

结论:
publicPath:"/"解决,不能设置相对路径。

环境

可能相关的环境:

  • vue-cli5.0
  • vue3
  • vue-router4

可能的原因

  • publicPath:“./”
  • 路由history
  • 路由base

现象

图片异常
  • img部分图片被转换成了base64可以出来
  • style里url("~@/assets/img/xxx.webp")可以出来
  • img部分图片使用路径也加载不出来
  • el-image引用的图片报错,也加载不出来
跳转异常
  • 路由跳转失败
  • 对应有一个304xxx.js的文件加载失败
排查
  • 以上失败原因都是路径错误,加载路径变成了http://127.0.0.1:8080/plat/static/img,正确的应该是在根目录http://127.0.0.1:8080/static/img,但我路由也没设置base。本来应该在根目录下的,这个路径就成了在plat文件夹下,那肯定是加载不到。
  • index.html<%= BASE_URL %>favicon.ico变成了favicon.ico,也就是说<%= BASE_URL %>是空的,本来期待值应该是./,其他引入的js也是static/js/,肯定是publicPath出问题。
  • 尝试了publicPath: '././'这种配置,<%= BASE_URL %>还是空的,打包的js文件是正确了./static/js/xxx,但图片还是错的。app.js里路径是a.p+"static/img/xxx",这个肯定是跟<%= BASE_URL %>是一致的。
  • 尝试publicPath: '/',ok了

如果正式环境不是把资源放到cdn,直接不设置publicPath就没问题,默认就是/,我这个是设置了生产环境,测试环境也配置了。
vue-cli4.5的时候不知道没用上这个场景还是没问题,我懒得回退,之前都是生产环境用./

vuecli官网-静态资源这块讲的听明白的。

  1. 图片不要放在public下,不会被webpack处理,把js静态文件放到public下。
  2. <%= BASE_URL %>vue-cli3以后使用的,js静态文件放到public下的,前面的引用路径可以用这个,也可以直接写./or /
  3. 当前./都被取代成空了,所以不管是怎么变化,最后<%= BASE_URL %>得到的是空的。
  4. 图片资源8kb以下转base64,更大的图片还是引用路径,即小于 8KiB 的资源内联,以减少 HTTP 请求的数量,可以通过 chainWebpack 调整内联文件的大小限制。
  5. el-image中存在动态加载不更新问题,静态加载没问题。使用require后面更改后路径不会被更新,得用变量或computed。模块在第一次加载后会运行一次,然后将运行结果缓存到内存里,后面都是直接读取缓存的值。所以编译时直接转字符串,后面不会改变了。

vuecli的URL 转换规则

  • 如果 URL 是一个绝对路径 (例如 /images/foo.png),它将会被保留不变。
  • 如果 URL 以 . 开头,它会作为一个相对模块请求被解释且基于你的文件系统中的目录结构进行解析。
  • 如果 URL 以 ~ 开头,其后的任何内容都会作为一个模块请求被解析。
  • 如果 URL 以 @ 开头,它也会作为一个模块请求被解析。它的用处在于 Vue CLI 默认会设置一个指向 /src 的别名 @。(仅作用于模版中)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译 1、下载Jetson BSP包和交叉编译环境 地址&#xff1a;https://developer.nvidia.com/embedded/jetson-linux-archive下载需要版本即可&#xff0c;此次编译采用32.4.2版本 需要下载的文件如下&#xff1a; 2、新建一个文件…

React 列表和键

React 列表和键 大家好&#xff0c;在这一课中&#xff0c;我们将学习如何在 React 中创建和渲染列表。我们还将学习如何使用键来优化列表的性能。 创建列表 我们可以使用 JavaScript 的 map() 方法来创建列表。 const numbers [1, 2, 3, 4, 5]; const listItems numbers…

算法:对称二叉树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、问题描述 二、递归算法 三、字符串判断法 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、问题描述 有一棵二叉树&#xff0…

LeetCode(66)二叉树的最大深度【二叉树】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 二叉树的最大深度 1.题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7]…

js获取对象数组中重复项的个数并排序,js数组对象筛选出重复数据 并计算 重复了几次

js数组对象筛选出重复数据 并计算 重复了几次 例如&#xff1a; 把以下数据 let arr [{kuaidizhandian:顺丰快递},{kuaidizhandian:邮政快递},{kuaidizhandian:顺丰快递} ]转换为 kuaidarr [{kuaidizhandian:顺丰快递,num&#xff1a;2},{kuaidizhandian:邮政快递,num&…

显示所有已连接的网络连接信息

ECHO OFF & setlocal enabledelayedexpansion TITLE 显示所有已连接的网络连接信息 mode con: cols80 lines30 CALL :get_NIC_info pause>nul EXIT /B 0:get_NIC_info SET "_i_0"ECHO 所有已连接的网络连接信息&#xff08;未插网线不会显示在下方&#xff09…

Python类调用实例方法

在 Python 的类体中定义的方法默认都是实例方法&#xff0c;通过对象来调用实例方法。 但要提醒大家的是&#xff0c;Python 的类在很大程度上是一个命名空间&#xff0c;当程序在类体中定义变量、方法时&#xff0c;与前面介绍的定义变量、定义函数其实并没有太大的不同。对比…

解析神器Xpath详解+实战

解析神器Xpath详解实战 有同学说&#xff0c;我正则用的不好&#xff0c;处理HTML文档很累&#xff0c;有没有其他的方法&#xff1f; 有&#xff01;那就是XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 目标&am…

微信小程序怎样给事件传值的

微信小程序怎样给事件传值的&#xff1f; 通过自定义属性传值通过事件对象传值 通过自定义属性传值 通过自定义属性传值&#xff1a; 在触发事件的组件上&#xff0c;可以通过自定义属性将需要传递的值绑定到事件对象上。在事件处理函数中&#xff0c;通过event.currentTarget.…

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串 解法1 拼接字符串-掐头去尾后判断是否含有原字符串解法2 KMP——重复子串的最小单位是这个字符串里的最长相等前后缀所不包含的子串解法3 暴力解法KMP ---------------&#x1f388;&#x1f388;题目链接&…

【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【左值&#xff06;左值引用】&…

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

微信小程序使用camera扫码获取相机权限

确保用户隐私指引已经明确使用相机功能 “mp-weixin”: "permission": {"scope.camera": {"desc": "需要使用相机功能&#xff0c;请授权"}}wx.authorize({scope: scope.camera,success(res) {console.log(res, 用户成功授权)// 用户…

C语言实现Hoare版快速排序(递归版)

Hoare版 快速排序是由Hoare发明的&#xff0c;所以我们先来讲创始人的想法。我们直接切入主题&#xff0c;Hoare版快速排序的思想是将一个值设定为key&#xff0c;这个值不一定是第一个&#xff0c;如果你选其它的值作为你的key&#xff0c;那么你的思路也就要转换一下&#xf…

Mysql(事务)

Mysql&#xff08;事务&#xff09; 简介 是什么&#xff1a;一组操作的集合&#xff0c;不分割的工作单位&#xff0c;事务会把所有的操作作为一个整体&#xff0c;向数据库发起操作&#xff0c;要么全部失败要么全部成功。 案例&#xff1a; 银行转账 查询A的余额减少的A的余…

input , change ,blur 事件的区别,以及在vue和react中的表现

原生事件介绍 onInput Event 当一个 , , 或 元素的 value 被修改时&#xff0c;会触发 input 事件 onChange Event 当用户更改 、 和 元素的值时&#xff0c;change 事件在这些元素上触发。和 input 事件不同的是&#xff0c;并不是每次元素的 value 改变时都会触发 change…

SQL 算术运算符

SQL Server中的存储过程 什么是存储过程&#xff1f; 存储过程是一段预先编写好的 SQL 代码&#xff0c;可以保存在数据库中以供反复使用。它允许将一系列 SQL 语句组合成一个逻辑单元&#xff0c;并为其分配一个名称&#xff0c;以便在需要时调用执行。存储过程可以接受参数…

Qt线程池

创建一个类继承自QRunnable&#xff1a; class Thread02 : public QRunnable 重写run方法&#xff1a; void run() override; 在main函数里面加入线程池&#xff1a; Thread02 *th new Thread02();QThreadPool::globalInstance()->start(th); #include <QtCore/QC…

巧妙的使用WPF中的资源

其实&#xff0c;在wpf中&#xff0c;最核心的就是xaml&#xff0c;因为只有xaml&#xff0c;才能体现出用的是wpf&#xff0c;而不是普通的cs文件&#xff0c;cs文件在winform中等等程序都可以使用的&#xff0c;唯独xaml才是wpf中最重要的&#xff0c;最精华的东西&#xff0…

ARM按键中断

do_irq.c 判断中断号 #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {// 获取中断号&#xff0c;根据中断号的不同进行不同的中断处理int irqno;irqno GICC->IAR & 0x3ff;switch (irqno){case 99:…