A command-line interface for managing icons. 管理图标组件的命令行工具。 可同时拉取 iconfont/figma 图标到本地,生成组件。
- ⚙️ 配置灵活,同一项目内可配多个不同配置,根据需求灵活使用
- 📠 可单独拉取 iconfont 或 figma 的图标,也可两者同时拉取
- 🎯 多种输出类型可选,且可任意配置
- 🌈 可自定义组件格式化方式
- 🚀 可设置过滤函数,过滤不需要的图标
- 🔄 提供前后图标数据差异对比,方便跟踪变化
- 🤖 提供图标集成组件模板、预览页模板
npm install -D figma-icons-cli
yarn add -D figma-icons-cli
icons init
在当前目录生成 icons.config.ts 配置文件。具体配置详见下方配置参数说明
参考:配置文件模板
注:配置参数可传入对象或者数组。
# configFile: 可传入配置文件,不传则默认取当前根目录下的icons.config.ts 配置文件
icons build [configFile]
输出的 type=component 时
<template>
<div>
<IconArrowLeft style="font-size: 50px; color: red" />
<icon-more style="font-size: 50px; color: red" />
<!-- format=bg|img时 -->
<IconArrowLeft size="50px" color="#2254f4" />
</div>
</template>
<script lang="ts">
import { IconArrowLeft, IconMore } from "@/icons";
export default {
components: {
IconArrowLeft,
IconMore,
},
};
</script>
输出的 type=symbol 时
// 入口文件main.js
import { createApp } from "vue";
import App from "./App.vue";
import "./svg-icon/svg-icon"; // 输出的svg-icon.js文件
import SvgIcon from "./svg-icon/svg-icon.vue"; // 输出的svg-icon.vue文件
const app = createApp(App);
app.component(SvgIcon.name, SvgIcon); // 全局注册图标组件
app.mount("#app");
<template>
<div>
<svg-icon name="success-static" style="font-size: 50px; color: #2254f4" />
<svg-icon name="error-fill" :style="{ fontSize: 50, color: '#2254f4' }" />
<svg-icon name="edit" :style="{ fontSize: 50, color: '#2254f4' }" />
<svg-icon name="add" :style="{ fontSize: 50, color: '#2254f4' }" />
</div>
</template>
如需要<Icon name=""/>
这种方式的集成所有图标的组件,可创建相应模板,进行自定义;同时提供了图标预览页模板。
# 根据模板,创建文件。执行后可选:icon 集成所有图标的Icon组件模板, preview 图标预览页模板, both 同时创建两种模板文件
# outputDir: 输出文件目录,不传则默认取当前根目录
icons template [outputDir]
参数名 | 描述 | 是否必填 | 类型 | 默认值 |
---|---|---|---|---|
input | 输入配置 | 是 | InputOption | InputOption[] | 无 |
output | 输出配置 | 是 | OutputOption |OutputOption[] | 无 |
参数名 | 描述 | 是否必填 | 类型 |
---|---|---|---|
type | 源数据类型 | 是 | 'figma' | 'iconfont' |
url | figma 文档链接或 iconfont js 链接 | 是 | string |
token | type=figma 时需要, figma api 需要的 token | 否 | string |
prefix | 图标名前缀,用来避免不同数据源有同名的图标 | 否 | string |
modules | type=figma 时可选, 自定义选择 figma 模块内的图标进行输出 | 否 | string[] |
filter | 过滤函数 | 否 | (icon: Icon, index: number, array: Array<Icon>) => boolean; |
formatIconName | 自定义修改图标名称 | 否 | (name:string) => string; |
formatIconType | 自定义图标类型,static 固定色、configurable 可变色 | 否 | (name:string) => 'configurable'|'static'; |
参数名 | 描述 | 是否必填 | 类型 | 默认值 |
---|---|---|---|---|
type | 输出类型 | 是 | 'diff' | 'svg' | 'json' | 'component' | 'symbol' | '' |
format | type=component 时生效,选择预置的格式化方式 | 是 | 'vue' | 'img' | 'bg' | '' |
dir | 输出目录 | 否 | string | 'src' |
dirname | type=component 时生效,输出图标组件存放目录名 | 否 | number | 'components' |
filename | type=component 时生效,输出图标组件的入口文件名 | 否 | boolean | 'index.js' |
tag | format=bg 时生效,自定义组件的标签 | 否 | string | 'src' |
defaultColor | format=img | bg 时生效,图标组件默认颜色值 | 否 | string | '' |
defaultSize | format=img | bg 时生效,图标组件默认大小 | 否 | string | number | 20 |
prefix | 生成图标组件的前缀,如 arrow -> IconArrow | 否 | string | 'icon' |
className | 图标组件上的 class 名,如 arrow -> 'icons icons-arrow' | 否 | string | 'icons' |
svgAttr | format=vue 时生效,自定义组件 svg 标签的属性 | 否 | string | 'aria-hidden="true" v-on="$listeners"' |
style | type=symbol/component 时生效,自定义组件的 style | 否 | string | '' |
formatSvg | type=component 时生效,自定义格式化 svg 的函数 | 否 | (options: SvgFormatOptions) => string | 无 |
formatComponent | type=component 时生效,自定义格式化组件的函数 | 否 | (options: ComponentFormatOptions) => string | 无 |
formatExportString | type=component 时生效,自定义格式化导出组件的字符串 | 否 | (options: ExportStringFormatOptions) => string | 无 |
值 | 描述 |
---|---|
diff |
输出前后图标数据差异对比 |
svg |
输出所有图标 svg 文件 |
json |
集合所有图标数据的 json 文件,如需输出 diff 文件,json 文件也必须输出 |
component |
输出图标组件 |
symbol |
输出类似 iconfont symbol 方式的文件 |
值 | 框架 | 标签 | 描述 | 常用场景 |
---|---|---|---|---|
vue |
vue | svg | 正常的 svg 标签组件 | |
img |
vue | img | 图标转化为 base64 输出到 img 标签的 src 参数中 | |
bg |
vue | 自定义,默认'span' | 图标转化为 base64 输出到标签 style 中的 background-image 中 | 微信小程序下不支持 svg 标签,可使用 text 标签输出图标组件 |
注:微信小程序使用bg
的方式,因转化 base64 时使用到了 btoa 函数,但小程序环境下并没有该函数,故此需在全局提前注入 btoa 函数,此处提供一个 btoa 函数供参考:btoa
参数名 | 描述 | 类型 |
---|---|---|
content | 图标 svg 的字符串 | string |
name | 图标的名称 | string |
className | 输出图标组件的类名 | string |
type | 图标的类型 | string<"configurable" | "static"> |
svgAttr | svg 标签的属性 | string |
参数名 | 描述 | 类型 |
---|---|---|
svgContent | formatSvg 返回的 svg 字符串 | string |
componentName | 输出成图标组件的组件名 | string |
className | 输出图标组件的类名 | string |
name | 图标名 | string |
tag | format=bg 时生效,自定义组件的标签 | string |
defaultColor | 图标组件默认颜色值 | string |
defaultSize | 图标组件默认大小 | string | number |
style | 自定义图标组件样式 | string |
参数名 | 描述 | 类型 |
---|---|---|
componentName | 图标组件的组件名 | string |
iconDirName | 图标组件输出的目录名 | string |
name | 图标组件的文件名 | string |