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>

结果

相关推荐
nn_(nana)27 分钟前
修改文件权限--- chmod ,vi/vim,查看文件内容,yum-软件包管理器,systemctl管理系统服务
前端
烛阴1 小时前
从零开始掌握C#核心:变量与数据类型
前端·c#
han_1 小时前
前端高频面试题之Vuex篇
前端·vue.js·面试
qq_415216252 小时前
vue3搭建项目yarn+vue3+webpack+less+element-plus
前端·webpack·less
天天向上10242 小时前
VueUse的使用
前端·vue.js·vscode
FREE技术2 小时前
学生成绩管理系统 基于java+springboot+vue实现前后端分离项目并附带万字文档(源码+数据库+万字详设文档+软件包+安装教程)
java·vue.js·spring boot·mysql
猪猪拆迁队3 小时前
前端图形引擎架构设计:双引擎架构设计
前端·后端·架构
宋辰月3 小时前
学习react第三天
前端·学习·react.js
bug总结3 小时前
更新原生小程序封装(新增缓存订阅)完美解决
前端·缓存·小程序
5335ld4 小时前
后端给的post 方法但是要求传表单数据格式(没有{})
开发语言·前端·javascript·vue.js·ecmascript