1.0.10 • Published 1 month ago

@webxrd/vite-plugin-svg v1.0.10

Weekly downloads
-
License
MIT
Repository
-
Last release
1 month ago

插件作用

使在vite中使用svg文件时更方便。支持热更新。

安装

npm i @webxrd/vite-plugin-svg -D

使用示例:

目录结构

src
    assets
        icons
            user.svg
            lock.svg
        other
            icons
                check.svg
                circle.svg
main.js
vite.config.js

vite.config.js

import path from 'path';
import {vitePluginSvg} from "@webxrd/vite-plugin-svg";
import {defineConfig} from 'vite';
import vue from '@vitejs/plugin-vue';
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        // ...other plugin
        
        vitePluginSvg({
            // 必要的。必须是绝对路径组成的数组。
            iconDirs: [
                path.resolve(__dirname, 'src/assets/icons'),
                path.resolve(__dirname, 'src/assets/other/icons'),
            ],
            // 必要的。入口script
            main: path.resolve(__dirname, 'src/main.js'),
            symbolIdFormat: 'icon-[name]'
        }),
    ]
});

使用图标

配置完以后就可以轻松使用 src/assets/icons 里的的图标了

<svg>
    <use xlink:href="#icon-user" />
</svg>
<svg>
    <use xlink:href="#icon-lock" />
</svg>
<svg>
    <use xlink:href="#icon-check" />
</svg>
<svg>
    <use xlink:href="#icon-circle" />
</svg>

在vite+vue3中使用

封装公用组件:components/SvgIcon.vue

<template>
    <svg class="SvgIcon" aria-hidden="true"><use :xlink:href="symbolId" /></svg>
</template>
<script>
import { defineComponent, computed } from 'vue';
export default defineComponent({
    name: 'SvgIcon',
    props: {
        name: {
            type: String,
            required: true,
        }
    },
    setup(props) {
        const symbolId = computed(() => `#icon-${props.name}`);
        return {
            symbolId,
        }
    }
})
</script>
<style scoped>
    .SvgIcon {
        font-size: inherit;
        fill: currentColor;
        width: 1em;
        height: 1em;
        text-indent: 0;
        vertical-align: bottom;
    }
</style>

在组件中使用。(或者注册在全局,使用起来更方便)

<template>
    <div>
        <SvgIcon name="user"></SvgIcon>
        <SvgIcon name="lock"></SvgIcon>
        <SvgIcon name="check"></SvgIcon>
        <SvgIcon name="circle"></SvgIcon>
    </div>
</template>
<script>
import { defineComponent } from 'vue';
import SvgIcon from './components/SvgIcon.vue';
export default defineComponent({
    components: {
        SvgIcon,
    },
})
</script>
<style scoped>
    .SvgIcon  {
        font-size: 30px;
        color: blue;
    }
</style>
1.0.10

1 month ago

1.0.9

2 months ago

1.0.7

8 months ago

1.0.6

8 months ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago