Vite项目当中的SVG图标的配置及图标全局组件的封装

简介: Vite项目当中的SVG图标的配置及图标全局组件的封装

为什么要使用 SVG 图标?

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多。放在项目中几乎不占用资源。

如何使用?

  1. 安装 SVG 依赖插件
pnpm install vite-plugin-svg-icons -D
  1. 在 vite.config.ts 中配置插件
import { defineConfig } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // 引入 svg 图标所需要的插件
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], // 图标的存放目录
      symbolId: 'icon-[dir]-[name]'
    })
  ],
  resolve: {
    alias: {
      "@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src
    }
  }
})

  1. main.ts 中导入
import { createApp } from 'vue'
import App from '@/App.vue'
import 'virtual:svg-icons-register' // svg 配置

console.log(import.meta.env)
createApp(App).mount('#app')

注意,如果在重新启动项目的时候有如下报错:


手动进行安装


测试使用




svg:图标外层容器节点,内部雷要与use标签结合使用

xlink:href 执行用哪一个图标,属性值务必 #icon-图标名字

use标签fill 属性性可以设置图标的颜色(如何设置失败,检查你复制的这个 svg 图标代码中是否有这个 fill 属性,如果有就将其移除掉,就可以使用了)

如果需要调整图标的大小,那么就需要在 svg 标签上添加 style 就可以了

<template>
  <div>我是App根组件</div>
 <--是特定的语法-->
 
  <svg>
    <use xlink:href="#icon-phone"></use>
  </svg>
</template>

可以看到,在项目中可以使用 SVG 图标了,但是有一点不好的就是这样用起来有点麻烦,这个时候我们就可以进行ICON图标组件的封装了,并将其注册为一个全局的组件。



component / SvgIcon / index.vue

这里是组件的一个简单封装:

<template>
  <svg :style="styleObject">
    <use :xlink:href="prefix + name" :fill="color"></use>
  </svg>
</template>

<script setup lang="ts">
import { defineProps } from 'vue';

const props = defineProps({
  prefix: {
    type: String,
    default: '#icon-'
  },
  name: String,
  color: String,
  width: {
    type: String,
    default: '16px'
  },
  height: {
    type: String,
    default: '16px'
  }
})

const styleObject = {
  width: props.width,
  height: props.height
}
</script>

<style scoped>

</style>


对于类似这样在项目中会频繁使用到的基础组件,是不是可以将其注册为全局组件呢?

此时我们可以写一个自动注册的插件

component / index.ts

/*
 * 注册整个项目的全局组件
*/
import SvgIcon from './SvgIcon/index.vue'
import { App } from 'vue'
const allGlobalComponent: any = { SvgIcon }
console.log(allGlobalComponent)
export default {
    // 默认会注入 app
    install(app: App) {
        // 注册全部的全局组件
        Object.keys(allGlobalComponent).forEach(key => {
            // 注册为全局组件
            console.log(key)
            app.component(key, allGlobalComponent[key])
        })
    }
}


如上是采用导入组件的方法,其实也可以去遍历需要注册成全局组件的文件夹里面的组件文件进行注册。

最后当插件写好后,便需要在 main.ts 中去安装一下:

import { createApp } from 'vue'
import App from '@/App.vue'

import 'virtual:svg-icons-register' // svg 配置
import globalComponent from '@/components/index.ts' // 引入自定义插件对象:注册整个项目的全局组件
import '@/styles/index.scss' // 引入全局样式

const app = createApp(App)

app.use(globalComponent) // 安装自定义插件
app.mount('#app')
目录
相关文章
vue3+vite项目中使用svg图标
vue3+vite项目中使用svg图标
2465 1
|
Oracle Java 关系型数据库
Oracle jdk 的国内下载镜像
Oracle jdk 的国内下载镜像
61991 0
|
10月前
Vite使用svg-企业级开发(支持本地svg和网络svg渲染)
本教程介绍如何在Vite项目中集成SVG图标插件。首先安装`vite-plugin-svg-icons`,配置插件指向SVG图标目录,并注册全局组件。接着创建SVG图标组件,支持内部图标与外部图片展示。通过简单配置,即可在页面中灵活使用各类SVG图标,提升开发效率。
509 0
|
10月前
|
人工智能 JavaScript 开发工具
极速上手!Claude Code 原生支持 Windows 免WSL安装教程
Claude Code 现已支持 Windows 原生运行,无需 WSL 配置。本文提供详细安装教程,涵盖 Node.js 环境验证、Git 安装及 Claude Code 配置步骤,助你快速上手这一强大 AI 编程工具。
12955 13
|
缓存 前端开发 JavaScript
如何配置Vite以确保最佳的Tree Shaking效果?
如何配置Vite以确保最佳的Tree Shaking效果?
1525 57
|
8月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
56518 11
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
718 0
|
资源调度 JavaScript API
Vue-treeselect:为Vue应用程序提供强大选择器的指南
Vue-treeselect:为Vue应用程序提供强大选择器的指南
2936 0
|
前端开发 JavaScript 开发者
React 按钮组件 Button
本文介绍了 React 中按钮组件的基础概念,包括基本的 `&lt;button&gt;` 元素和自定义组件。详细探讨了事件处理、参数传递、状态管理、样式设置和可访问性优化等常见问题及其解决方案,并提供了代码示例。帮助开发者避免易错点,提升按钮组件的使用体验。
744 77
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
23719 14