vue3+vite配置svg

一、基本使用

1、首先安装插件

npm install vite-plugin-svg-icons -D

2、vite.config.ts / vite.config.js引用插件
加入createSvgIconsPlugin配置项即可

在这里插入图片描述

import { fileURLToPath, URL } from "node:url"

import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import vueDevTools from "vite-plugin-vue-devtools"

import { createSvgIconsPlugin } from "vite-plugin-svg-icons"
import path from "path"

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueDevTools(),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), "src/assets/svg")],
      symbolId: "icon-[dir]-[name]",
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  server: {
    host: true,
    // port: 3030,
    // 设置反向代理
    proxy: {
      "/api": {
        target: "http://localhost:8080", // 后端API服务器的地址和端口
        changeOrigin: true, // 是否改变源地址
        rewrite: (path) => path.replace(/^\/api/, ""), // 重写路径
      },
    },
  },
})

3、根据上述配置路径添加src/assets/svg存放svg文件即可
在这里插入图片描述
4、在main.ts入口文件中引入

// main.ts
import "virtual:svg-icons-register"

5、页面中使用svg
在这里插入图片描述

<div>
    <svg>
      <!-- "#icons-" + "svg文件名" -->
      <use xlink:href="#icon-house"></use>
    </svg>
  </div>

二、进阶使用(在基本使用基础上封装svg全局公共组件)

1、svg组件页面

<!-- SvgIcon.vue -->
<template>
  <div>
    <svg :style="{ width: width, height: height }">
      <use :xlink:href="prefix + name" :fill="color"></use>
    </svg>
  </div>
</template>

<script setup lang="ts">
defineProps({
  //宽
  width: {
    type: String,
    default: "10px",
  },
  //高
  height: {
    type: String,
    default: "10px",
  },
  //前缀
  prefix: {
    type: String,
    default: "#icon-",
  },
  //svg文件名
  name: String,
  //图标颜色
  color: {
    type: String,
    default: "",
  },
})
</script>

2、封装批量注册全局组件(components下创建index.ts)

import SvgIcon from "@/components/SvgIcon.vue"

import type { App, Component } from "vue"
const components: Component = { SvgIcon }

export default {
  install(app: App) {
    Object.keys(components).forEach((key: string) => {
      app.component(key, components[key]) //遍历挂载组件
    })
  },
}

3、main.ts挂载

import globalComponent from "@/components/index"
app.use(globalComponent)

4、页面无需引用,直接使用全局注册组件

<svg-icon name="glove" width="50px" height="50px"></svg-icon>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值