You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue项目使用require加载图片报错:@/src/assets/images/1.jpg未转译

解决Vue中动态require图片报错:hasn't been transpiled yet

问题原因

webpack对require的路径解析依赖静态可识别的字符串,动态拼接的路径(比如../assets/images/ + item_data.img)无法在编译阶段被正确解析,导致资源未被转译处理。

解决方案

方案1:在数据源中预加载图片(推荐)

直接在App组件的数据源里用require加载好图片资源,再传递给子组件使用:
修改App组件的data部分:

data() {
  return {
    sliderItems: [
      { id: 1, name: "img1", img: require("@/assets/images/1.jpg") },
      { id: 2, name: "img2", img: require("@/assets/images/2.jpg") },
      { id: 3, name: "img3", img: require("@/assets/images/3.jpg") },
    ],
  };
}

子组件直接使用预加载好的路径:

<template>
  <div class="v-carousel-item">
    <img :src="item_data.img" alt="" />
  </div>
</template>

方案2:子组件使用静态前缀+动态变量的写法

webpack允许require包含部分动态变量,但必须保留静态路径前缀。修改子组件的图片src:

<template>
  <div class="v-carousel-item">
    <img :src="require(`@/assets/images/${item_data.img}`)" alt="" />
  </div>
</template>

注:确保item_data.img是完整文件名(如"1.jpg"),且项目已配置@指向src目录(Vue项目默认已配置)。

方案3:通过计算属性处理路径

在子组件中添加计算属性,统一解析图片路径:

<template>
  <div class="v-carousel-item">
    <img :src="imageSrc" alt="" />
  </div>
</template>
<script>
export default {
  props: {
    item_data: {
      type: Object,
      default: () => {},
    },
  },
  computed: {
    imageSrc() {
      return require(`@/assets/images/${this.item_data.img}`);
    },
  },
};
</script>

关键提示

  • 不要在require中完全动态拼接路径,webpack需要静态前缀来识别并打包目标资源。
  • 使用@路径别名可以避免相对路径的层级混乱,提升代码可靠性。

内容的提问来源于stack exchange,提问作者user20984971

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:57:24