yhlicons-svg
v1.0.0
Published
Ant Design Icons
Downloads
85
Readme
项目命令
npm run icons:generate
本项目中最重要的生成命令,运行后将读取 svg
目录下的所有图标文件,并通过 build/templates
中的模板文件,将 svg
转化成一个 json
格式的抽象树,生成 ts
文件并且存储在 src
目录中。
npm run icons:build
构建命令,使用 tsc
将 src
目录下的文件编译到 lib
目录下,使用的是 commonjs
模块规范。同时也将 src/index.ts
文件使用 babel
编译到 lib/index.es.js
, 使用的是 ECMAScript
模块规范,用于未来可以使用 tree shaking
打包特性。
基本用法
打包发布
请在打包发布1、2中选择一个步骤执行即可
注意:由于发布时使用了np
模块,所以,在发布时,会在命令行提醒选择要发布的版本号、npm-tag等信息,请按照需要进行选择。
打包发布1
- 可直接使用封装的npm脚本:
npm run icons:publish
,即可完成从生成、编译到发布的一套流程。
打包发布2
- 确认从设计师拿到的图标命名是否正确。(单词顺序、单词拼写)
- 运行命令
npm run icons:generate
, 生成src/**/*.ts
文件 - 生成的
src
目录结构如下
src
├── dist.ts # 经过压缩后的全量图标文件
├── index.ts # 图标库入口
├── types.ts # 类型定义
├── manifest.ts # 生成的图标名字集合
├── fill
├── twotone
└── outline # 三种主题,存放着图标的抽象树
- 检查名字准确无误、抽象树符合预期后,运行命令
npm run icons:build
进行编译 - 检查编译后的文件目录
lib
- 确保代码风格检查和测试通过:
npm run lint
,npm run icons:test
- 移除
package.json
文件中的prepublishOnly
,修改version
及其他可能需要的信息 - 执行
npm publish
- 恢复
package.json
添加新图标
- 确认从设计师拿到的三种图标风格名字是否一致且正确
- 将图标根据风格分别存放进
svg
目录下的fill
、outline
和twotone
目录下 - 之后的流程同上文的打包发布流程一致
提交规范
- 不允许提交src下自动生成的ts文件
- 仅需要提供svg目录下3种不同样式的svg文件,其他ts、js等会在编译过程中自动生成
进阶指南
工作流
图标的处理可以抽象成管道的流动,所以使用了 rxjs
来优雅地描述处理的过程。
命令 npm run icons:generate
的本质就是运行 build/generateIcon.ts
中的 build(env)
函数。
初始化环境
SVGO
处理器配置
单色图标的 SVGO
处理器会额外清除路径元素上的 fill
属性,因为单色图标路径上的 fill
是没有必要的
- 清理原来的旧的生成文件
本质是清理 env.paths
路径中以 _OUTPUT
结尾的标识符所代表的文件或者表达式
- 规范化图标命名
这是单向一次性的过程,会根据 build/constants.ts
中的 renameMapper
重新命名 svg
目录下的图标文件。
最好重命名都写在该映射表下,重命名会同时影响三种主题风格下的同名图标
流
svgMetaDataWithTheme$
SVG 元数据流
这是一个高阶流,根据三种主题风格 fill
、outline
、twotone
分别发射出分支流,每个分支流上的数据的接口类型如下:
export interface BuildTimeIconMetaData {
identifier: string; // 标识符,以大写风格名结尾,例如:AccountBookFill、AlertFill
icon: IconDefinition; // 图标定义类型
}
上述的图标定义类型接口如下:
export interface IconDefinition {
name: string; // kebab-case-style
theme: ThemeType;
icon:
| ((primaryColor: string, secondaryColor: string) => AbstractNode) // 接受主色和副色生成抽象树的函数
| AbstractNode; // 定义SVG结构的抽象树
}
BuildTimeIconMetaData$
构建时图标原数据流
该数据流将高阶流 svgMetaDataWithTheme$
打平,并且进行了如下处理:
- 对于非旧图标(指使用设计师给的新图标,通常大小比较小),修改其
viewBox
为64 64 896 896
。
为什么是
64 64 896 896
? 参见相关issue.