因此,我尝试在Vite上使用内联导入将SVG作为字符串导入到我的Vue组件中,如下所示
<script>
const getSvgIcon = async (name) => {
const module = await import(`../icons/${name}.svg?raw`)
return module.default
}
export default {
props: {
name: String,
},
data() {
return {
svg: null,
}
},
watch: {
name: {
async handler(name) {
this.svg = await getSvgIcon(name)
},
immediate: true,
},
},
}
</script>
<template>
<div v-html="svg"></div>
</template>
在npm run dev
模式下运行时,这一点很好。
然而,这个问题发生在运行npm run build
时,我最终得到Error: Unknown variable dynamic import
,显然是因为我使用了?raw
后缀。
有没有解决办法,或者这是一个障碍,由维特到现在?
2条答案
按热度按时间l7wslrjt1#
作为使代码正常工作的解决方法,请遵循以下步骤:
步骤1:
把你所有的SVG都变成Vue组件。这样你就可以有更好的管理。为了做到这一点,你只需要编辑文件名,把它从
.svg
替换成.vue
,并把内容 Package 在template
标签里。如果你想保留
svg
文件,你可以使用vite-svg-loader插件,并与此,你将能够做到:import IconComponent from './my-icon.svg?component'
第二步:
创建SVG图标组件:
步骤3
现在您可以导入
SvgIcon.vue
并使用SVG图标的名称,如下所示:See it live on Stackblitz
如果你喜欢上面的方法,我最近写了一篇关于它的文章:
Unified SVG icons with Vite, Vue 3, Quasar and Pinia
uujelgoq2#
看看我自己创造的这个例子。
这就是将SVG动态加载到一个漂亮的最小化组件中所需要的全部内容。
啊,别忘了你也可以改变你的svg的颜色,通过使用普通的css。
用法: