Vuetify v-img 本地图片不显示的根源与正确加载方案

落晨吖_1831

落晨吖_1831

2026-10-24

686人浏览

原创

Vuetify v-img 本地图片不显示的根源与正确加载方案

Vuetify 的 组件无法显示 src/assets/ 下的本地图片,根本原因在于 Vue CLI(Webpack)不会自动解析模板中字符串形式的路径(如 "@/assets/images/figma3d.png"),必须通过模块化导入(require() 或 import)让 Webpack 处理并生成有效 URL。

vuetify 的 `` 组件无法显示 `src/assets/` 下的本地图片,根本原因在于 vue cli(webpack)不会自动解析模板中字符串形式的路径(如 `"@/assets/images/figma3d.png"`),必须通过模块化导入(`require()` 或 `import`)让 webpack 处理并生成有效 url。

在你提供的代码中,projects 数组里最后两个项目的 image 字段直接写为字符串 "@/assets/images/figma3d.png" 和 "@/assets/images/covid_tracker.png":

{
  name: "3D Demo 1",
  image: "@/assets/images/figma3d.png", // ❌ 错误:纯字符串,Webpack 不处理
},
{
  name: "Covid Tracker",
  image: "@/assets/images/covid_tracker.png", // ❌ 同样无效
}

浏览器最终发起请求:GET http://localhost:8082/@/assets/images/figma3d.png —— 这是一个404 路径错误,因为 @/ 是 Webpack 别名(仅在 JS 模块上下文中生效),不能直接用于 HTML 模板的 :src 绑定中。Vue 模板中的 :src="xxx" 是运行时绑定,若 xxx 是未处理的字符串,它会被原样当作相对 URL 解析,而 @/ 并非真实文件路径。

✅ 正确做法是:在 data() 或 computed 中,用 require() 动态导入图片,生成 Webpack 处理后的有效资源路径。

✅ 推荐解决方案:使用 require() 在数据层预处理路径

修改 <script></script> 部分,将 image 字段从字符串改为 require() 调用:

<script>
export default {
  name: "Projects",
  data() {
    return {
      projects: [
        // 前三个远程图片保持不变(它们已是有效 URL)
        {
          name: "Twitch24",
          image: "https://new-thefonso.vercel.app/img/portfolio/fullsize/twitch24.png",
          // ... 其他字段
        },
        // 最后两个本地图片 → 改为 require
        {
          name: "3D Demo 1",
          github: "",
          url: "https://unclefonso-3d-demo-uecg.vercel.app/",
          tech: "React, Spline",
          description: "A design created in Figma and ported over to 3D...",
          image: require("@/assets/images/figma3d.png"), // ✅ 正确:Webpack 解析并返回 public 路径
        },
        {
          name: "Covid Tracker",
          github: "",
          url: "https://vue-covid-tracker-theta.vercel.app/",
          tech: "Vue 3, external API",
          description: "Experimental api consumer demo...",
          image: require("@/assets/images/covid_tracker.png"), // ✅ 同上
        },
      ],
    };
  },
};
</script>

此时 <v-img :src="project.image"></v-img> 绑定的是一个由 Webpack 生成的真实路径(如 /img/figma3d.abc123.png),可被浏览器正常加载。

⚠️ 注意事项与避坑指南

  • 不要在模板中写 :src="require(...)":
    <v-img :src="require('@/assets/...')"></v-img> 在 Vue 2 中可能偶然工作,但在 Vue 3 + Vite 或严格模式下会报错(require is not defined)。所有 require() 必须出现在 JS 逻辑中(data/computed/methods)。

    vue-composition-api-best-practices
    vue-composition-api-best-practices

    Vue 3 组合式 API 与

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    uni-app快速上手
    uni-app快速上手

    共0课时 | 0人学习

    Vue 教程
    Vue 教程

    共42课时 | 17.2万人学习

    Vue3.x 工具篇--十天技能课堂
    Vue3.x 工具篇--十天技能课堂

    共26课时 | 2.5万人学习