主要是公司内部的 SVG 制做的图标, 提供网页当中使用的字体.
代码仓库在 https://github.com/jimengio/j...html
从 SVG 文件到能够给前端用的 npm 模块, 主要通过:前端
生成字体文件跟 CSS 映射咱们以前用的是 webfonts-generator,
不过这个模块已经中止维护了, npm 上的版本仍是有 bug 的, 主分支的还好一点.
考虑到使用不方便, 一致在寻找替代方案. 在一丝的指导下切换到了 font-carrier.git
font-carrier 能够生成字体, 以及基础的 CSS 文件.
不过跟 webfonts-generator 不同的是生成的 CSS 不要 class 来区分图标,
而是用 HTML 当中 utf8 字符直接跟图标字体对应... 固然原理跟之前同样..github
<i dangerouslySetInnerHTML={{ __html: `&#${fontsDict[props.name]}` || `NONE:${props.name}` }} ></i>
生成字体文件的代码就是调用 font-carrier 的 API,
另外本身记录了一个 dict
JSON 对象, 用来存储码表...web
initialFontValue = 0xe000 String.fromCharCode(initialFontValue) fonts = fontCarrier.create() dict = {} icons.forEach (icon) -> initialFontValue += 1 char = String.fromCharCode initialFontValue fonts.setSvg(char, fs.readFileSync("./svg/#{icon}.svg").toString()) dict[icon] = initialFontValue fonts.output path: './src/fonts/jimo'
而后主要是生成类型文件的工做.. 基于 dict
数据生成 enum
, 基本够用.npm
使用 font-carrier 过程中有遇到一些问题, 联系维护者解决掉了,svg
遇到一个圆弧反向的问题, 原本不知道怎么下手, 用 Glyphs 看了 TTF 文件的线条,,
注意到全部的线条跟原先的 SVG 在 Sketch 里面恰好反向了, 就怀疑是转的问题,
SVG 的 arc 圆弧有一个 SWEEP 值, 表示圆弧的方向, 就以为是这个用错了.
维护者排查了一下, 是已知的问题, 在 svgpath 模块当中已经解决:
https://github.com/fontello/s...
最后靠升级依赖的版本解决掉了, 按说后续不会再遇到.工具
图标对应的是 UTF8 的字符, 最开始我选择的数值比较小, 主要跳过经常使用的码位.
不过当时出现了问题, 就是图标左右居中不正常, 有不少明显往左边偏移...
排查之后缘由是选择的码位范围有问题, 恰好命中了一些奇怪的字符...
维护者推荐的码位范围是 0xe000
以上, 我估计对应的是空白的 UTF8 码位. 解决了.字体
从接手项目的时候就提到了 SVG 的图标须要曲线闭合,
不是彻底懂什么意思, 估计是路径要求闭合, 方便字体填充颜色之类的.
设计师没处理好的话, 图标是显示空白的. 用 https://iconfont.cn 能够验证.设计
另一丝推荐的方案是咱们设计师直接用 https://www.iconfont.cn 维护.
工具上能够提供 CSS 还有码位的导出, 比起咱们手工处理要省事一点.
没想清楚, 后续若是有契机并且设计师能够维护的话, 考虑是否迁移过去.
其余关于积梦前端的模块和工具能够查看咱们的 GitHub 主页 https://github.com/jimengio .
目前团队正在扩充, 招聘文档见 GitHub 仓库 https://github.com/jimengio/h... .