vite学习教程05、vite+vue2构建本地 SVG 图标

文章目录

前言

博主介绍:✌目前全网粉丝3W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


一、构建本地SVG图标详细步骤

1、安装开发依赖

在 webpack 中加载 svg 资源可以使用 svg-sprite-loader,而 vite 中可以使用插件 vite-plugin-svg-icons。

复制代码
npm add vite-plugin-svg-icons -D
npm install --force

或者

直接在package.json中的devDependencies里添加上依赖:

复制代码
"vite-plugin-svg-icons": "^2.0.1"

接着执行安装依赖命令。

2、配置vite

2.1、配置vite.config.js

在vite.config.js中配置创建插件,这里进行封装一下:

复制代码
import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import createVitePlugins from './vite/plugins'

// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
  const env = loadEnv(mode, process.cwd())
  const { VITE_APP_ENV } = env
  return {
    base: './', // 打包的静态资源引用路径
    plugins: createVitePlugins(env, command.includes('build')), // 放插件用的
    resolve: {
      alias: {
        // 设置路径
        '~': path.resolve(__dirname, './'),
        // 设置别名
        '@': path.resolve(__dirname, './src')
      },
      // https://cn.vitejs.dev/config/#resolve-extensions
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    }
  }
})

对应编写内容如下:

2.2、封装vite引入插件脚本

创建.vite目录,编写引入插件:

svg-icon.js

复制代码
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default function createSvgIcon(isBuild) {
    return createSvgIconsPlugin({
    iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
        symbolId: 'icon-[dir]-[name]',
        svgoOptions: isBuild
    })
}

这里src/assets/icons/svg就是指向我们的svg目录。

index.js

复制代码
import vue2 from '@vitejs/plugin-vue2'

import { viteCommonjs } from '@originjs/vite-plugin-commonjs' // 让浏览器支持commonjs语法
import createSvgIcon from './svg-icon'

export default function createVitePlugins(viteEnv, isBuild = false) {
    const vitePlugins = [vue2()]
    vitePlugins.push(viteCommonjs())
    vitePlugins.push(createSvgIcon(isBuild))
    return vitePlugins
}

核心如下:

解决报错:can not find package 'fast-glob' imported

若是出现报错:

安装依赖:

复制代码
cnpm i fast-glob -D

在main.js中添加导入依赖:

复制代码
import 'virtual:svg-icons-register'

二、实际应用

应用1:未封装,直接vue应用

复制代码
<svg class="svg-icon card-panel-icon" aria-hidden="true">
  <use xlink:href="#icon-bug" :fill="color" />\
</svg>

注意:这里#icon-project,对应的就是在svg目录下的bug.svg。

效果:

应用2:封装vue组件使用

封装SvgIcon组件

创建vue组件:

vue 复制代码
<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" :fill="color" />
  </svg>
</template>

<script>
import { isExternal } from '@/utils/validate'

export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    },
    color: {
      type: String,
      default: ''
    },
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`;
    },
    svgClass() {
      return this.className ? `svg-icon ${this.className}` : 'svg-icon';
    }
  }
}
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>

main.js注册全局组件

js 复制代码
import SvgIcon from '@/components/SvgIcon'

Vue.component('svg-icon', SvgIcon)

vue页面使用组件

在vue中如何使用:

vue 复制代码
<svg-icon icon-class="project" class-name="card-panel-icon" />

参考文章

1\]. vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶续篇:https://zhuanlan.zhihu.com/p/570630648 *** ** * ** *** ## 资料获取 大家点赞、收藏、关注、评论啦\~ 精彩专栏推荐订阅:在下方专栏👇🏻 * [长路-文章目录汇总(算法、后端Java、前端、运维技术导航)](https://blog.csdn.net/cl939974883/category_11568291.html?spm=1001.2014.3001.5482):博主所有博客导航索引汇总 * [开源项目Studio-Vue---校园工作室管理系统(含前后台,SpringBoot+Vue)](https://changlu.blog.csdn.net/article/details/125295334):博主个人独立项目,包含详细部署上线视频,已开源 * [学习与生活-专栏](https://blog.csdn.net/cl939974883/category_10700595.html):可以了解博主的学习历程 * [算法专栏](https://blog.csdn.net/cl939974883/category_11403550.html?spm=1001.2014.3001.5482):算法收录 更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

相关推荐
Clockwiseee21 分钟前
文件上传总结
运维·服务器·学习·文件上传
苜柠1 小时前
Wpf学习片段
学习
欢乐熊嵌入式编程2 小时前
智能手表固件升级 OTA 策略文档初稿
嵌入式硬件·学习·智能手表
起床学FPGA2 小时前
异步FIFO的学习
学习·fpga开发
依年南台2 小时前
搭建大数据学习的平台
大数据·学习
小虎卫远程打卡app2 小时前
视频编解码学习10之成像技术原理
学习·计算机视觉·视频编解码
X Y O3 小时前
神经网络初步学习——感知机
人工智能·神经网络·学习·感知机
小王努力学编程3 小时前
高并发内存池(三):TLS无锁访问以及Central Cache结构设计
jvm·数据结构·c++·学习
hnlucky4 小时前
通俗易懂版知识点:Keepalived + LVS + Web + NFS 高可用集群到底是干什么的?
linux·前端·学习·github·web·可用性测试·lvs
Petrichorzncu5 小时前
Lua再学习
开发语言·学习·lua