Vite 插件推荐篇:项目 SVG 管理工具

45 阅读3分钟

🧩 Vite 插件推荐:vite-plugin-svg-icon-types

自动扫描 SVG → 生成类型提示 + 预览页,一步搞定 🎯

配合 vite-plugin-svg-icons 插件使用

效果图

example.png

为什么需要它?🤔

前端项目里 SVG 图标管理常见几个痛点:

  • 命名易出错: 没有类型提示,误拼/少写目录导致运行时才发现。
  • 难以查找:图标数量上百上千,“这个图标长啥样?路径在哪?”只能翻文件夹。
  • 多人协作混乱:设计/前端/测试想要“可视化一览表”,但现有做法要么手写文档,要么临时跑脚本。
  • HMR 抖动:自写扫描脚本若每次都重写文件,会触发 HMR 死循环。
  • 多入口配置麻烦:预览页常被忽略,需要手动把 HTML 注入 Vite/Rollup 输入。

vite-plugin-svg-icon-types 针对这些痛点提供一站式方案:自动扫描、生成类型、产出可视化预览页、自动注入多入口,并且写入防抖,开箱即用。

你会得到什么?🎁

  • ✅ 类型声明:generated-svg-names.d.ts,为 SvgIcon 组件提供字面量类型提示。
  • ✅ 预览页:零配置访问 icon-preview.html(或自定义路径),搜索/复制/查看路径全搞定。
  • ✅ 多入口注入:自动把预览页加入 Rollup/Vite input,不用改配置。
  • ✅ 实时更新:监听 SVG 变更,防抖写入,避免 HMR 死循环。
  • ✅ 零依赖实现:使用 fs/promises,打包后即用。

快速上手 🚀

  1. 安装:
pnpm add -D svg-icon-types 
# 或 npm/yarn/bun
  1. vite.config.ts:
import { defineConfig } from "vite"; 
import svgIconTypes from "svg-icon-types"; 
export default defineConfig({ plugins: [svgIconTypes()], });
  1. 启动开发:pnpm dev
  2. 打开预览页:默认 /tmp/icon-preview.html(或自定义配置改成 /icon-preview.html)。

默认约定 📐

  • 扫描目录:src/assets/svg(递归)

  • 输出:

    • 类型:src/types/generated-svg-names.d.ts
    • 预览组件:tmp/icon-preview/generated-preview.vue
    • 预览入口:tmp/icon-preview/main.ts
    • 预览 HTML:tmp/icon-preview.html
  • 名称规则:相对路径去掉 .svg,用 - 连接层级(foo/bar/icon.svg → foo-bar-icon)

  • 需要项目已有  并注册 SVG(如 virtual:svg-icons-register)。

配置项 🛠️

svgIconTypes({ 
    // 指定 svg 目录
    iconsDir: "src/assets/svg", 
    output: "src/types/generated-svg-names.d.ts", 
    previewVueOutput: "tmp/icon-preview/generated-preview.vue", 
    previewMainOutput: "tmp/icon-preview/main.ts", 
    previewHtmlOutput: "tmp/icon-preview.html", 
    debounceMs: 100, 
});

预览页体验 ✨

  • 🔍 搜索:按名称或相对路径过滤。
  • 📎 Tooltip:悬停显示完整路径,一键复制名称/路径/代码片段。
  • 📊 统计:显示过滤后/总数。
  • 🖱️ 点击卡片:直接复制名称。
  • 🛡️ 防抖写入:内容不变不重写,避免 HMR 循环。

工作原理(简版)🧠

  1. 扫描 iconsDir,收集 .svg。
  2. 生成类型、预览 Vue/入口 TS、预览 HTML,并注入 Rollup 输入。
  3. 写入前对比内容,不变则跳过。
  4. dev 监听 SVG 增删改,防抖后重建生成物。

FAQ & Tips 💡

  • 404?确认 previewHtmlOutput,当前默认 /tmp/icon-preview.html。
  • 类型不更新?检查 SVG 是否在 iconsDir 且后缀为 .svg,看 watcher 是否忽略。
  • 想放回 src?自定义 preview*Output 路径即可。
  • HMR 循环?插件已做内容比对+防抖,确保别处不要重复写同一文件。

适用场景 🎯

  • 中大型前端项目,SVG 众多需要类型安全与可视化管理。
  • 设计/前端/测试协作:预览页即文档。
  • Monorepo:多包共享图标库,集中生成类型和预览。

路线图 🗺️

  • 🧩 可自定义预览模板
  • 🧠 丰富元信息(尺寸、颜色提示)
  • 🛠️ 独立 CLI
  • 🧪 测试/CI 完善

结语 🙌

让团队的 SVG 管理更优雅,试试 vite-plugin-svg-icon-types:安装接入 2 分钟,类型 + 预览自动同步,配置灵活、渐进可用。现在就打开 /tmp/icon-preview.html 逛逛吧!🎉