Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/a3mitskevich/vite-font-extractor-plugin
Vite plugin for extracting glyphes by ligatures from font and creating new minimized fonts with them
https://github.com/a3mitskevich/vite-font-extractor-plugin
Last synced: 21 days ago
JSON representation
Vite plugin for extracting glyphes by ligatures from font and creating new minimized fonts with them
- Host: GitHub
- URL: https://github.com/a3mitskevich/vite-font-extractor-plugin
- Owner: a3mitskevich
- License: mit
- Created: 2023-08-11T13:36:49.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-02-24T09:46:30.000Z (10 months ago)
- Last Synced: 2024-04-26T17:13:39.949Z (8 months ago)
- Language: TypeScript
- Size: 1.16 MB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- fucking-awesome-vite - vite-font-extractor-plugin - Utility that minification bundle fonts by glyphs. (Plugins / Framework-agnostic Plugins)
- awesome-vite - vite-font-extractor-plugin - Utility that minification bundle fonts by glyphs. (Plugins / Framework-agnostic Plugins)
README
# Vite font extractor plugin
**`vite-font-extractor-plugin`** is a vite plugin that to extracted glyphs from fonts that are used in applications and
change the original font files to minimize.> [!IMPORTANT]
> The main goal of this plugin is a minimize fonts and save easy use way on the page and in frameworks.## Installation
To install vite-font-extractor-plugin use npm:
```bash
npm install vite-font-extractor-plugin
```## Features
- Save ligatures
- Auto detect font ligatures by css `content: "."`
- Support goggle font urls
- Support zero config## Warning
> [!WARNING]
> When using the `auto` type, the system identifies only CSS properties with `content: "."`
> and attempts to extract all font ligatures from each font file.
> Furthermore, in every build, the system recalculates a hash on font files since the plugin cannot
> detect changes when dependent on Unicode.
>
> It is strongly recommended to use the `manual` type if these limitations are critical for your project## Usage
### Config file by zero config:
```javascript
// vite.config.js
import FontExtractor from "vite-font-extractor-plugin";export default defineConfig({
plugins: [
FontExtractor() // by default use "auto" type
],
})
```### Config file by auto config:
```javascript
// vite.config.js
import FontExtractor from "vite-font-extractor-plugin";export default defineConfig({
plugins: [
FontExtractor({ type: 'auto', targets: [] }) // 'targets' is not required and can be undefined
],
})
```### Config file by manual type behavior:
```javascript
// vite.config.js
import FontExtractor from "vite-font-extractor-plugin";const MaterialIconRegularTarget = {
fontName: 'Material Icons',
ligatures: ['abc, close'],
}export default defineConfig({
plugins: [
FontExtractor({ type: 'manual', targets: MaterialIconRegularTarget}), // 'targets' is required
],
})
```### Through JS import:
```javascript
// main.js
import Vue from 'vue';
import App from './App.vue';
import Vuetify from "vuetify";
// First way to import fonts
import 'material-design-icons-iconfont/dist/material-design-icons-no-codepoints.css';Vue.use(Vuetify)
export function createApp() {
const app = new Vue({
vuetify: new Vuetify({
icons: {
iconfont: 'md',
},
}),
render: (h) => h(App),
});return {app};
}createApp().app.$mount('#app');
```### Through CSS import:
```scss
// App.scss
// Second way to import font
@import "material-design-icons-iconfont/dist/material-design-icons-no-codepoints.css";
```### Through CSS file:
```scss
// material-design-icons-iconfont/dist/material-design-icons-no-codepoints.css
@charset "UTF-8";
@font-face {
// See font name here
font-family: 'Material Icons';
src: url("./fonts/MaterialIcons-Regular.eot");
src: url("./fonts/MaterialIcons-Regular.woff2") format("woff2"),
url("./fonts/MaterialIcons-Regular.woff") format("woff"),
url("./fonts/MaterialIcons-Regular.ttf") format("truetype");
...
}.material-icons {
...
}```
## Google fonts urls
Plugin additionally supports Google font url transformation to
enable [minification](https://developers.google.com/fonts/docs/getting_started?hl=en#optimizing_your_font_requests):### Config file
```javascript
// vite.config.js
import FontExtractor from "vite-font-extractor-plugin";const MaterialIconGoogleFontTarget = {
// Warning: "+" sign from url should be transformed to plain space sign
fontName: 'Material Icons', // 'Material+Icons' is wrong notation
ligatures: ['play_arrow', 'close'],
}export default defineConfig({
plugins: [
FontExtractor({targets: MaterialIconGoogleFontTarget}),
],
})
```### CSS file
```css
/* Import throw css import */
@import "https://fonts.googleapis.com/icon?family=Material+Icons";
```### HTML file
```html
```
## API
```
FontExtractor(pluginOption: PluginOption): Plugin
```### PluginOption parameters:
* **type** `"auto" | "manual"`: Type plugin behaviour.
* **targets** `Target[] | Target | undefined`: Targets for font extracting.
* **cache** `boolean | string | undefined`: Enable a minifying result cache.
* **logLevel** `LogLevel | undefined`: Setup a log level for plugin options. By default get a vite config logLevel.
* **apply** `"build" | "serve" | undefined`: Apply the plugin only for serve or build, or on certain conditions
* **ignore** `string[] | undefined`: Font names what will be ignored by plugin processing### Target parameters:
* **fontName** `string`: The font filename that is to be extracted.
* **ligatures** `string[] | undefined`: An array of ligatures to extracted from the font.
* **raws** `string[] | undefined`: An array of unicode and symbols that will found and extracted from the font.
* **withWhitespace** `boolean | undefined`: Set to true if you want to include whitespace glyphs in the font.### Returns
* **Plugin**: plugin model for vite.
## License
`vite-font-extractor-plugin` is released under the MIT License. See the LICENSE file for details.
## Contributions
Contributions are welcome! If you find a bug or want to add a new feature, please open an issue or submit a pull
request.