ランキングに戻る

ecomfe/fontmin

JavaScriptecomfe.github.io/fontmin

Minify font seamlessly

fontfontminsubseticon-font
スター成長
スター
6.2k
フォーク
334
週間成長
Issue
64
2k4k6k
2015年3月2018年12月2022年10月2026年7月
成果物npmnpm install fontmin
README

fontmin

Minify font seamlessly

NPM version Build Status Downloads Font support

Homepage

Install

$ npm install --save fontmin

Notice

fontmin v2.x only support ES Modules, and run on Node v16+.

If you need to use CommonJS version, please install fontmin v1.x:

npm install --save fontmin@1

Usage

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('fonts/*.ttf')
    .dest('build/fonts');

fontmin.run(function (err, files) {
    if (err) {
        throw err;
    }

    console.log(files[0]);
    // => { contents: <Buffer 00 01 00 ...> }
});

You can use gulp-rename to rename your files:

import Fontmin from 'fontmin';
const rename = require('gulp-rename');

const fontmin = new Fontmin()
    .src('fonts/big.ttf')
    .use(rename('small.ttf'));

API

new Fontmin()

Creates a new Fontmin instance.

.src(file)

Type: Array|Buffer|String

Set the files to be optimized. Takes a buffer, glob string or an array of glob strings as argument.

.dest(folder)

Type: String

Set the destination folder to where your files will be written. If you don't set any destination no files will be written.

.use(plugin)

Type: Function

Add a plugin to the middleware stack.

.run(cb)

Type: Function

Optimize your files with the given settings.

cb(err, files, stream)

The callback will return an array of vinyl files in files and a Readable/Writable stream in stream

Plugins

The following plugins are bundled with fontmin:

  • glyph — Compress ttf by glyph.
  • ttf2eot — Convert ttf to eot.
  • ttf2woff — Convert ttf to woff.
  • ttf2woff2 — Convert ttf to woff2.
  • ttf2svg — Convert ttf to svg.
  • css — Generate css from ttf, often used to make iconfont.
  • svg2ttf — Convert font format svg to ttf.
  • svgs2ttf — Concat svg files to a ttf, just like css sprite.
  • otf2ttf — Convert otf to ttf.

.glyph()

Compress ttf by glyph.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.glyph({
        text: '天地玄黄 宇宙洪荒',
        hinting: false         // keep ttf hint info (fpgm, prep, cvt). default = true
    }));

.ttf2eot()

Convert ttf to eot.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2eot());

.ttf2woff()

Convert ttf to woff.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2woff({
        deflate: true           // deflate woff. default = false
    }));

.ttf2woff2()

Convert ttf to woff2.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.ttf2woff2());

.ttf2svg()

Convert ttf to svg.

you can use imagemin-svgo to compress svg:

import Fontmin from 'fontmin';
const svgo = require('imagemin-svgo');

const fontmin = new Fontmin()
    .use(Fontmin.ttf2svg())
    .use(svgo());

.css()

Generate css from ttf, often used to make iconfont.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.css({
        fontPath: './',         // location of font file
        base64: true,           // inject base64 data:application/x-font-ttf; (gzip font with css).
                                // default = false
        glyph: true,            // generate class for each glyph. default = false
        iconPrefix: 'my-icon',  // class prefix, only work when glyph is `true`. default to "icon"
        fontFamily: 'myfont',   // custom fontFamily, default to filename or get from analysed ttf file
        asFileName: false,      // rewrite fontFamily as filename force. default = false
        local: true             // boolean to add local font. default = false
    }));

Alternatively, a transform function can be passed as fontFamily option.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .use(Fontmin.css({
        // ...
        fontFamily: function(fontInfo, ttf) {
          return "Transformed Font Family Name"
        },
        // ...
    }));

.svg2ttf()

Convert font format svg to ttf.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('font.svg')
    .use(Fontmin.svg2ttf());

.svgs2ttf()

Concat svg files to a ttf, just like css sprite.

awesome work with css plugin:

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('svgs/*.svg')
    .use(Fontmin.svgs2ttf('font.ttf', {fontName: 'iconfont'}))
    .use(Fontmin.css({
        glyph: true
    }));

.otf2ttf()

Convert otf to ttf.

import Fontmin from 'fontmin';

const fontmin = new Fontmin()
    .src('fonts/*.otf')
    .use(Fontmin.otf2ttf());

CLI

$ npm install -g fontmin
$ fontmin --help

  Usage
    $ fontmin <file> [<output>]
    $ fontmin <directory> [<output>]
    $ fontmin <file> > <output>
    $ cat <file> | fontmin > <output>

  Example
    $ fontmin fonts/* build
    $ fontmin fonts build
    $ fontmin foo.ttf > foo-optimized.ttf
    $ cat foo.ttf | fontmin > foo-optimized.ttf

  Options
    -t, --text                          require glyphs by text
    -b, --basic-text                    require glyphs with base chars
    -d, --deflate-woff                  deflate woff
    --font-family                       font-family for @font-face CSS
    --css-glyph                         generate class for each glyf. default = false
    -T, --show-time                     show time fontmin cost

you can use curl to generate font for websites running on PHP, ASP, Rails and more:

$ text=`curl www.baidu.com` && fontmin -t "$text" font.ttf

or you can use html-to-text to make it smaller:

$ npm install -g html-to-text
$ text=`curl www.baidu.com | html-to-text` && fontmin -t "$text" font.ttf

what is more, you can use phantom-fetch-cli to generate font for SPA running JS template:

$ npm install -g phantom-fetch-cli
$ text=`phantom-fetch http://www.chinaw3c.org` && fontmin -t "$text" font.ttf

Thanks

License

MIT © fontmin

関連リポジトリ
tonsky/FiraCode

Free monospaced font with programming ligatures

ClojureSIL Open Font License 1.1programming-ligaturesfont
81.8k3.2k
FortAwesome/Font-Awesome

The iconic SVG, font, and CSS toolkit

JavaScriptnpmOtherfontawesomeicons
fontawesome.com
76.8k12.2k
ryanoasis/nerd-fonts

Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more

CSSnpmOtherfontspatched-fonts
nerdfonts.com
63.8k3.9k
subframe7536/maple-font

Maple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项

PythonPyPISIL Open Font License 1.1fontmonospace-font
font.subf.dev
27.5k1.1k
lxgw/LxgwWenKai

An unprofessional open-source Chinese font derived from Fontworks' Klee One. 一款非专业的开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。

ShellSIL Open Font License 1.1fontcjk
lxgw.github.io/2021/01/28/Klee-Simpchin/
25.2k634
be5invis/Iosevka

Versatile typeface for code, from code.

JavaScriptnpmSIL Open Font License 1.1iosevkafont
be5invis.github.io/Iosevka
22.5k674
you-dont-need/You-Dont-Need-JavaScript

CSS is powerful, you can do a lot of things without JS.

HTMLGNU General Public License v3.0cssjavascript
20.6k1.5k
rsms/inter

The Inter font family

PythonPyPISIL Open Font License 1.1typefacefont
rsms.me/inter/
19.7k477
githubnext/monaspace

An innovative superfamily of fonts for code

ShellSIL Open Font License 1.1fontfonts
monaspace.githubnext.com
19.5k326
gztchan/awesome-design

🌟 Curated design resources from all over the world.

designui
17.3k1.2k
source-foundry/Hack

A typeface designed for source code

ShellOtherfonttypeface
sourcefoundry.org/hack/
17.3k659
adobe-fonts/source-han-sans

Source Han Sans | 思源黑体 | 思源黑體 | 思源黑體 香港 | 源ノ角ゴシック | 본고딕

PythonPyPIOthersource-hanopentype
16.9k1.4k