前言
在网上搜索了很多关于在vue3中使用svg图标的资料,会有步骤不详尽的地方,所以在这边自己进行实践并记录相关的使用过程,避免大家重复搜索。该文章为JS,TS的朋友可以参考这篇。
一、安装vite-plugin-svg-icons插件
通过命令行进行插件安装
yarn add vite-plugin-svg-icons -D
#or
npm i vite-plugin-svg-icons -D
#or
pnpm install vite-plugin-svg-icons -D
二、在vite.config.js文件中配置插件
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default defineConfig({
plugins: [
//svg插件-主要插入部分
createSvgIconsPlugin({
// 指定需要缓存的图标文件夹
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],//可能会出现‘process is not defined’报错,但并不影响
// 指定symbolId格式
symbolId: 'icon-[dir]-[name]'
}),
],
});
三、在main.js入口文件引入注册脚本
import 'virtual:svg-icons-register'
四、创建缓存的图标文件夹(需和vite.config.js配置文件中插件地址一致)
五、封装SvgIcon.vue组件导入进行全局引用
- 创建组件SvgIcon.vue
//可直接使用
<template>
<svg aria-hidden="true">
<use :xlink:href="symbolId" :fill="color" />
</svg>
</template>
<script>
import { defineComponent, computed } from 'vue'
export default defineComponent({
name: 'SvgIcon',
props: {
prefix: {
type: String,
default: 'icon',
},
name: {
type: String,
required: true,
},
color: {
type: String,
default: '#333',
},
},
setup(props) {
const symbolId = computed(() => `#${props.prefix}-${props.name}`)
return { symbolId }
},
})
</script>
- 在main.js中进行组件注册
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon.vue'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.component('svg-icon', SvgIcon)//组件注册
app.mount('#app')
六、组件使用
<svg-icon name="dialogue" width="20" height="20" />
- 效果
附加、图标下载与颜色修改
链接导向:[阿里巴巴矢量图标库](iconfont-阿里巴巴矢量图标库)
- 选择好需要的颜色后点击复制即可
- 如需要颜色修改则需要去除svg文件中fill属性
<svg-icon name="dialogue" width="20" height="20" color="#000" />
- 效果(修改后刷新页面)
链接导向:vite-plugin-svg-icons插件github中文文档 如有需要可以自行跳转