npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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

构建命令,使用 tscsrc 目录下的文件编译到 lib 目录下,使用的是 commonjs 模块规范。同时也将 src/index.ts 文件使用 babel 编译到 lib/index.es.js , 使用的是 ECMAScript 模块规范,用于未来可以使用 tree shaking 打包特性。

基本用法

打包发布

请在打包发布1、2中选择一个步骤执行即可 注意:由于发布时使用了np模块,所以,在发布时,会在命令行提醒选择要发布的版本号、npm-tag等信息,请按照需要进行选择。

打包发布1

  1. 可直接使用封装的npm脚本:npm run icons:publish,即可完成从生成、编译到发布的一套流程。

打包发布2

  1. 确认从设计师拿到的图标命名是否正确。(单词顺序、单词拼写)
  2. 运行命令 npm run icons:generate, 生成 src/**/*.ts 文件
  3. 生成的 src 目录结构如下
src
├── dist.ts      # 经过压缩后的全量图标文件
├── index.ts     # 图标库入口
├── types.ts     # 类型定义
├── manifest.ts  # 生成的图标名字集合
├── fill
├── twotone
└── outline      # 三种主题,存放着图标的抽象树
  1. 检查名字准确无误、抽象树符合预期后,运行命令 npm run icons:build 进行编译
  2. 检查编译后的文件目录 lib
  3. 确保代码风格检查和测试通过:npm run lint, npm run icons:test
  4. 移除package.json文件中的prepublishOnly,修改version及其他可能需要的信息
  5. 执行npm publish
  6. 恢复package.json

添加新图标

  1. 确认从设计师拿到的三种图标风格名字是否一致且正确
  2. 将图标根据风格分别存放进 svg 目录下的 filloutlinetwotone 目录下
  3. 之后的流程同上文的打包发布流程一致

提交规范

  1. 不允许提交src下自动生成的ts文件
  2. 仅需要提供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 元数据流

svg-meta-data-with-theme-flow

这是一个高阶流,根据三种主题风格 filloutlinetwotone 分别发射出分支流,每个分支流上的数据的接口类型如下:

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$ 打平,并且进行了如下处理:

  1. 对于非旧图标(指使用设计师给的新图标,通常大小比较小),修改其 viewBox64 64 896 896

为什么是 64 64 896 896 ? 参见相关issue.