- Notifications
You must be signed in to change notification settings - Fork0
An WinJS plugin to provide support for icons unified solution.
License
winjs-dev/winjs-plugin-unicons
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
一个为 WinJS 项目提供的图标解决方案,底层基于unplugin-icons 插件,提供强大的图标管理和使用体验。
- 📦开箱即用 - 零配置即可使用数万个图标
- 🎯多框架支持 - 支持 Vue2、Vue3 等主流框架
- 🛠️多打包工具 - 支持 Vite、Webpack、Rspack
- 🔧自动导入 - 自动导入图标组件,无需手动注册
- 📁本地图标 - 支持本地 SVG 图标自动优化和导入
- 🎨自定义图标集 - 支持自定义图标集合
- ⚡按需加载 - 仅打包使用的图标,优化包体积
- 🎪SVG 优化 - 自动优化 SVG 图标,移除冗余代码
npm install @winner-fed/plugin-unicons# 或者yarn add @winner-fed/plugin-unicons# 或者pnpm add @winner-fed/plugin-unicons
- 在配置文件中启用插件
// win.config.jsexportdefault{plugins:['@winner-fed/plugin-unicons']}
- 在组件中使用图标
<template> <div><!-- 使用在线图标库--> <icon-mdi-home /> <icon-heroicons-outline-menu-alt-2 /> <icon-ri-apps-2-line /><!-- 使用本地自定义图标--> <icon-win-custom-logo /><!-- 作为组件使用--> <IconMdiHome /> <IconWinCustomLogo /> </div></template><script setup>importIconMdiHomefrom'~icons/mdi/home'importIconWinCustomLogofrom'~icons/win/custom-logo'</script>
将 SVG 图标文件放置在src/icons 目录下,插件会自动:
- 读取并优化 SVG 文件
- 转换为可用的图标组件
- 支持自动导入和按需加载
src/├── icons/│ ├── logo.svg│ ├── arrow.svg│ └── custom-icon.svg使用方式:
<template> <div><!-- 本地图标会自动添加 win 前缀--> <icon-win-logo /> <icon-win-arrow /> <icon-win-custom-icon /> </div></template>
// win.config.jsexportdefault{plugins:['@winner-fed/plugin-unicons'],unIcons:{// 自定义图标目录include:['src/assets/icons'],// 自定义图标集合customCollections:{'my-icons':{'custom-icon':'<svg>...</svg>'}},// 自动安装autoInstall:true,// 默认样式类名defaultClass:'unicons-win',// 编译器类型compiler:'vue3',// SVG 优化配置svgOptimization:{// 优化级别:'none' | 'minimal' | 'balanced' | 'aggressive'level:'balanced',// 是否保留原始 SVG 数据(用于调试)preserveOriginal:false,// 自定义 SVGO 配置customConfig:{plugins:[// 自定义插件配置]}},// 以下是 unplugin-icons 支持的其他配置scale:1.2,iconifyApiEndpoint:'https://api.iconify.design',transform(svg,collection,icon){// 自定义图标转换逻辑returnsvg}}}
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
include | string[] | ['src/icons'] | 自定义图标目录,会与默认的src/icons 目录合并 |
customCollections | object | {} | 自定义图标集合 |
autoInstall | boolean | true | 自动安装图标组件 |
defaultClass | string | 'unicons-win' | 默认样式类名 |
compiler | string | 自动检测 | 编译器类型,支持vue2、vue3 等 |
svgOptimization | object | { level: 'balanced' } | SVG 优化配置 |
svgOptimization.level | 'none' | 'minimal' | 'balanced' | 'aggressive' | 'balanced' | 优化级别 |
svgOptimization.preserveOriginal | boolean | false | 是否保留原始 SVG 数据 |
svgOptimization.customConfig | object | undefined | 自定义 SVGO 配置 |
本插件基于unplugin-icons,因此支持所有 unplugin-icons 的配置选项:
scale- 图标缩放比例transform- 自定义图标转换函数iconifyApiEndpoint- Iconify API 端点jsx- JSX 模式配置- 以及其他 unplugin-icons 支持的配置项
💡提示: 所有传入的配置都会被传递给 unplugin-icons,让你能够使用其完整功能。
格式:icon-{collection}-{name}
icon-mdi-home→ Material Design Icons 的 home 图标icon-heroicons-outline-menu→ Heroicons 的 outline menu 图标icon-ri-apps-2-line→ Remix Icons 的 apps-2-line 图标
格式:icon-win-{name}
src/icons/logo.svg→icon-win-logosrc/icons/my-icon.svg→icon-win-my-icon
文件名会自动转换为驼峰命名:
custom-icon.svg→customIconuser_profile.svg→userProfile
插件自动注入基础样式:
.unicons-win {width:1em;height:1em;fill: currentColor;stroke: none;display: inline-block;vertical-align: middle;}
<template> <icon-mdi-homeclass="my-icon" /></template><style>.my-icon {font-size:24px;color:#1890ff;}</style>
<script setup>importLargeIconfrom'~icons/mdi/home?width=2em&height=2em'importColoredIconfrom'~icons/mdi/home?color=red'</script>
插件提供了多级 SVG 优化策略,让你在保证原始性和优化效果之间找到平衡:
- 完全保持 SVG 原始状态
- 不进行任何处理
- 适用于需要完全保留原始设计的场景
// win.config.jsexportdefault{unIcons:{svgOptimization:{level:'none'}}}
- 只做基础清理(移除注释、元数据等)
- 保留所有样式相关属性(fill、stroke、class 等)
- 保留 viewBox、xmlns 等重要属性
- 推荐用于设计精美的图标
exportdefault{unIcons:{svgOptimization:{level:'minimal'}}}
- 适度优化,保留重要的样式属性
- 移除部分冗余属性,但保留 class 用于样式控制
- 在文件大小和原始性之间取得平衡
- 适用于大多数使用场景
exportdefault{unIcons:{svgOptimization:{level:'balanced'// 默认值}}}
- 最大程度优化文件大小
- 移除 fill、stroke、class 等属性
- 可能改变图标的原始外观
- 适用于对文件大小要求严格的场景
exportdefault{unIcons:{svgOptimization:{level:'aggressive'}}}
你可以通过customConfig 提供自定义的 SVGO 配置:
exportdefault{unIcons:{svgOptimization:{level:'balanced',customConfig:{plugins:[// 添加自定义插件{name:'addClassesToSVGElement',params:{className:'my-custom-class'}},// 或者覆盖默认行为{name:'removeAttrs',params:{attrs:['data-custom']// 只移除特定属性}}]}}}}
启用preserveOriginal 选项可以在开发时对比优化前后的差异:
exportdefault{unIcons:{svgOptimization:{level:'balanced',preserveOriginal:true// 开发环境启用}}}
| 场景 | 推荐级别 | 原因 |
|---|---|---|
| 品牌图标、Logo | minimal | 保持设计完整性 |
| 通用 UI 图标 | balanced | 平衡优化和兼容性 |
| 大量简单图标 | aggressive | 最小化包体积 |
| 复杂插画图标 | none 或minimal | 避免破坏视觉效果 |
| 生产环境 | balanced | 稳定可靠 |
<template> <component:is="iconComponent" /></template><script setup>import {computed }from'vue'consticonName=ref('home')consticonComponent=computed(()=> {return ()=>import(`~icons/mdi/${iconName.value}`)})</script>
<script setup>importRawIconfrom'~icons/mdi/home?raw'// RawIcon 是 SVG 字符串</script>
// win.config.jsexportdefault{unIcons:{// 自定义图标转换transform(svg,collection,icon){// 为所有图标添加样式returnsvg.replace('<svg','<svg')},// 缩放所有图标scale:1.5,// 自定义图标集合customCollections:{'brand':{'logo':'<svg viewBox="0 0 24 24">...</svg>','mark':()=>import('./assets/mark.svg?raw')}},// JSX 模式(适用于 React)jsx:'react',// 自定义 Iconify API 端点iconifyApiEndpoint:'https://api.iconify.design'}}
插件支持Iconify 提供的所有图标库:
- Material Design Icons (
mdi) - 7,000+ 图标 - Heroicons (
heroicons) - 460+ 图标 - Remix Icons (
ri) - 2,500+ 图标 - Feather Icons (
feather) - 280+ 图标 - Ant Design Icons (
ant-design) - 800+ 图标 - Carbon Icons (
carbon) - 2,000+ 图标 - Tabler Icons (
tabler) - 4,000+ 图标 - Font Awesome (
fa,fa-solid,fa-regular,fa-brands) - 2,000+ 图标
更多图标库请访问:https://icon-sets.iconify.design/
A: 访问Iconify 浏览所有可用图标,或者在icones.netlify.app 搜索。
A: 请检查:
- SVG 文件是否放在
src/icons目录下 - 文件名是否符合规范(仅包含字母、数字、连字符、下划线)
- SVG 文件是否有效
A: 插件默认按需加载,只会打包使用的图标。避免使用import * from '~icons/*' 这样的全量导入。
A: 完全支持!插件会自动生成类型定义。
A: 使用 CSS 的color 属性:
<icon-mdi-homestyle="color:red" />
A: 插件支持 unplugin-icons 的所有配置选项,直接在unIcons 配置中添加即可:
exportdefault{unIcons:{// 任何 unplugin-icons 支持的配置transform:(svg)=>svg.replace('currentColor','#ff0000'),scale:2,jsx:'react'}}
A: 这通常是由于 SVG 优化过度导致的。尝试以下解决方案:
- 降低优化级别:
exportdefault{unIcons:{svgOptimization:{level:'minimal'// 或 'none'}}}
- 保留特定属性:
exportdefault{unIcons:{svgOptimization:{level:'balanced',customConfig:{plugins:[{name:'removeAttrs',params:{attrs:['data-*']// 只移除 data 属性,保留其他}}]}}}}
A: 可以根据环境变量动态配置:
exportdefault{unIcons:{svgOptimization:{level:process.env.NODE_ENV==='production' ?'balanced' :'minimal',preserveOriginal:process.env.NODE_ENV==='development'}}}
欢迎提交 Issue 和 Pull Request!
MIT License
About
An WinJS plugin to provide support for icons unified solution.
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.