🧩 Vite 插件推荐:vite-plugin-svg-icon-types
自动扫描 SVG → 生成类型提示 + 预览页,一步搞定 🎯
配合 vite-plugin-svg-icons 插件使用
效果图
为什么需要它?🤔
前端项目里 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,打包后即用。
快速上手 🚀
- 安装:
pnpm add -D svg-icon-types
# 或 npm/yarn/bun
- vite.config.ts:
import { defineConfig } from "vite";
import svgIconTypes from "svg-icon-types";
export default defineConfig({ plugins: [svgIconTypes()], });
- 启动开发:
pnpm dev - 打开预览页:默认
/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 循环。
工作原理(简版)🧠
- 扫描 iconsDir,收集 .svg。
- 生成类型、预览 Vue/入口 TS、预览 HTML,并注入 Rollup 输入。
- 写入前对比内容,不变则跳过。
- 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 逛逛吧!🎉