Generator of fonts from SVG icons.
Features:
- Supported font formats:
WOFF2
,WOFF
,EOT
,TTF
andSVG
. - Support configuration Files - use a
JavaScript
,JSON
orYAML
file to specify configuration information for an entire directory and all of its subdirectories. - Supported browsers: IE8+.
- Allows using custom templates (example
css
,scss
,styl
etc). - No extra dependencies as
gulp
,grunt
or other big tools. - Tested on all platforms (
linux
,windows
andosx
). - CLI.
- Webpack plugin.
npm install --save-dev webfont
const webfont = require("webfont").default;
webfont({
files: "src/svg-icons/**/*.svg",
fontName: "my-font-name",
})
.then((result) => {
console.log(result);
return result;
})
.catch((error) => {
throw error;
});
Or
import webfont from "webfont";
webfont({
files: "src/svg-icons/**/*.svg",
fontName: "my-font-name",
})
.then((result) => {
console.log(result);
return result;
})
.catch((error) => {
throw error;
});
- Type:
string
|array
- Description: A file glob, or array of file globs. Ultimately passed to fast-glob to figure out what files you want to get.
- Note:
node_modules
andbower_components
are always ignored.
- Type:
string
- Description: Path to a specific configuration file
(JSON, YAML, or CommonJS)
or the name of a module innode_modules
that points to one. - Note: If you do not provide
configFile
, webfont will search up the directory tree for configuration file in the following places, in this order:- a
webfont
property inpackage.json
- a
.webfontrc
file (with or without filename extension:.json
,.yaml
, and.js
are available) - a
webfont.config.js
file exporting a JSobject
. The search will begin in the working directory and move up the directory tree until it finds a configuration file.
- a
- Type:
string
- Default:
webfont
- Description: The font family name you want.
- Type:
array
, - Default:
['svg', 'ttf', 'eot', 'woff', 'woff2']
, - Possible values:
svg, ttf, eot, woff, woff2
, - Description: Font file types to generate.
-
Type:
string
-
Default:
null
-
Possible values:
css
,scss
,styl
(feel free to contribute more). -
Note: If you want to use a custom template use this option pass in a path
string
like this:webfont({ template: "./path/to/my-template.css", });
Or
webfont({ template: path.resolve(__dirname, "./my-template.css"), });
Or
webfont({ template: path.resolve(__dirname, "./my-template.styl"), });
- Type:
string
- Default:
null
- Description: Default font class name.
- Type:
string
- Default:
./
- Description: Path to generated fonts in the
CSS
file.
- Type:
string
- Default: Gets is from
fontName
if not set, but you can specify any value. - Description: Template font family name you want.
-
Type:
function
-
Default:
null
-
Description: If you want to transform glyph metadata
(e.g. titles of CSS classes)
before transferring it in your style template for your icons, you can use this option with glyphs metadata object. -
Example:
import webfont from "webfont"; webfont({ files: "src/svg-icons/**/*.svg", glyphTransformFn: (obj) => { obj.name += "_transform"; return obj; }, }) .then((result) => { console.log(result); return result; }) .catch((error) => { throw error; });
- Type:
bool
- Default:
true
- Description: Whether you want to sort the icons sorted by name.
These can be appended to webfont options. These are passed directly to svgicons2svgfont.
- Type:
string
- Default: Taken from the webfont fontName option
- Description: The font family name you want.
- Type:
string
- Default: The
fontName
value - Description: The font id you want.
- Type:
string
- Default:
''
- Description: The font style you want.
- Type:
string
- Default:
''
- Description: The font weight you want.
- Type:
boolean
- Default:
false
- Description: Creates a monospace font of the width of the largest input icon.
- Type:
boolean
- Default:
false
- Description: Calculate the bounds of a glyph and center it horizontally.
- Type:
boolean
- Default:
false
- Description: Normalize icons by scaling them to the height of the highest icon.
- Type:
number
- Default:
MAX(icons.height)
- Description: The outputted font height (defaults to the height of the highest input icon).
- Type:
number
- Default:
10e12
Setup SVG path rounding.
- Type:
number
- Default:
0
- Description: The font descent. It is useful to fix the font baseline yourself.
- Warning: The descent is a positive value!.
- Type:
number
- Default:
fontHeight - descent
- Description: The font ascent. Use this options only if you know what you're doing. A suitable value for this is computed for you.
- Type:
string
- Default:
undefined
- Description: The font metadata. You can set any character data in, but this is the recommended place for a copyright mention.
- Type:
function
- Default:
console.log
- Description: Allows you to provide your own logging function. Set to
function(){}
to disable logging.
The interface for command-line usage is fairly simplistic at this stage, as seen in the following usage section.
Add the cli
script to your package.json
file's scripts
object:
{
"scripts": {
"webfont": "node node_modules/webfont/dist/cli.js"
}
}
If you're using cross-env:
{
"scripts": {
"webfont": "cross-env node_modules/webfont/dist/cli.js"
}
}
Usage: webfont [input] [options]
Input: File(s) or glob(s).
If an input argument is wrapped in quotation marks, it will be passed to "fast-glob"
for cross-platform glob support.
Options:
--config
Path to a specific configuration file (JSON, YAML, or CommonJS)
or the name of a module in \`node_modules\` that points to one.
If no \`--config\` argument is provided, webfont will search for
configuration files in the following places, in this order:
- a \`webfont\` property in \`package.json\`
- a \`.webfontrc\` file (with or without filename extension:
\`.json\`, \`.yaml\`, and \`.js\` are available)
- a \`webfont.config.js\` file exporting a JS object
The search will begin in the working directory and move up the
directory tree until a configuration file is found.
-f, --font-name
The font family name you want, default: "webfont".
-h, --help
Output usage information.
-v, --version
Output the version number.
-r, --formats
Only this formats generate.
-d, --dest
Destination for generated fonts.
-t, --template
Type of template (\`css\`, \`scss\`, \`styl\`) or path to custom template.
'
-s, --dest-template
Destination for generated template. If not passed used \`dest\` argument value.
-c, --template-class-name
Class name in css template.
-p, --template-font-path
Font path in css template.
-n, --template-font-name
Font name in css template.
--no-sort
Keeps the files in the same order of entry
--verbose
Tell me everything!.
For "svgicons2svgfont":
--font-id
The font id you want, default as "--font-name".
--font-style
The font style you want.
--font-weight
The font weight you want.
--fixed-width
Creates a monospace font of the width of the largest input icon.
--center-horizontally
Calculate the bounds of a glyph and center it horizontally.
--normalize
Normalize icons by scaling them to the height of the highest icon.
--font-height
The outputted font height [MAX(icons.height)].
--round
Setup the SVG path rounding [10e12].
--descent
The font descent [0].
--ascent
The font ascent [height - descent].
--start-unicode
The start unicode codepoint for files without prefix [0xEA01].
--prepend-unicode
Prefix files with their automatically allocated unicode codepoint.
--metadata
Content of the metadata tag.
--add-hash-in-font-url
Generated font url will be : [webfont].[ext]?v=[hash]
The CLI can exit the process with the following exit codes:
- 0: All ok.
- 1: Something unknown went wrong.
- Other: related to using packages.
- Webpack plugin -
webpack
plugin. - svgicons2svgfont - Simple tool to merge multiple icons to an SVG font.
- svg2ttf - Converts SVG fonts to TTF format.
- ttf2eot - Converts TTF fonts to EOT format.
- ttf2woff - Converts TTF fonts to WOFF format.
- wawoff2 - Converts TTF fonts to WOFF2 and versa vice.
- The ability to generate from any type to any type.
- More tests, include CLI test.
- Improved docs.
- Reduce package size (maybe implement
ttf2woff2
with native js library). - Improve performance (maybe use cache for this).
Feel free to push your code if you agree with publishing under the MIT license.
Check our Changelog
Check our License