vue 引入图片的问题

news2024/11/25 15:42:12

文章目录

  • 为什么使用require
  • 自己讲解
    • 实例 - src下 - img
      • 验证
    • 实例 - public下 - 绝对路径 - img
      • 报错,其中 imgurl5、imgurl6 找不到资源!
        • 个人猜想:
      • 去掉 imgurl5、imgurl6 再次运行(开发环境):
      • 去掉 imgurl5、imgurl6 再次运行(生产环境):
      • 发现 /static 这种写法生产环境并不正确
        • 个人猜想(望读者指点迷津)
    • 实例 - public下 - 相对路径 - img
    • 结论
    • 实例 - public下 - 背景
      • 报错 bg2 的图片找不到
      • 去掉 bg2 再次运行(开发环境):
      • 去掉 bg2 再次运行(生产环境):
    • 最后一个难以理解的
      • 个人猜想(望读者指点迷津)

为什么使用require

require 是 node 中的一个方法:他的作用是 “用于引入模块、 JSON、或本地文件”。

我们使用 require 来引入一个图片文件,require 返回的就是用于引入的图片(npm 运行之后图片的编译路径),而如果使用字符串的话,那么则是一个 string 类型的固定字符串路径。

src 中引入的图片应该为图片的本身路径(相对路径或者绝对路径),而 vue 项目通过 webpack 的 devServer 运行之后,默认的 vue-cli 配置下,图片会被打包成 name.hash 的图片名,在这种情况下,如果我们使用固定的字符串路径则无法找到该图片,所以需要使用 require 方法来返回图片的编译路径。

参考文章:vue中引入图片为什么使用require

这里先给读者看看菜鸟的目录结构,不然不知道菜鸟路径是什么!

在这里插入图片描述

自己讲解

上面的用人话说:

1、如果路径直接写在 html 中,那么编译结果就是引入图片的路径。
2、如果把路径通过 字符串 复制给了 js 的变量,再由变量 动态绑定到 src ,那么对于编译结果来说,src 就是一个固定的字符串,而非图片路径,但是此时路径已经变化,并不是你传入的那个固定字符串!

实例 - src下 - img

例子:

<template>
  <div>
    <img src="../assets/imgs/wudu/du1.png" />
    <img :src="imgurl" />
    <img :src="imgurl2" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      imgurl: "../assets/imgs/wudu/du2.png",
      imgurl2: require("../assets/imgs/wudu/du2.png"),
    };
  },
};
</script>

结果(开发环境):
在这里插入图片描述
结果(生产环境):
在这里插入图片描述

验证

这里验证了上述第二个结论!

实例 - public下 - 绝对路径 - img

例子:

<template>
  <div>
    <img src="../assets/imgs/wudu/du1.png" />
    <img :src="imgurl" />
    <img :src="imgurl2" />

    <img :src="imgurl3" />
    <img :src="imgurl4" />
    <img :src="imgurl5" />
    <img :src="imgurl6" />
    <img src="static/imgs/start.png" />
    <img src="/static/imgs/start.png" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      imgurl: "../assets/imgs/wudu/du2.png",
      imgurl2: require("../assets/imgs/wudu/du2.png"),

      imgurl3: "static/imgs/start.png",
      imgurl4: "/static/imgs/start.png",
      imgurl5: require("static/imgs/start.png"),
      imgurl6: require("/static/imgs/start.png"),
    };
  },
};
</script>

报错,其中 imgurl5、imgurl6 找不到资源!

原因:public 底下的文件不会走 require !
在这里插入图片描述

参考文章:Vue中动态引入图片要是require的原因解析

菜鸟看了一下,感觉这里解释不明不白,菜鸟其实也不懂,为什么 require(“static/imgs/start.png”) 、require(“/static/imgs/start.png”) 不行,但是下面的require(“…/…/public/static/imgs/start.png”) 又可以,望读者指点迷津

个人猜想:

如果webpack编译器看到 …/ 就会直接去编译,没有,则会看是不是public底下的,是的就不编译!

去掉 imgurl5、imgurl6 再次运行(开发环境):

在这里插入图片描述

去掉 imgurl5、imgurl6 再次运行(生产环境):

在这里插入图片描述

发现 /static 这种写法生产环境并不正确

原因: 因为引入的是public下面的资源,所以不会被webpack编译,所以打包后还是 /static 这种写法,这种写法是通过绝对路径访问!而 static 就相当于 ./static !

那为什么开发环境可以运行呢?

个人猜想(望读者指点迷津)

菜鸟感觉是开发环境的时候,编译后会自动将其部署到一个虚拟服务器上,然后根路径就是该项目,所以根路径、相对路径都可以直接访问!

实例 - public下 - 相对路径 - img

<template>
  <div>
    <img :src="imgurl3" />
    <img :src="imgurl4" />
    <img src="../../public/static/imgs/start.png" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      imgurl3: "../../public/static/imgs/start.png",
      imgurl4: require("../../public/static/imgs/start.png"),
    };
  },
};
</script>

结果(开发环境):
在这里插入图片描述
结果(生产环境):
在这里插入图片描述

结论

建议不管什么时候都使用 相对路径 进行书写,及:…/ 或者 static,即使其在 public 中而导致路径很长

实例 - public下 - 背景

<template>
  <div>
    <div class="bg" :style="getBg"></div>
    <div
      class="bg"
      :style="{ backgroundImage: `url(${backgroundimgurl})` }"
    ></div>
    <div class="bg bg2"></div>
    <div class="bg bg3"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      backgroundimgurl: "static/imgs/start.png",
    };
  },
  computed: {
    getBg() {
      return { backgroundImage: `url(static/imgs/start.png)` };
    },
  },
};
</script>

<style scoped>
.bg {
  width: 200px;
  height: 100px;
  background-size: 100% 100%;
}
.bg2 {
  background-image: url("static/imgs/start.png");
}
.bg3 {
  background-image: url("../../public/static/imgs/start.png");
}
</style>

报错 bg2 的图片找不到

原因:
在这里插入图片描述
参考:Vue处理静态资源:public、assets目录

去掉 bg2 再次运行(开发环境):

在这里插入图片描述

去掉 bg2 再次运行(生产环境):

在这里插入图片描述

最后一个难以理解的

上面说过 bg2 这样写

.bg2 {
  background-image: url("static/imgs/start.png");
}

找不到,但是按照这样写又可以

.bg2 {
  background-image: url("/static/imgs/start.png");
}

这样写就和上面介绍的一样,只能开发环境使用,生产环境不行!

个人猜想(望读者指点迷津)

菜鸟感觉是处理 styles 有特殊处理,就是如果是绝对路径,则不进行 webpack 编译!

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

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

相关文章

EF Core Build failed. Use dotnet build to see the errors.

Build failed. Use dotnet build to see the errors. 今天学习abp框架用到EF Code First时&#xff0c;报出上述错误。 在网上查了很多资料。 dotnet build D:\Practice\abp\SourceCode\BookStore\src\Acme.BookStore.EntityFrameworkCore\Acme.BookStore.EntityFrameworkCor…

Stable Diffusion webui安装使用

参考&#xff1a; https://stability.ai/blog/stable-diffusion-public-release https://github.com/AUTOMATIC1111/stable-diffusion-webui 安装&#xff08;6g显存&#xff09; 1、conda创建python 3.10.6环境 conda create -n stable-diffusion pythonpython 3.10.6 也安装…

【axios】axios的完整配置

注意&#xff1a;本文实例化为TS版 1、axios概念 axios 是一个基于 promise 封装的网络请求库&#xff0c;它是基于 原生XHR 进行二次封装&#xff0c;可以说是 XHR 的一个子集&#xff0c;而 XHR 又是 Ajax 的一个子集 特点 从浏览器中创建 XMLHttpRequests从 node.js 创建…

C/CPP安装pthread教程;#include<pthread.h>无法引入该文件的解决方法;引入pthread后报错

在开发c及cpp的多并发程序时&#xff0c;常常会用到pthread.h头文件&#xff0c;但是pthread是需要自行安装的&#xff0c;下面就是在Windows平台使用Visual Studio安装pthread的教程。 1.下载并解压pthread库 在POSIX Threads for Windows - Browse Files at SourceForge.ne…

Unity 四元数

前言&#xff1a;在场景中&#xff0c;可以用旋转工具改变物体角度&#xff0c;也可以在Inspector窗口中改变物体的X、Y、Z值&#xff08;欧拉角&#xff09;来改变物体角度。 虽然用欧拉角表示角度和旋转&#xff0c;但一般人想不到&#xff0c;物体在三维空间的旋转并不是一…

TouchGFX开发(3)----触摸屏幕组件点亮LED

TouchGFX开发.3----触摸屏幕组件点亮LED 概述生成例程配置时钟树开启调试接口移植SSD1306配置调试开启TouchGFX设置屏幕刷新率配置TouchGFXTouchGFX代码配置编译实际效果 概述 TouchGFX是一种先进的软件框架&#xff0c;用于开发嵌入式图形界面(GUI)。借助其特性&#xff0c;…

一个非奇异快速终端滑模控制(NTSM)实例及仿真

一、被控对象 考虑这么一个被控对象 J θ ( t ) u ( t ) d ( t ) J \ddot\theta(t) u(t) d(t) Jθ(t)u(t)d(t) 其中&#xff0c; J J J 为转动惯量&#xff0c; θ \theta θ 为角度&#xff0c; u u u 为控制量&#xff0c; d d d 为扰动&#xff0c;且 d ( t ) < …

vue diff算法与虚拟dom知识整理(7) 根据init.ts源码简单梳理patch都做了些什么

之前我们也见证了 diff算法 的强大 但他 只有确认是同一个节点才做对比 如果不是就直接暴力拆卸了 我们打开我们的案例 找到 node_modules 下面的snabbdom/src下面的 init.ts文件 init.ts 拉到最下面 我们就可以看到这个返回的patch函数 patch相比于他的功能 代码算比较少的…

LeetCode高频算法刷题记录1

文章目录 1. 无重复字符的最长子串【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 反转链表【简单】2.1 题目描述2.2 解题思路2.3 代码实现 3. LRU 缓存【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 数组中的第K个最大元素【中等】4.1 题目描述4.2 解题思路4.3 代码实现…

吴恩达OpenAI最新课程:prompt-engineering-for-developers读书笔记

文章目录 一、前言二、Prompt编写原则2.1 环境配置2.2 编写清晰、具体的指令2.2.1 使用分隔符2.2.2 结构化输出&#xff08;JSON、HTML等&#xff09;2.2.3 要求模型检查条件是否满足2.2.4 提供少量示例&#xff08;Few-shot Prompting&#xff09; 2.3 指导模型思考2.3.1 指定…

未来工业维护:探索数据分析与机器学习的融合之路

随着工业领域相关技术的不断发展&#xff0c;预测性维护作为一种先进的维护策略&#xff0c;正日益受到企业的重视。预测性维护的核心目标是通过准确预测设备故障的发生时间&#xff0c;实现及时维护和优化生产效率。而在实现这一目标的过程中&#xff0c;数据分析和机器学习的…

FreeRTOS:任务状态和信息查询

目录 一、任务相关 API函数预览二、任务相关API函数详解2.1uxTaskPriorityGet()2.2vTaskPrioritySet()2.3uxTaskGetSystemState() ※※※※※2.4vTaskGetInfo() ※※※※※2.5xTaskGetApplicationTaskTag()2.6xTaskGetCurrentTaskHandle()2.7xTaskGetHandle()2.8xTaskGetIdleTa…

教你用JMeter做接口测试的几个简单实例

目录 前言 1、登录&#xff08;POST&#xff09; 登录 2、获取学生信息&#xff08;GET&#xff09; 获取学生信息 3、添加学生信息&#xff08;POST&#xff0c;JSON&#xff09; 添加学生信息 4、学生充值金币&#xff08;POST&#xff0c;Cookie&#xff09; 学生金…

【Linux】11. 进程控制

小实验(谨慎测试) 1. 进程退出码的引出 2. 进程码的使用 3. 进程退出 3.1 进程退出情况 进程退出分三种情况&#xff1a; 1.代码运行完毕&#xff0c;结果正确 – return 0; 2.代码运行完毕&#xff0c;结果不正确 – 根据退出码判断错误情况 3.代码没有运行完毕&#xff0c;…

如何0基础自学黑客(网络安全)技术,万字长文教你如何学习黑客(网络安全)

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而…

【数字化转型-06】数字化转型咨询项目中如何做好高层访谈

咨询项目中少不了至关重要的一步&#xff0c;那就是高层访谈&#xff0c;做好高层访谈&#xff0c;对于咨询项目至关重要&#xff0c;我们接触的维度越高&#xff0c;就会越能把控项目的真实意图&#xff0c;有的放矢&#xff0c;不会让下面的人带偏&#xff1b;另一方面我们也…

Vue3 使用 Ts 泛型 封装本地存储

前期回顾 NVM —— 你把我玩明白_彩色之外的博客-CSDN博客本文将学习 使用 NVM 管理node版本https://blog.csdn.net/m0_57904695/article/details/130670262?spm1001.2014.3001.5501 目录 新建 \src\utils\storage-utils.ts 使用 泛型示例 泛型交换变量 泛型 strin…

在Linux系统中用vim编写第一个C语言之gcc编译器

文章目录 在Linux系统中用vim编写第一个C语言HelloWorld第一步 创建第二步 编写第三步&#xff0c;编译第四步 运行 gcc四步骤gcc常用选项 在Linux系统中用vim编写第一个C语言HelloWorld 第一步 创建 vim HelloWorld.c第二步 编写 #include<stdio.h>int main(){printf(…

Android Jsoup爬取网页数据及其局限性,接口爬取数据的思路

1.Jsoup jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 需求是需要获取某个网站上的排行榜数据&#xff0c;用作App展示&am…

【axios】后端未收到前端post传参

今天遇到过问题&#xff0c;前端post请求参数明明已经传过去了&#xff0c;可是后端说没收到&#xff0c;不知道后端大哥是不是故意搞我。 代码前端图如下↓ 代码 import axios from axios //对象形式 const val {pass:123,user:name}axios.post(/api/login, val).then(res>…