A Webpack loader that generates fonts from your SVG icons and allows you to use your icons in your HTML.
webfonts-loader
uses the webfonts-generator
plugin to create fonts in any format. It also generates CSS files so that you can use your icons directly in your HTML, using CSS classes.
npm install webfonts-loader
An example of usage can be found in the test/
directory of this repository.
Add this rule to your Webpack config:
{
test: /\.font\.js/,
loader: ExtractTextPlugin.extract({
use: [
'style-loader',
'css-loader',
'webfonts-loader'
]
})
}
So that each font configuration file will be loaded using this rule.
You can provide options
objects to configure the loader behaviour:
{
test: /\.font\.js/,
loader: ExtractTextPlugin.extract({
use: [
'style-loader',
'css-loader',
{
loader: 'webfonts-loader',
options: { ... }
}
]
})
}
Available options are:
This is the URL prefix for generated links (e.g. /static/
or https://cdn.project.net/
). Should typically match Webpack's config.output.publicPath
.
If you pass types
, fileName
or any other font config option, it will be used as a default (unless overriden in font config file).
The config file allows you to specify parameters for the loader to use. Here is an example configuration file:
// myfont.font.js
module.exports = {
'files': [
'./myfont/*.svg'
],
'fontName': 'myfonticons',
'classPrefix': 'myfonticon-',
'baseSelector': '.myfonticon',
'types': ['eot', 'woff', 'woff2', 'ttf', 'svg'],
'fileName': 'app.[fontname].[hash].[ext]'
};
Then you have to require the configuration file:
// entry.js
require('./myfont.font');
The loader will then generate:
- CSS with the base and class prefix
- Font files for the SVG icons
The base CSS selector, under which each icon class is to be created. See webfonts-generator#templateoptions
The prefix to be used with each icon class. See webfonts-generator#templateoptions
See webfonts-generator#csstemplate
If true the font is encoded in base64 and embedded inside the @font-face
declaration, otherwise font files are written to disk.
Default: false
Optional. The length of hash in fileName
.
Min: 8
Max: 32
Default: 20
The generated font file names. These elements can be used:
[fontname]
: the value of thefontName
parameter[ext]
: the extension of the font file being generated (eot
, ...)[hash]
: the hash of the current compilation[chunkhash]
: the hash of the SVG files
This option can be also configured globally in the webpack loader options.
Optional. The generated codepoints file names.
Examples:
emitCodepoints: true
: emits a javascript file named[fontname].codepoints.js
in theweb
(default) formatemitCodepoints: '[fontname].codepoints.fonts.js'
: emits a javascript file named[fontname].codepoints.fonts.js
in thecommonjs
formatemitCodepoints: { fileName: '[fontname].codepoints.json', type: 'json'] }
: emits a file named[fontname].codepoints.json
in thejson
formatemitCodepoints: [{ fileName: '[fontname].codepoints.json', type: 'json'] }, { fileName: '[fontname].codepoints.js', type: 'web'] }, { fileName: '[fontname].codepoints.inc.js', type: 'web'] }]
: emits three files with their respective names and types
These are the existing formats:
web
: (default): generates a file containing the array of codepoints in a format suitable for inclusion in html pages.
Example (for a font named myfonticons):
if (typeof webfontIconCodepoints === 'undefined') {
webfontIconCodepoints = {};
}
webfontIconCodepoints["myfonticons"] = {"alert":61697,"arrow-down":61698,"arrow-left":61699};
commonjs
: generates a file containing the array of codepoints in the commonjs format, for use withrequire
.
module.exports = {"alert":61697,"arrow-down":61698,"arrow-left":61699}
json
: generates a file containing the array of codepoints in the JSON format.
{"alert":61697,"arrow-down":61698,"arrow-left":61699,"arrow-right":61700,"arrow-small-down":61701}
These elements can be used in the filename:
[fontname]
: the value of thefontName
parameter[chunkhash]
: the hash of the SVG files
This option can be also configured globally in the webpack loader options.
See webfonts-generator#fontname