vite项目中动态引入src失败的问题解决:require is not defined

问题复现

静态引入路径(无问题)

html 复制代码
    <el-menu-item v-for="(item,index) in menuList" :index="item.name" :key="index">
      <img  class="menuItemImg" src="../svg/router/homePage.svg" alt="">
      {{ item.meta.cname }}
    </el-menu-item>

这里没啥问题。

但是,如果使用动态的路径引入,就会出问题

动态引入(图片不展示)

html 复制代码
    <el-menu-item v-for="(item,index) in menuList" :index="item.name" :key="index">
      <img  class="menuItemImg" :src="`../svg/router/homePage.svg`" alt="">
      {{ item.meta.cname }}
    </el-menu-item>

在vue中,:src需要使用require(路径)的值,而并非原始的路径值

src="静态路径"

:src="require(动态路径)"

不过这里引用之后依然有问题

require出问题(报错)

html 复制代码
    <el-menu-item v-for="(item,index) in menuList" :index="item.name" :key="index">
      <img  class="menuItemImg" :src="require(`../svg/router/homePage.svg`)" alt="">
      {{ item.meta.cname }}
    </el-menu-item>

问题分析

require在vite和webpack中,是不一样的。

在webpack环境中,我们可以随时使用require,但是在vite中,require这种引入文件的方式是不存在的,所以会报这个错误

vite路径具体可以看vite官网关于静态资源处理的模块:静态资源处理 {#static-asset-handling} | Vite中文网

(动态引入图片路径,大多数的项目都会用到,但是如果这里你不知道问题原因,那真的让人挺痛苦的。)

问题解决

封装一个require方法

javascript 复制代码
const require = (imgPath: string) => {
    try {
      const handlePath = imgPath.replace('@', '..')
      return new URL(handlePath, import.meta.url).href
    } catch (error) {
      console.warn(error)
    }
  }
   

引用

javascript 复制代码
    <el-menu-item v-for="(item,index) in menuList" :index="item.name" :key="index">
      <img  class="menuItemImg" :src="require(`../svg/router/${item.name}.svg`)" alt="">
      {{ item.meta.cname }}
    </el-menu-item>

结果

相关推荐
东风西巷1 分钟前
微软恶意软件删除工具:官方免费的系统安全防护利器
前端·安全·microsoft·系统安全·软件需求
跟橙姐学代码4 分钟前
手把手教你玩转 multiprocessing,让程序跑得飞起
前端·python·ipython
华仔啊9 分钟前
SpringBoot+MySQL+Vue实现文件共享系统
java·前端·后端
页面仔Dony29 分钟前
流式数据获取与展示
前端·javascript
张志鹏PHP全栈37 分钟前
postcss-px-to-viewport如何实现单页面使用?
前端
恋猫de小郭37 分钟前
iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持
android·前端·flutter
前端进阶者1 小时前
electron-vite_20外部依赖包上线后如何更新
前端·javascript·electron
晴空雨1 小时前
💥 React 容器组件深度解析:从 Props 拦截到事件改写
前端·react.js·设计模式
Marshall35721 小时前
前端水印防篡改原理及实现
前端