Vue 图片引用方式详解:静态资源与动态路径访问

目录

  • 前言
  • 1. 引用 public/ 目录
  • 2. assets/ 目录
  • 3. 远程服务器
  • 4. Vue Router 动态访问
  • 5. 总结
  • 6. 扩展(图片不显示)

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

在 Vue 开发中,图片的引用方式主要取决于图片存放的位置,常见的存放方式包括:

  1. 存放在 public/ 目录
  2. 存放在 assets/ 目录
  3. 存放在远程服务器
  4. 动态拼接图片路径

本文将详细分析这些方式的区别,并提供完整的代码示例和注释

1. 引用 public/ 目录

public/ 目录下的文件会被 Vue 直接映射到项目的根路径 /,无需 Webpack 处理,适用于:

  1. 不会被打包处理的静态资源
  2. 图片 URL 确定,不依赖 Webpack 解析

✅ 正确写法

<template>
  <div>
    <!-- 直接从 public 目录访问图片 -->
    <img src="/manufacturing.png" alt="Manufacturing Image" />
  </div>
</template>

❌ 错误写法

<template>
  <div>
    <!-- public 目录不需要 public/ 前缀 -->
    <img src="/public/manufacturing.png" alt="Error Image" />
  </div>
</template>

说明: public/ 目录的内容会被 Vue 直接映射到根路径 /,所以访问 /public/xxx.png 是错误的

截图如下:

在这里插入图片描述

2. assets/ 目录

适用场景
assets/ 目录下的图片会被 Vue 通过 Webpack 进行打包,适用于:

  1. 存放在 src/assets/ 目录
  2. 需要 Webpack 处理,如哈希命名
  3. 图片路径动态变化

✅ 使用 import 方式

<script setup>
import imageUrl from '@/assets/images/manufacturing.png'
</script>

<template>
  <div>
    <img :src="imageUrl" alt="Manufacturing Image" />
  </div>
</template>

说明:
import 方式会将图片路径解析为 Webpack 处理的 URL
适用于静态导入,但不适用于动态路径拼接

✅ 使用 new URL() 方式

<script setup>
const imageSrc = new URL('@/assets/images/manufacturing.png', import.meta.url).href
</script>

<template>
  <div>
    <img :src="imageSrc" alt="Manufacturing Image" />
  </div>
</template>

说明:
new URL() 适用于 assets 目录,支持动态路径处理

3. 远程服务器

适用场景

  1. 图片存放在 CDN 或外部服务器
  2. 不需要 Webpack 处理
<template>
  <div>
    <img src="https://example.com/images/manufacturing.png" alt="Remote Image" />
  </div>
</template>

说明:
直接使用绝对 URL 访问远程图片,无需 Vue 处理

4. Vue Router 动态访问

图片名称与路由路径相关联,可以使用 computed 计算属性自动生成图片路径

<template>
  <div>
    <img :src="imageSrc" alt="Dynamic Page Image" />
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router'
import { computed } from 'vue'

const route = useRoute()

// 计算 public 目录下的图片路径
const imageSrc = computed(() => {
  const sanitizedPath = route.path.replace(/^\//, '') // 移除开头的 `/`
  return `/${sanitizedPath}.png` // 访问 public 目录
})
</script>

假设 public 目录结构如下:

public/
├── home.png
├── about.png
├── contact.png

访问 /home 时,图片路径为:

<img src="/home.png" />

动态路由的方式有所差异:

<template>
  <div>
    <img :src="imageSrc" alt="Dynamic Page Image" />
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router'
import { computed } from 'vue'

const route = useRoute()

// 计算 public 目录下的图片路径
const imageSrc = computed(() => {
  const sanitizedPath = route.path.replace(/^\//, '') // 移除开头的 `/`
  const lastSegment = sanitizedPath.split('/').pop() // 获取最后的路径部分
  return `/${lastSegment}.png` // 访问 public 目录
})
</script>

截图如下:

在这里插入图片描述

5. 总结

总的来说:

存放位置适用场景访问方式代码示例
public/直接访问,无需 Webpack 处理/filename.png<img src="/manufacturing.png" />
assets/需要 Webpack 处理import 或 new URL()import img from '@/assets/image.png'
远程服务器图片在外部服务器/CDN绝对 URL<img src="https://example.com/image.png" />
动态路由根据 Vue Router动态生成图片路径computed 计算属性 :src=“computedPath”

最佳实践:

  1. public/ 目录适用于静态资源,直接使用 /filename.png 访问
  2. assets/ 目录适用于 Webpack 处理,使用 import 或 new URL()
  3. 外部图片直接使用绝对 URL
  4. 动态图片路径可结合 Vue Router 计算生成

6. 扩展(图片不显示)

图片无法显示通常是路径错误、资源未正确加载或 Webpack/Vite 处理导致的问题

图片不显示的常见原因
在 Vue 3 + Vite(或 Webpack)项目中,图片可能无法显示的常见原因包括:

  1. 路径错误:引用 public/ 目录时仍加 public/ 前缀
  2. 资源未正确加载:如 src/assets/ 目录下的图片未被 Webpack 处理
  3. 动态路径问题:使用 computed 计算属性拼接路径时错误
  4. Webpack 处理方式:assets/ 目录下的图片会被 Webpack 处理,不能直接访问
  5. 图片格式或大小问题:浏览器不支持的图片格式或图片损坏

路径错误这个要点此处着重分析下
详细分析下为何要放在public等路径下!

public/ 目录的映射机制
在 Vue 项目结构中:

my-project/
├── public/
│   ├── manufacturing.png
│   ├── images/
│   │   ├── factory.png
├── src/
│   ├── views/
│   │   ├── Industry.vue
│   ├── assets/
│   │   ├── example.png
│   ├── App.vue

public/manufacturing.png 在构建后会被 Vue 直接映射到:/manufacturing.png
public/images/factory.png 在构建后会变成:/images/factory.png
src/assets/example.png 则会被 Webpack 处理,并生成动态路径(如 /assets/example.abcdef.png)

如何证明 public/ 目录直接映射到根路径 /?
可以打开 http://localhost:5173/manufacturing.png,如果 manufacturing.png 直接显示,则说明它已经被映射到根目录 /,而不需要 /public/manufacturing.png

对比 public/ 和 src/assets/

存放目录是否被 Webpack 处理访问方式适用场景
public//filename.png
src/assets/import 或 new URL()

✅ 使用 public/ 目录

<template>
  <div>
    <img src="/manufacturing.png" alt="Manufacturing Image" />
  </div>
</template>

✅ 使用 src/assets/ 目录

<script setup>
import imgUrl from '@/assets/example.png'
</script>

<template>
  <div>
    <img :src="imgUrl" alt="Example Image" />
  </div>
</template>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象

2.18 对象数组&#xff1a;在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

pstricks PGFTikz 在CTeX套装中绘图Transparency或Opacity失效的问题

我在CTeX中画图的时候&#xff0c;习惯用Geogebra先画好&#xff0c;然后生成pstricks或PGFTikz代码&#xff1a; 这样不用插入eps或pdf之类的图片&#xff0c;也是一种偷懒的方法。以前往arXiv.org上面传论文也是这样&#xff1a;代码出图&#xff0c;就不用另外上传一幅eps或…

deepseek 本地化部署和小模型微调

安装ollama 因为本人gpu卡的机器系统是centos 7, 直接使用ollama会报 所以ollama使用镜像方式进行部署&#xff0c; 拉取镜像ollama/ollama 启动命令 docker run -d --privileged -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 查看ollama 是否启动…

Java_类加载器

小程一言类加载器的基础双亲委派模型核心思想优势 各类加载器的职责 类加载器的工作流程举例&#xff1a;如何在Java中使用类加载器启动类加载器、扩展类加载器与系统类加载器输出解释自定义类加载器 类加载器与类冲突总结 小程一言 本专栏是对Java知识点的总结。在学习Java的过…

Baklib推动数字化内容管理解决方案助力企业数字化转型

内容概要 在当今信息爆炸的时代&#xff0c;数字化内容管理成为企业提升效率和竞争力的关键。企业在面对大量数据时&#xff0c;如何高效地存储、分类与检索信息&#xff0c;直接关系到其经营的成败。数字化内容管理不仅限于简单的文档存储&#xff0c;更是整合了文档、图像、…

【ComfyUI专栏】如何为ComfyUI工作流写上节点名称与顺序

有些朋友可能在网上看到视频的时候能够看到所有的节点都是按照顺序进行排列,我们可以看到当前节点顺序,也能够看到当前的节点的名称是什么? 这个其实并不是默认设置,也不是ComfyUI本身的设置,而是在Manager 节点,在Manager节点设置中有个标签设置。 这里标签设置有如下的…

Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法

Med-R2 : Crafting Trustworthy LLM Physicians through Retrieval and Reasoning of Evidence-Based Medicine Med-R2框架Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么How - 1. 前人研究的局限性How - 2. 你的创新方法/视角How - 3. 关键数据支持How - 4. 可…

【实践案例】基于大语言模型的海龟汤游戏

文章目录 项目背景提示词构建海龟汤主持人真相判断专家 具体实现流程文心一言大语言模型“海龟汤”插件参考 项目背景 “海龟汤”作为一种聚会类桌游&#xff0c;又称情境推理游戏&#xff0c;是一种猜测情境还原事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件&…

探秘Linux IO虚拟化:virtio的奇幻之旅

在当今数字化时代&#xff0c;虚拟化技术早已成为推动计算机领域发展的重要力量。想象一下&#xff0c;一台物理主机上能同时运行多个相互隔离的虚拟机&#xff0c;每个虚拟机都仿佛拥有自己独立的硬件资源&#xff0c;这一切是如何实现的呢&#xff1f;今天&#xff0c;就让我…

栈(5题)

目录 1.删除字符串中的所有相邻重复项 2.比较含退格的字符串 3.基本计算器2 4.字符串解码 5.验证栈序列 1.删除字符串中的所有相邻重复项 1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 我们只需要用一个string的字符串模拟一下这个栈就可以…

33.Word:国家中长期人才发展规划纲要【33】

目录 NO1.2样式​ NO3​ 图表 ​ NO4.5.6​ 开始→段落标记视图→导航窗格→检查有无遗漏 NO1.2样式 F12/另存为&#xff1a;Word.docx&#xff1a;考生文件夹样式的复制样式的修改 样式的应用&#xff08;没有相似/超级多的情况下&#xff09;——替换 [ ]通配符&#x…

麦芯 (MachCore) 应用开发教程 6:一台设备中多台电脑主从机的设置

麦芯是构建在windows系统上的设备应用操作系统&#xff0c;利用该系统可以快速高效的开发一款设备专用软件。希望进一步了解请email: acloud163.com 黄国强 2025/02/03 在麦芯&#xff08;MachCore&#xff09;应用开发过程中&#xff0c;多机协同工作的场景十分常见&#xf…

GRE阅读双线阅读 --青山学堂GRE全程班 包括 阅读、数学、写作、填空、背单词

新版GRE考试整体结构 section题量时间写作1篇issue30min语文S112道题(7道填空5道阅读)18min数学S112道题21min语文S215道题(7道填空8道阅读)23min数学S215道题26min Tips: 写作结束后&#xff0c;语文和数学的顺序不固定&#xff0c;2中可能&#xff1a; issue -> V ->…

014-STM32单片机实现矩阵薄膜键盘设计

1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘&#xff0c;当按下按键后OLED显示屏上会对应显示当前的按键键值&#xff0c;可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线 模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘…

浅谈《图解HTTP》

感悟 滑至尾页的那一刻&#xff0c;内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂&#xff0c;但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说&#xff0c;《图解HTTP》适合作为第一本网络协议书。确实&#xff0c;它就像一座桥梁&#xff0c;连接…

Android学习制作app(ESP8266-01S连接-简单制作)

一、理论 部分理论见arduino学习-CSDN博客和Android Studio安装配置_android studio gradle 配置-CSDN博客 以下直接上代码和效果视频&#xff0c;esp01S的收发硬件代码目前没有分享&#xff0c;但是可以通过另一个手机网络调试助手进行模拟。也可以直接根据我的代码进行改动…

使用mybatisPlus插件生成代码步骤及注意事项

使用mybatisPlus插件可以很方便的生成与数据库对应的PO对象&#xff0c;以及对应的controller、service、ImplService、mapper代码&#xff0c;生成这种代码的方式有很多&#xff0c;包括mybatis-plus提供的代码生成器&#xff0c;以及idea提供的代码生成器&#xff0c;无论哪一…

FFmpeg(7.1版本)在Ubuntu18.04上的编译

一、从官网上下载FFmpeg源码 官网地址:Download FFmpeg 点击Download Source Code 下载源码到本地电脑上 二、解压包 tar -xvf ffmpeg-7.1.tar.xz 三、配置configure 1.准备工作 安装编译支持的软件 ① sudo apt-get install nasm //常用的汇编器,用于编译某些需要汇编…

CMake的QML项目中使用资源文件

Qt6.5的QML项目中&#xff0c;我发现QML引用资源文件并不像QtWidgets项目那样直接。 在QtWidgets的项目中&#xff0c;我们一般是创建.qrc​资源文件&#xff0c;然后创建前缀/new/prefix​&#xff0c;再往该前缀中添加一个图片文件&#xff0c;比如&#xff1a;test.png​。…