小元
博客
详情文字在这里缓缓展开
静候你翻开这一页

vite 动态导入SVG的几种形式

vite 动态导入SVG的几种方式,和区别点。

   一 基于Import导入

       缺点:无法被img标签解析,需要使用动态组件加载,适合单个导入批量导入需要写很多次。

      优点:可以通过CSS动态修改SVG的描边和填充

      页面结构:

           1780454799594.png

        代码展示:

<template>
  <div class="test">
    <component :is="icon" />
  </div>
</template>

<script setup lang="ts">
import icon from "@/assets/home/h-3.svg";
</script>


   二 使用url配合import导入

       优点:方便简洁,可以被img解析,但无法被动态组件识别,适合单个或多个。

        缺点:无法通过css动态修改颜色

        页面展示结构:

           1780455537216.png

       代码展示:

<template>
  <div class="test">
    <img :src="icon" alt="">
  </div>
</template>

<script setup lang="ts">
const icon = new URL("/src/assets/home/h-3.svg", import.meta.url).href;
</script>


   三 使用glob动态导入

       优点:适合批量导入支持各种类型的文件,配合动态组件实现动态渲染。

        缺点:会全量导入对应的文件

       代码展示:

// 导入home目录下所有的jjfa开头的SVG文件
const iconModules = import.meta.glob(
  "../../../assets/home/*.svg", 
  { eager: true, import: "default" }
) as Record<string, string>;

// 导入ls目录下所有的png图片
const lsIcon = import.meta.glob(
  "../../../assets/ls/*.png", 
  { eager: true, import: "default" }
) as Record<string, string>;

const defaultChildren: IData[] = [
  {

    icon: iconModules["../../../assets/home/jjfa-hhy.svg"],

    association: [
      {name: "混合云", icon: lsIcon["../../../assets/ls/icon-1.png"]},
      {name: "物理服务器", icon: lsIcon["../../../assets/ls/icon-2.png"]},
      {name: "私有云", icon: lsIcon["../../../assets/ls/icon-3.png"]},
    ],
  },
  {

    icon: iconModules["../../../assets/home/jjfa-jr.svg"],

    association: [
      {name: "金融", icon: lsIcon["../../../assets/ls/icon-1.png"]},
      {name: "物理服务器", icon: lsIcon["../../../assets/ls/icon-2.png"]},
      {name: "私有云", icon: lsIcon["../../../assets/ls/icon-3.png"]},
    ],
  }
]


   四 使用img标签导入

       优点:简单高效,可以使用CSS控制大小

        缺点:需要把svg图片放在public目录下,无法修改svg的填充色或描边

        代码展示:

<img src="/test.svg" >


渝ICP备2024031078号-1
本网站一切内容不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
如无意中侵犯了企业或个人的知识产权等,请及时通过电子邮件(1102905617@qq.com)告知我,本网站将会给予删除。
最新公告
😊访客你好,很高兴你的到来,本博客仍在建设中,还有些许功能尚在开发中,最后祝你在此能有所收获。
💥小元博客第三代自2025年9月上线以来,2026/08/09日迎来了它的第三次更新本次更新内容如下:
1. 文章详情页样式变更,由原来的弹窗改为单独的页面。
2. 使用Nuxt对项目进行了SEO优化,优化了搜索引擎的抓取和索引。
3. 对验签进行了优化,降低了请求被误触发拦截的概率。
4. 移动端也正在稳步推进中,在不久的将来会与大家见面。
5. 修复了首页黄历节日不显示的问题,以及其它bug的修复。