Vue3+Vite中不支持require的方式引入本地图片如何解决

使用vue2+webpack的时候是用require引入图片

require(`../assets/${img}.png`)

但是vue3+vite这么写就报错:require is not define

原因是require是webpack的方法vite找不到对应的图片路径,需要使用下面的方式进行处理。

详细见官网解释:

静态资源处理 {#static-asset-handling} | Vite中文网


使用vite也有两种引入静态文件方法:

第一种 :

import imageIcon from "../assets/image.png";


<img class="patient" :src="imageIcon" />

第二种:

 import.meta.url 是一个 ESM 的原生功能,会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用,在一个 JavaScript 模块中,通过相对路径我们就能得到一个被完整解析的静态资源 URL。

const url = new URL('静态路径', import.meta.url).href

第一个参数即图片的路径,这里就是对应require中的值。

第二个参数是vite的一个全局变量,可以理解成直接写死了 import.meta.url

使用示例:

<img :src="index !== clickIndex ? downImg : upImg">

// 导入两张图片 
const downImg = new URL('../../assets/index/down.png', import.meta.url).href
const upImg = new URL('../../assets/index/up.png', import.meta.url).href

Vue3Vite 是现代前端开发中的两个热门技术栈。Vite 是一个高性能的前端构建工具,它采用了更轻量级的预加载策略,而 Vue3 则是 Vue 框架的最新版本,强调了组件化和 TypeScript 的支持。 当你尝试使用 `require` 或者 `import * as` 来引入外部模块时,在 Vue3 + Vite 的组合下可能会遇到一些问题。这是因为 Vite 默认配置是基于 ES 模块(`.mjs` 文件),而不是 CommonJS(`.js` 文件)。CommonJS 的 `require` 功能在 Vite 中需要额外配置才能工作。 解决这个问题通常需要做以下几步: 1. **安装 vite-plugin-commonjs**:这是用于启用 CommonJS 支持的插件,可以使用 npm 或 yarn 安装: ```bash npm install --save-dev vite-plugin-commonjs ``` 2. **在 vite.config.js 中添加插件配置**: ```javascript import { defineConfig } from &#39;vite&#39;; import commonjs from &#39;vite-plugin-commonjs&#39;; export default defineConfig({ plugins: [ commonjs(), ], }); ``` 3. 使用 `import` 替换 `require`: 而不是 `require(&#39;package&#39;)`,你应该使用 `import package from &#39;./path/to/package&#39;`。 4. 如果是在.vue 文件中使用,可以在文件顶部使用 `import.meta.glob` 或者 `<script setup>` 特性来动态导入,因为 Vue 组件默认只支持 ES 模块。 注意,虽然上述步骤能解决大部分 `require` 的问题,但在某些大型项目中,完全迁移至 ES6 模块可能是更好的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值