我从Vue CLI切换到Vite CLI,从Vue 3的组合API切换到SFC脚本设置API。
我以前的工作方式
当我使用官方Vue CLI时,我可以通过props传递路径的文件名来导入图像源:
<template>
<img :src="require(`@/assets/${imagePath}`)"/>
<template/>
<script>
export default {
props: {
imagePath: { type: String },
},
setup() {
// ...
}
}
<script/>
然后这样称呼它:
<template>
<Image imagePath="icon.png" />
</template>
迁移到Vite后收到的错误
但自从我迁移到Vite CLI后,我遇到了一个错误"未捕获ReferenceError:require is not defined "。我的文件现在使用脚本设置语法,如下所示:
<script setup>
const props = defineProps({
imagePath: { type: String },
})
</script>
<template>
<img :src="require(`@/assets/${props.imagePath}`)"/>
</template>
我所尝试的
我已经尝试过用相对路径直接从assets文件夹导入文件,并且成功了,但是我不能用import语句指定props的路径。
一个三个三个一个
我还尝试了模板中的import语句,但它甚至无法编译代码:
<script setup>
const props = defineProps({
imagePath: { type: String },
})
</script>
<template>
<img :src="import `./../assets/${props.iconPath}`" />
</template>
我错过了什么吗?也许有一个插件存在,可以帮助我实现这一点?
4条答案
按热度按时间fjnneemd1#
我也遇到了这个问题,我搜索了一下,发现根据这个github问题评论,
在使用Vite时,源代码中不应该有
require
。它只是ESM。有关此内容的更多信息,请访问功能|Vite-静态资产
经过一番搜索,我找到了这个适用于我的Vue3代码示例link
0pizxfdo2#
如果你使用的是
require.context
,新的方法似乎是glob import。致:
ehxuflar3#
在
imagePath
prop上使用监视器,动态导入映像,并使用结果更新ref
(绑定到<img>.src
):demo
w3nuxt5m4#
对于那些将静态资产与vue + vite一起使用的人,他们可以使用这种方法。
你可以这样使用它