Vue 引入图片

Vue引入图片

在 Vue 项目中,图片可以存放在 public 和 assets 两个文件夹中,但两者之间存在显著的区别。以下是这两个文件夹存放图片的主要差异:

一、存放位置与处理方式

  • public 文件夹: 存放内容:适合存放那些不需要经过 Webpack 处理的静态资源,如图片、视频、音频等。 处理方式:放在 public 文件夹中的资源,在构建时会被原封不动地复制到 dist 目录中,且可以通过根 URL 直接访问。 路径引用:在 Vue 组件中引用 public 文件夹中的资源时,无需使用 require 或 import,而是直接使用绝对路径(以/开头)或相对路径(相对于根目录)。
  • assets 文件夹: 存放内容:适合存放那些需要作为 Vue 组件一部分的静态资源,如图标、背景图片等。 处理方式:放在 assets 文件夹中的资源,会被 Webpack 处理,如压缩、重命名等,以减少体积并优化加载性能。处理后的资源会被放在 dist 目录的某个子目录中(通常是/img),且其路径在构建后会发生变化。 路径引用:在 Vue 组件中引用 assets 文件夹中的资源时,需要使用相对路径(相对于 src 目录),并通过 require 或 import 来引入。 assets 文件夹下的图片资源动态引入的话需要使用 require

二、访问方式与动态性 public 文件夹

  • 访问方式:由于 public 文件夹中的资源在构建后仍然保持原路径和文件名,因此可以通过绝对路径直接访问
    • 动态性:适合存放那些需要动态加载或频繁更新的资源,如用户上传的图片等。
  • assets 文件夹: 访问方式:由于 assets 文件夹中的资源在构建后路径会发生变化,且被 Webpack 打包成模块,因此不能通过简单的 URL 直接访问。需要通过 Vue 组件中的 requireimport动态引入
    • 动态性:相对较差,因为资源路径在构建后固定,不适合存放需要频繁更新的资源。但适合存放那些不需要变化的图标、背景图片等。 三、适用场景 public 文件夹: 适用于那些需要直接通过 URL 访问的资源,如网站的 Logo、轮播图、广告图等。 适用于那些需要动态加载或频繁更新的资源,如用户头像、商品图片等。
    • assets 文件夹: 适用于那些作为 Vue 组件一部分的资源,如按钮图标、页面背景图片等。 适用于那些不需要频繁更新的资源,如应用内的固定图标、导航栏背景等。

综上所述,Vue 项目中图片存放到 public 和 assets 文件夹的区别主要体现在存放位置与处理方式、访问方式与动态性以及适用场景上。开发者应根据具体需求选择合适的文件夹来存放图片资源。

在 Vue 项目中,如果你想通过浏览器直接访问查看图片文件,通常需要确保这些图片文件被放置在一个可以通过 HTTP 服务器访问的目录中。以下是几种常见的方法:

方法一将图片放在 public 目录中 Vue CLI 创建的项目中有一个 public 文件夹,这个文件夹中的所有内容都会在构建时被复制到最终的 dist 目录中,并且可以直接通过根 URL 访问。

将图片文件放在 public 文件夹中: public/
├── images/
│ └── my-image.png 在 Vue 组件中访问图片: html 或者,你可以通过完整的 URL 来访问图片(假设你的应用运行在 http://localhost:8080 http://localhost:8080/images/my-image.png

方法二: 将图片作为静态资源在开发服务器中访问 在开发模式下,你可以使用 Vue CLI 提供的开发服务器,它会自动处理 public 目录和 src/assets 目录中的静态资源。

将图片放在 src/assets 目录中: src/
├── assets/
│ └── images/
│ └── my-image.png 在 Vue 组件中访问图片(注意:这里使用的是相对路径,Webpack 会处理这些路径): html 在构建后,这些资源会被处理并放在最终的 dist 目录中,但你不能直接通过浏览器访问 dist/assets 目录下的资源,因为它们是由 Webpack 打包的一部分。

方法三: 通过配置静态资源路径在构建后访问 如果你希望在构建后仍然能够直接访问某些资源,你可以配置静态资源路径。

配置 vue.config.js 文件(如果你使用的是 Vue CLI):

javascript module.exports = {  
    configureWebpack: {  
        devServer: {  
        static: path.join(__dirname, 'public'),  
        },  
    },  
}; 

将图片放在 public 文件夹中(同上)。 访问图片(同上)。

 <ul class="task-items">
    <li
        v-for="(item, index) in items"
        :key="index"
        class="task-item"
    >
        <img
            :src="
                `../../../assets/home_Images/num/` + index + `.png`
            "
            width="22"
            height="22"
            class="task-img"
        />
        <span class="task-title" v-text="item.name"></span>
        <span class="task-date" v-text="item.createdOn"></span>
    </li>
</ul>

// img 图片应该修改为通过 require 引入才能正确显示
<img
  :src="
      require(`../../../assets/home_Images/num/` +
          index +
          `.png`)
  "
  width="22"
  height="22"
  class="task-img"
  />

assets文件夹路径下的图片引入

  • 不通过 require 引入的图片显示图片失败:

  • 修改之后正常显示的图片如下:

### Vue 3 中引入和使用图片资源的方法 在 Vue 3 项目中,由于构建工具的变化(如 Vite 或 Webpack),引入图片资源的方式也有所调整。以下是几种常见的方法来正确引入和使用图片资源: #### 方法一:通过 `import` 动态引入 可以利用 JavaScript 的模块化特性,在脚本部分导入图片路径并绑定到模板中的属性。 ```vue <template> <img :src="logo" alt="Logo"> </template> <script> import logo from "@/assets/logo.png"; export default { data() { return { logo, }; }, }; </script> ``` 这种方式适用于需要动态设置图片的情况,并且能够被现代打包工具识别和处理[^1]。 --- #### 方法二:通过 `require` 静态引入 虽然在某些情况下可能会遇到 `require is not defined` 的错误提示,但在支持 CommonJS 的环境中仍然有效。 ```vue <template> <img :src="logoUrl" alt="Logo"> </template> <script> export default { data() { return { logoUrl: require("@/assets/logo.png"), }; }, }; </script> ``` 需要注意的是,如果使用了 Vite 构建工具,则不推荐此方法,因为它可能引发兼容性问题[^2]。 --- #### 方法三:直接写入 HTML 属性 可以直接将相对路径或绝对路径嵌套至 `<img>` 标签的 `src` 属性中。 ```html <img src="@/assets/logo.png" alt="Logo"> ``` 这种方法简单直观,但对于复杂的场景或者需要动态切换图片时不够灵活[^3]。 --- #### 方法四:CSS 背景图形式引入 可以通过 CSS 的背景图像功能实现图片展示,尤其适合用于装饰性的图形设计。 ```css <style scoped> .div1 { width: 100px; height: 100px; background-image: url('@/assets/logo.png'); background-size: cover; } </style> <template> <div class="div1"></div> </template> ``` 这种技术特别适合不需要交互操作的纯视觉效果需求[^4]。 --- #### 注意事项 当采用不同的引入策略时,请注意以下几点: - 如果使用 **Vite** 进行开发,默认不再支持 `require()` 函数调用,应改用 ES Module 的语法结构。 - 对于生产环境部署而言,建议优化图片大小并通过懒加载提升性能表现。 - 图片文件通常存放在 `/public` 文件夹下作为公共资源访问;而组件内部使用的媒体素材则放置于 `/src/assets` 下更便于管理维护。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值