我从 Vue CLI 切换到 Vite CLI,从 Vue 3 的 Composition API 切换到 SFC Script setup 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 CLI后,我出现了错误“Uncaught ReferenceError: require is not Defined”。我的文件现在使用脚本设置语法,如下所示:
<script setup> const props = defineProps({ imagePath: { type: String }, }) </script> <template> <img :src="require(`@/assets/${props.imagePath}`)"/> </template>
我已经尝试使用相对路径直接从资产文件夹导入文件,并且它有效。但我无法使用 import 语句指定 props 的路径。
<script setup> // Works but do not use the props, so the component is not reusable import logo from "./../assets/logo.png" </script> <template> <img :src="logo"/> </template>
<script setup> // Component is reusable but the import statement has illegal argument I guess const props = defineProps({ imagePath: { type: String }, }) import logo from `./../assets/${props.imagePath}` </script> <template> <img :src="logo"/> </template>
我还尝试了模板中的 import 语句,但它甚至无法编译代码:
<script setup> const props = defineProps({ imagePath: { type: String }, }) </script> <template> <img :src="import `./../assets/${props.iconPath}`" /> </template>
我错过了什么吗?也许存在一个插件可以帮助我实现这一目标?
P粉2629261952024-04-07 09:26:33
我也遇到这个问题了。我对此进行了搜索,并根据此github问题评论找到了, p>
有关此内容的更多信息,请参阅功能 | Vite-静态资源
经过一番搜索,我找到了这个对我有用的 Vue 3 代码示例链接< /p>
setup() { const getImageUrl = (name) => { return new URL(`../../lib/Carousel/assets/${name}`, import.meta.url).href } return { carouselData, getImageUrl } }