读取一组 SVG 图标,并输出 TTF/EOT/WOFF/WOFF2/SVG 字体。
Read a set of SVG icons and ouput a TTF/EOT/WOFF/WOFF2/SVG font, Generator of fonts from SVG icons.
Install · Usage · Command · Font Usage · API · options · npm · License
Features:
WOFF2, WOFF, EOT, TTF and SVG.React, ReactNative, Vue & TypeScript.Less/Sass/Stylus.css, less and etc).…
graph LR;
A[iconfont]-->C[Download SVG];
B[icomoon]-->C;
D[icongo]-->C;
E[yesicon]-->C;
click A "https://www.iconfont.cn" "阿里巴巴矢量图标库" _blank
click B "https://icomoon.io" "Pixel Perfect Icon Solutions" _blank
click D "https://icongo.github.io" "Include popular icons in your React projects easily icons." _blank
click E "https://yesicon.app/" "216,162 High-Quality Vector Icons from Top Design Teams." _blank
C .-> ide1
subgraph ide1 [Project]
svg -->a2[svgtofont create font]
a2 .-> b3[use font]
end
Icon Font Created By svgtofont
React & TypeScript.npm run test in the root directory to see the results.npm i svgtofont
[!NOTE]
This packagev5+is ESM only: Node 18+ is needed to use it and it must beimportinstead ofrequire.import svgtofont from 'svgtofont';
{
"scripts": {
"font": "svgtofont --sources ./svg --output ./font --fontName uiw-font"
},
"svgtofont": {
"css": {
"fontSize": "12px"
}
}
}
You can add configuration to package.json. #48
Support for .svgtofontrc and more configuration files.
{
"fontName": "svgtofont",
"css": true
}
/**
* @type {import('svgtofont').SvgToFontOptions}
*/
export default {
fontName: "iconfont",
}
[!NOTE]
This packagev5+is now pure ESM. Please read this.
import svgtofont from 'svgtofont';
import path from 'node:path';
svgtofont({
src: path.resolve(process.cwd(), 'icon'), // svg path, only searches one level, not recursive
dist: path.resolve(process.cwd(), 'fonts'), // output path
fontName: 'svgtofont', // font name
css: true, // Create CSS files.
}).then(() => {
console.log('done!');
});
Or
…
import { createSVG, createTTF, createEOT, createWOFF, createWOFF2, createSvgSymbol, copyTemplate, createHTML } from 'svgtofont/lib/utils';
const options = { ... };
async function createFont() {
const unicodeObject = await createSVG(options);
const ttf = await createTTF(options); // SVG Font => TTF
await createEOT(options, ttf); // TTF => EOT
await createWOFF(options, ttf); // TTF => WOFF
await createWOFF2(options, ttf); // TTF => WOFF2
await createSvgSymbol(options); // SVG Files => SVG Symbol
}
svgtofont(options)
Type:
config?: AutoConfOption
By default, settings are automatically loaded from .svgtofontrc and package.json. You can add configuration to package.json. #48
Support for .svgtofontrc and more configuration files.
Type:
Boolean
A value of false disables logging
Type:
(msg) => void
log callback function
Type:
String
Default value:dist=>fonts
The output directory.
Type:
Boolean
Default value:false
Output ./dist/react/, SVG generates react components.
git/git.svg
// ↓↓↓↓↓↓↓↓↓↓
import React from 'react';
export const Git = props => (
);
Type:
Boolean
Default value:false
Output ./dist/reactNative/, SVG generates reactNative components.
import { Text } from 'react-native';
const icons = { "Git": "__GitUnicodeChar__", "Adobe": "__AdobeUnicodeChar__" };
export const RangeIconFont = props => {
const { name, ...rest } = props;
return (
{icons[name]}
);
};
Type:
Boolean
Default value:false
Output ./dist/vue/, SVG generates vue components.
git/git.svg
// ↓↓↓↓↓↓↓↓↓↓
import { defineComponent, h } from 'vue';
export const Git = defineComponent({
name: 'Git',
props: {
class: {
type: String,
default: ''
}
},
setup(props, { attrs }) {
return () => h(
'svg',
{
viewBox: '0 0 20 20',
width: undefined,
height: undefined,
class: `svgtofont ${props.class}`,
...attrs
},
[]
);
}
});
Type:
Boolean
Default value:false
Output ./dist/svgtofont.json, The content is as follows:
{
"adobe": ["M14.868 3H23v19L14.868 3zM1 3h8.138L1 22V3zm.182 11.997H13.79l-1.551-3.82H8.447z...."],
"git": ["M2.6 10.59L8.38 4.8l1.69 1.7c-.24.85.15 1.78.93 2.23v5.54c-.6.34-1 .99-1..."],
"stylelint": ["M129.74 243.648c28-100.109 27.188-100.5.816c2.65..."]
}
Or you can generate the file separately:
const { generateIconsSource } = require('svgtofont/src/generate');
const path = require('path');
async function generate () {
const outPath = await generateIconsSource({
src: path.resolve(process.cwd(), 'svg'),
dist: path.resolve(process.cwd(), 'dist'),
fontName: 'svgtofont',
});
}
generate();
Type:
Boolean
Default value:false
Output ./dist/info.json, The content is as follows:
{
"adobe": {
"encodedCode": "\\ea01",
"prefix": "svgtofont",
"className": "svgtofont-adobe",
"unicode": ""
},
...
}
Type:
String
Default value:svg
output path
Type:
String
Default value:false
Clear output directory contents
Type:
String
Default value:iconfont
The font family name you want.
Type:
StringDefault value:undefined
The path of the templates, see src/styles or test/templates/styles to get reference about
how to create a template, file names can have the extension .template, like a filename.scss.template
Type:
Number
Default value:0xea01
unicode start number
Get Icon Unicode
getIconUnicode?: (name: string, unicode: string, startUnicode: number)
=> [string, number];
Type:
Boolean
Default value:false
should the name(file name) be used as unicode? this switch allows for the support of ligatures.
let's say you have an svg with a file name of add and you want to use ligatures for it. you would set up your processing as mentioned above and turn on this switch.
{
...
useNameAsUnicode: true
}
while processing, instead of using a single sequential char for the unicode, it uses the file name. using the file name as the unicode allows the following code to work as expected.
.icons {
font-family: 'your-font-icon-name' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
add
as you add more svgs and process them into your font you would just use the same pattern.
add
remove
edit
Type:
Boolean
Default value:false
adds possibility to use name (file name) in addition to codepoints. adds support of ligatures.
let's say you have some svgs and you want to use codepoints but for some of them for example with a file name of add you want to use ligatures for it. this option only adds ligatures and still allows for using codepoints as usual. this is in contrary to useNameAsUnicode which basically removes support for codepoints in favour of ligatures.
{
...
addLigatures: true
}
Type:
Boolean
Default value:false
consoles whenever {{ cssString }} template outputs unicode characters or css vars
Type:
String
Default value: font name
Create font class name prefix, default value font name.
Type:
Boolean|CSSOptions
Default value:false
Create CSS/LESS files, default true.
…
This is the setting for svgicons2svgfont
Type:
String
Default value:'iconfont'
The font family name you want.
Type:
String
Default value: the options.fontName value
The font id you want.
Type:
String
Default value:''
The font style you want.
Type:
String
Default value:''
The font weight you want.
Type:
Boolean
Default value:false
Creates a monospace font of the width of the largest input icon.
Type:
Boolean
Default value:false
Calculate the bounds of a glyph and center it horizontally.
Type:
Boolean
Default value:false
Normalize icons by scaling them to the height of the highest icon.
Type:
Number
Default value:MAX(icons.height)
The outputted font height (defaults to the height of the highest input icon).
Type:
Number
Default value:10e12
Setup SVG path rounding.
Type:
Number
Default value:0
The font descent. It is useful to fix the font baseline yourself.
Warning: The descent is a positive value!
Type:
Number
Default value:fontHeight - descent
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 value:undefined
The font metadata. You can set any character data in but it is the be suited place for a copyright mention.
Type:
Function
Default value:console.log
Allows you to provide your own logging function. Set to function(){} to
disable logging.
Type:
OptimizeOptionsDefault value:undefined
Some options can be configured with svgoOptions though it. [svgo](https
暂无开放 Issues,或尚未同步最近议题。