ShenNong_Simple/packages/字体精简工具/node_modules/fontmin/cli.js
2024-10-30 15:28:42 +08:00

162 lines
3.6 KiB
JavaScript

#!/usr/bin/env node
/**
* @file cli
* @author junmer
*/
/* eslint-env node */
'use strict';
var fs = require('fs');
var meow = require('meow');
var path = require('path');
var stdin = require('get-stdin');
var Fontmin = require('./');
var _ = require('lodash');
var cli = meow({
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'
].join('\n')
}, {
'boolean': [
'basic-text',
'show-time',
'deflate-woff',
'css-glyph',
'version'
],
'string': [
'text',
'font-family'
],
'alias': {
t: 'text',
b: 'basic-text',
d: 'deflate-woff',
T: 'show-time',
h: 'help',
v: 'version'
}
});
// version
if (cli.flags.version) {
console.log(require('./package.json').version);
process.exit(0);
}
function isFile(path) {
if (/^[^\s]+\.\w*$/.test(path)) {
return true;
}
try {
return fs.statSync(path).isFile();
}
catch (err) {
return false;
}
}
function run(src, dest) {
cli.flags.showTime && console.time('fontmin use');
var pluginOpts = _.extend(
{},
cli.flags,
{
deflate: cli.flags.deflateWoff,
glyph: cli.flags.cssGlyph
}
);
var fontmin = new Fontmin()
.src(src)
.use(Fontmin.otf2ttf(pluginOpts))
.use(Fontmin.glyph(pluginOpts))
.use(Fontmin.ttf2eot(pluginOpts))
.use(Fontmin.ttf2svg(pluginOpts))
.use(Fontmin.ttf2woff(pluginOpts))
.use(Fontmin.css(pluginOpts));
if (process.stdout.isTTY) {
fontmin.dest(dest ? dest : 'build');
}
fontmin.run(function (err, files) {
if (err) {
console.error(err.stack || err);
process.exit(1);
}
if (!process.stdout.isTTY) {
files.forEach(function (file) {
process.stdout.write(file.contents);
});
}
cli.flags.showTime && console.timeEnd('fontmin use');
});
}
if (process.stdin.isTTY) {
var src = cli.input;
var dest;
if (!cli.input.length) {
console.error([
'Provide at least one file to optimize',
'',
'Example',
' fontmin font/* build',
' fontmin foo.ttf > foo-optimized.ttf',
' cat foo.ttf | fontmin > foo-optimized.ttf',
'',
'See `fontmin --help` for more information.'
].join('\n'));
process.exit(1);
}
if (src.length > 1 && !isFile(src[src.length - 1])) {
dest = src[src.length - 1];
src.pop();
}
src = src.map(function (s) {
if (!isFile(s) && fs.existsSync(s)) {
return path.join(s, '**/*');
}
return s;
});
run(src, dest);
}
else {
stdin.buffer(run);
}