Webpack Encore: Download Google Fonts

TL;DR

  • Installiere @beyonk/google-fonts-webpack-plugin
npm i -D @beyonk/google-fonts-webpack-plugin
  • Stelle das Plugin bereit (z.B.: webpack.config.js):
const Encore = require('@symfony/webpack-encore');
const GoogleFontsPlugin = require("@beyonk/google-fonts-webpack-plugin");

[...]

Encore
    .addPlugin(new GoogleFontsPlugin({
        fonts: [
            { family: 'Mulish' },
            { family: 'Poppins' },
        ]
    }))
;

[...]

Google Fonts Webpack Plugin

Mit der Hilfe des google-fonts-webpack-plugin werden Schriften von so genannten Google Fonts Helpers heruntergeladen.

Google Fonts Helper sind Umgebungen um Google Fonts selbst zu hosten.

Und ja Google liefer auch einen Google Fonts Helper.

Leider wurde das Webpack Plugin seit einer Weile nicht erneuert.

Zum Glück gibt es den Fork @beyonk/google-fonts-webpack-plugin.

An sich ist das Webpack Plugin recht simple. Es stellt für jede gewünschte Schrift Anfragen an einen google-webfonts-helper.

Wird die Schrift gefunden, wird sie samt Varianten und Formaten in einen lokalen Ordner geladen.

Wir können Varianten, Formate, lokale Ordner Namen so wie google-webfonts-helper einstellen.

Hier eine Übersicht der Einstellungen.

Merken wir uns, das Webpack Plugin kann Dinge herunterladen. Optional können wir Dinge einstellen, um den Prozess zu verfeinern.

Installiert wird das Plugin:

npm i -D @beyonk/google-fonts-webpack-plugin

Google Fonts mit Webpack.Encore herunterladen

  • Öffne deine webpack.config.js.
  • Require das Plugin:
const GoogleFontsPlugin = require("@beyonk/google-fonts-webpack-plugin");
  • Nun stelle das Plugin in Webpack bereit:
Encore
    .addPlugin(new GoogleFontsPlugin({
        formats: ['woff2'],
        fonts: [
            { family: 'Mulish' },
            { family: 'Poppins', variants: ['regular', "800"]  },
        ]
    }))
;

In Fonts schütten wir Google Fonts rein. Es wird mindestens eine Familie erwartet. Optional können wir Varianten (regular, italic, 800), Subsets (Latin, Greek, …) oder Formate (eot, woff, woff2, ttf, svg) überschreiben.

Sobald nun Webpack anfängt Dinge zu tun, werden die Schriftarten Mulish und Poppins in den lokalen Asset Ordner unter fonts geladen.

Dadurch das Webpack immer Schriften herunterlädt ist das Entwickeln langsam.

Wir warten halt immer bis alle Schriften verfügbar sind.

Alternativ laden wir Schriften nur, wenn Production gebundelt wird. Dafür passen wir unser Snippet an:

if (Encore.isProduction()) {
    Encore
        .addPlugin(new GoogleFontsPlugin({
            formats: ['woff2'],
            fonts: [
                { family: 'Mulish' },
                { family: 'Poppins', variants: ['regular', "800"]  },
            ]
        }))
    ;
}

Wenn wir jetzt das Projekt einmal aufsetzen, einmal Produktion laufen. Schon Schriften und die gewohnte Performance verfügbar.

Fonts konsumieren

Google Fonts Webpack Plugin stellt uns eine css bereit.

Sobald wir diese Datei einbinden werden die heruntergeladenen Schriften im Browser verfügbar.

<link rel="stylesheet" href="/assets/fonts/fonts.css">

Also können wir die Schriftarten wie gewohnt in CSS, SCSS, … nutzen.

p {
    font-family: 'Poppins', 'Mulish', 'sans-serif';
}

Kudos

Big thanks to:

2 Antworten

  1. Avatar von Drevion
    Drevion

    Nettes Projekt wo die Google Fonts als NPM Paket bereit gestellt werden: https://fontsource.org
    Damit liegen die Fonts immer bereit und müssen nicht extra runtergeladen werden. Nachteil: keine legacy Formate wie ttf oder eot, nur „mordernes“ woff und woff2 Format.

    1. Sehr schön, fontsource klingt interessant.

      Da woff2 in den meisten Fällen ausreicht ist es auf meiner Mal-Testen-Liste gelandet. Danke für den Tipp.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert