1.0.1 • Published 3 months ago

xicon-cli v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

xicon-cli

A command-line interface for managing icons. 管理图标组件的命令行工具。 可同时拉取 iconfont/figma 图标到本地,生成组件。

注:1.x 版本改为 esm 的方式,后续功能变更也将仅在 1.x 以上的版本实现,请尽快进行版本的升级。 1.x 新增功能点:

  • 新增图标类型 multiple 多色图标,通过 css 变量实现多色图标配置及变色
  • 新增输出格式 min
  • 新增两种输入类型,svg 目录、json 文件
  • 支持 figma 文档链接中的 node-id 参数,可配置只读取一个页面内的图标数据
  • 默认模板加入可访问性相关的参数:role / aria-label / focusable / aria-hidden

特性

  • 🎊 支持固定色、单色可配置、多色可配置等图标类型
  • ⚙️ 配置灵活,同一项目内可配多个不同配置,根据需求灵活使用
  • 🎉 可单独拉取 iconfont 或 figma 的图标,也可两者同时拉取
  • 🎯 多种输出类型可选,且可任意配置
  • 🌈 可自定义组件格式化方式
  • 🚀 可设置过滤函数,过滤不需要的图标
  • 📚 提供前后图标数据差异对比,方便跟踪变化
  • 🤖 提供图标集成组件模板、预览页模板

安装依赖

npm install -D xicon-cli
yarn add -D xicon-cli

使用

初始化配置文件

xicon init

在当前目录生成 xicon.config.ts 配置文件。具体配置详见下方配置参数说明
参考:配置文件模板 注:配置参数可传入对象或者数组。

拉取图标

# configFile: 可传入配置文件,不传则默认取当前根目录下的xicon.config.ts 配置文件
xicon 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>
  • 多色图标
<template>
  <div>
    <IconAddCircleMultiple class="demo-icon" />
  </div>
</template>

<script lang="ts">
import { IconAddCircleMultiple } from "@/icons";

export default {
  components: {
    IconAddCircleMultiple,
  },
};
</script>

<style>
.demo-icon {
  --primary-color: #2254f4;
  --abc-color: red;
  --abc2-color: green;
}

.demo-icon:hover {
  --primary-color: #000;
  --abc-color: #2254f4;
  --abc2-color: pink;
}
</style>

创建模板文件

如需要<Icon name=""/>这种集成所有图标组件的使用方式,可创建相应模板,进行自定义; 工具内同时提供了图标预览页模板。

根据模板,创建文件。执行后可选: icon 集成所有图标的 Icon 组件模板 preview 图标预览页模板 both 同时创建两种模板文件

# outputDir: 输出文件目录,不传则默认取当前根目录
xicon template [outputDir]

配置参数说明

参数名描述是否必填类型默认值
input输入配置InputOption | InputOption[]
output输出配置OutputOption |OutputOption[]

输入配置 InputOption

支持 figma 与 iconfont 输入,同时支持本地 svg 目录或者 json 文件输入。 类型:FigmaInputOption | IconfontInputOption| SvgInputOption | JsonInputOption

通用参数

参数名描述是否必填类型
type源数据类型'figma' | 'iconfont' | 'svg' | 'json'
prefix图标名前缀,用来避免不同数据源有同名的图标string
filter过滤函数(icon: Icon, index: number, array: Array\<Icon>) => boolean;
formatIconName自定义修改图标名称(name: string) => string;
formatIconType自定义图标类型,static 固定色、configurable 可变色、multiple 多色(name: string) => 'configurable' | 'static' | 'multiple';

FigmaInputOption

参数名描述是否必填类型
urlfigma 文档链接string
tokenfigma api 需要的 tokenstring
modules自定义选择 figma 模块内的图标进行输出string[]

IconfontInputOption

参数名描述是否必填类型
urliconfont js 链接string

SvgInputOption

参数名描述是否必填类型
dir输入的 svg 文件目录string

JsonInputOption

参数名描述是否必填类型
file输入的 json 文件的路径,内容格式同 json 输出的内容格式string

输出配置 OutputOption

支持多种输出类型: CommonOutputOption | JsonOutputOption | SymbolOutputOption | ComponentOutputOption

type 值描述类型
diff输出前后图标数据差异对比CommonOutputOption
svg输出所有图标 svg 文件CommonOutputOption
json集合所有图标数据的 json 文件,如需输出 diff 文件,json 文件也必须输出JsonOutputOption
component输出图标组件ComponentOutputOption
symbol输出类似 iconfont symbol 方式的文件SymbolOutputOption

通用参数 CommonOutputOption

参数名描述是否必填类型默认值
type输出类型'diff' | 'svg' | 'json' | 'component' | 'symbol'''
dir输出目录string'src'

JsonOutputOption

参数名描述是否必填类型默认值
filename输出 json 文件的文件名string'icons.json'

SymbolOutputOption

参数名描述是否必填类型默认值
className图标组件上的 class 名,如 arrow -> 'xicon xicon-arrow'string'xicon'
style自定义组件的 stylestring''
cssVarscss 变量配置Record\<string, string>
hideCustomVar隐藏自定义 css 变量booleanfalse

ComponentOutputOption

参数名描述是否必填类型默认值
format选择预置的格式化方式, 可传入值或者对应的配置string | FormatOption'vue'
dirname输出图标组件存放目录名string'components'
filename输出图标组件的入口文件名string'index.js'
prefix生成图标组件的前缀,如 arrow -> IconArrowstring'icon'
className图标组件上的 class 名,如 arrow -> 'xicon xicon-arrow'string'xicon'
style自定义组件的 stylestring''
cssVarscss 变量配置Record\<string, string>
hideCustomVar隐藏自定义 css 变量booleanfalse
formatSvg自定义格式化 svg 的函数(options: SvgFormatOption) => string
formatStyle自定义格式化组件样式的函数(options: StyleFormatOption) => string
formatComponent自定义格式化组件的函数(options: ComponentFormatOption) => string
formatExportString自定义格式化导出组件的字符串(options: ExportStringFormatOption) => string

format 参数说明

框架标签描述常用场景
vuevuesvg正常的 svg 标签组件
minvuesvg正常的 svg 标签组件, css 改为 js 动态插入、保证只有一份
imgvueimg图标转化为 base64 输出到 img 标签的 src 参数中
bgvue自定义,默认'span'图标转化为 base64 输出到标签 style 中的 background-image 中微信小程序下不支持 svg 标签,可使用 text 标签输出图标组件

注:微信小程序使用bg的方式,因转化 base64 时使用到了 btoa 函数,但小程序环境下并没有该函数,故此需在全局提前注入 btoa 函数,此处提供一个 btoa 函数供参考:btoa

  • 通用参数 BaseFormatOption
参数名描述是否必填类型默认值
type选择预置的格式化方式FormatType'vue'
  • VueFormatOption type=vue | min
参数名描述是否必填类型默认值
svgAttrsvg 标签的额外属性string'v-on="$listeners"'
tag外层标签string''
  • BgFormatOption type=bg
参数名描述是否必填类型默认值
defaultColor图标组件默认颜色值string''
defaultSize图标组件默认大小string | number20
tag外层标签string'span'

自定义函数的参数

通用参数 FormatFnOption
参数名描述类型
name图标的名称string
origin默认输出值,可基于此微调输出内容string
SvgFormatOption
参数名描述类型
content图标 svg 的字符串string
className输出图标组件的类名string
type图标的类型string<"configurable" | "static" | "multiple">
tag外层标签string
cssVarscss 变量配置string
hideCustomVar隐藏自定义 css 变量boolean
StyleFormatOption
参数名描述类型
className输出图标组件的类名string
style自定义图标组件样式string
ComponentFormatOption
参数名描述类型
svgContentformatSvg 返回的 svg 字符串string
componentName输出成图标组件的组件名string
className输出图标组件的类名string
tagformat=bg 时生效,自定义组件的标签string
defaultColor图标组件默认颜色值string
defaultSize图标组件默认大小string | number
style自定义图标组件样式string
ExportStringFormatOption
参数名描述类型
componentName图标组件的组件名string
iconDirName图标组件输出的目录名string