So verwenden Sie font-awesome Symbole aus Node-Modulen

111

Ich habe font-awesome 4.0.3 Symbole mit installiert npm install.

Wenn ich es von Node-Modulen verwenden muss, wie soll ich es in einer HTML-Datei verwenden?

Wenn ich die weniger Dateien bearbeiten muss, muss ich sie in Knotenmodulen bearbeiten?

Govan
quelle
Haben Sie jemals den "richtigen" Weg gefunden, dies zu tun? Ich verwende derzeit nur eine Schluckaufgabe, um das Zeug aus node_modules in mein öffentliches Verzeichnis zu kopieren.
Sjmeverett
Ich habe es später als Laubenkomponente verwendet ...
Govan

Antworten:

106

Installieren als npm install font-awesome --save-dev

In Ihrer Datei ohne Entwicklung können Sie entweder die gesamte Schriftart mit weniger Aufwand importieren @import "node_modules/font-awesome/less/font-awesome.less"oder in diese Datei schauen und nur die Komponenten importieren, die Sie benötigen. Ich denke, dies ist das Minimum für grundlegende Symbole:

/* adjust path as needed */
@fa_path: "../node_modules/font-awesome/less";
@import "@{fa_path}/variables.less";
@import "@{fa_path}/mixins.less";
@import "@{fa_path}/path.less";
@import "@{fa_path}/core.less";
@import "@{fa_path}/icons.less";

Auf diese Weise werden Sie immer noch nicht so viele Bytes speichern. In beiden Fällen werden Sie zwischen 2-3.000 Zeilen nicht minimierten CSS einfügen.

Sie müssen die Schriftarten auch selbst aus einem Ordner bereitstellen, der /fonts/in Ihrem öffentlichen Verzeichnis aufgerufen wird . Sie können sie dort einfach mit einer einfachen Schluckaufgabe kopieren, zum Beispiel:

gulp.task('fonts', function() {
  return gulp.src('node_modules/font-awesome/fonts/*')
    .pipe(gulp.dest('public/fonts'))
})
Kevin Carmody
quelle
9
Es muss mehr betont werden, dass die Schriftarten auch in einem Schriftartenordner bereitgestellt werden müssen ... Ich habe wahrscheinlich eine Stunde damit verbracht, dieses einfache kleine Ding herauszufinden.
Alex J
3
Sie können den Pfad der Schriftstatik auch anpassen, indem Sie die Variable fa-font-pathan den gewünschten Ort setzen.
Zusatzstoff
Im obigen Beispiel müssen Sie Ihren weniger Importen mit der folgenden Überschreibung folgen, damit die von gulp kopierten font-awesome-Schriftdateien nach der Bereitstellung gefunden werden:@fa-font-path: "/public/fonts";
CAK2
56

Sie müssen den richtigen Schriftpfad festlegen. z.B

my-style.scss

$fa-font-path:"../node_modules/font-awesome/fonts";
@import "../node_modules/font-awesome/scss/font-awesome";
.icon-user {
  @extend .fa;
  @extend .fa-user;
}
Andreas Frische
quelle
3
Das gleiche gilt für Sass. Pfad ../assets/font-awesome/fontsfunktioniert für mich. Vielen Dank.
Andrey
16

In meiner style.css-Datei

/* You can add global styles to this file, and also import other style files */

@import url('../node_modules/font-awesome/css/font-awesome.min.css');
Ken
quelle
12

Sie müssen die Dateien im Rahmen Ihres Erstellungsprozesses kopieren. Sie können beispielsweise ein npm postinstallSkript verwenden, um die Dateien in das richtige Verzeichnis zu kopieren:

"postinstall": "cp -R node_modules/font-awesome/fonts ./public/"

Für einige Build-Tools gibt es bereits vorhandene Font-Awesome-Pakete. Zum Beispiel hat Webpack Font-Awesome-Webpack, mit dem Sie einfach require('font-awesome-webpack').

Wilfred Hughes
quelle
11

Verwenden von Webpack und scss:

Installieren Sie font-awesome mit npm (mithilfe der Setup-Anweisungen unter https://fontawesome.com/how-to-use ).

npm install @fortawesome/fontawesome-free

Als nächstes wird die Verwendung von Copy-webpack-Plugin , kopieren Sie die Webfonts Ordner aus node_modules zu Ihrem dist - Ordner während Ihres webpack Build - Prozess. ( https://github.com/webpack-contrib/copy-webpack-plugin )

npm install copy-webpack-plugin

Konfigurieren Sie in webpack.config.js das copy-webpack-plugin . HINWEIS: Der Standardordner für webpack 4 dist ist "dist", daher kopieren wir den Ordner "webfonts" von "node_modules" in den Ordner "dist".

const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    plugins: [
        new CopyWebpackPlugin([
            { from: './node_modules/@fortawesome/fontawesome-free/webfonts', to: './webfonts'}
        ])
    ]
}

Schließlich in Ihrer main.scss fontawesome Datei, sagen , wo die Webfonts Ordner kopiert wurde , und die SCSS - Dateien importieren Sie wollen node_modules .

$fa-font-path: "/webfonts"; // destination folder in dist
//Adapt the path to be relative to your main.scss file
@import "../node_modules/@fortawesome/fontawesome-free/scss/fontawesome";

//Include at least one of the below, depending on what icons you want.
//Adapt the path to be relative to your main.scss file
@import "../node_modules/@fortawesome/fontawesome-free/scss/brands";
@import "../node_modules/@fortawesome/fontawesome-free/scss/regular";
@import "../node_modules/@fortawesome/fontawesome-free/scss/solid";

@import "../node_modules/@fortawesome/fontawesome-free/scss/v4-shims"; // if you also want to use `fa v4`  like: `fa fa-address-book-o` 

und wenden Sie Folgendes font-familyauf einen oder mehrere gewünschte Bereiche in Ihrem HTML-Dokument an, in denen Sie die Fontawesome-Symbole verwenden möchten.

Beispiel :

 body {
      font-family: 'Font Awesome 5 Free'; // if you use fa v5 (regular/solid)
      // font-family: 'Font Awesome 5 Brands'; // if you use fa v5 (brands)
    }
pppglowacki
quelle
1
funktioniert gut für mich, ich musste nur den Pfad von @import "../node_modules/[...]"zu@import "@/../node_modules/[...]"
Mecograph
Sie können webpack.config.js einen Alias ​​hinzufügen: resolve: {alias: {'node_modules': path.join(__dirname, 'node_modules')}}und dann@import "node_modules/[...]
Steven Almeroth
8

Mit expressjs öffentlich es:

app.use('/stylesheets/fontawesome', express.static(__dirname + '/node_modules/@fortawesome/fontawesome-free/'));

Und Sie können es sehen bei: yourdomain.com/stylesheets/fontawesome/css/all.min.css

Kimprosh
quelle
FontAwesome empfiehlt, das npm-Paket als zu installieren devDependency. Sollte das Paket als reguläre Abhängigkeit installiert werden, damit diese Lösung (in der Produktion) funktioniert?
John J. Camilleri
1
Um meine eigene Frage zu beantworten: Ja, es muss mit --saveund nicht installiert werden--save-dev
John J. Camilleri
5

Sie können es <head></head>wie folgt zwischen Ihren Tags einfügen:

<head>
  <link href="./node_modules/font-awesome/css/font-awesome.css" rel="stylesheet" type="text/css">
</head>

Oder was auch immer dein Weg zu dir node_modulesist.

Bearbeiten (26.06.2017) - Haftungsausschluss: ES GIBT BESSERE ANTWORTEN. BITTE VERWENDEN SIE DIESE METHODE NICHT. Zum Zeitpunkt dieser ursprünglichen Antwort waren gute Werkzeuge nicht so verbreitet. Mit aktuellen Build-Tools wie Webpack oder browserify ist es wahrscheinlich nicht sinnvoll, diese Antwort zu verwenden. Ich kann es löschen, aber ich denke, es ist wichtig, die verschiedenen Optionen und die möglichen Vor- und Nachteile hervorzuheben.

Con Antonakos
quelle
16
Ich glaube nicht, dass irgendjemand das Verzeichnis node_modules in einen Build aufnehmen und direkt darauf verweisen möchte.
Fabian Leutgeb
5
Ich verstehe, aber es ist immer noch eine Option. Es gibt keine einzige Antwort für eine Lösung. :) Wenn Sie ein Bündelsystem haben, dann können Sie @import '../node_modules/...'gerne andere Antworten angegeben haben.
Con Antonakos
1
Im Vergleich zu anderen Antworten halte ich dies für das Beste. In den anderen Antworten verweisen Sie weiterhin auf den relativen Pfad über node_modules. Wenn sich der Speicherort der darin enthaltenen CSS-Datei font-awesomeändern würde, müsste dies genauso optimiert oder gewartet werden wie die anderen Antworten. Unterschied ist, dass diese Antwort keine Transpilation oder Aufgaben benötigt. Der Import wird nur genau dort platziert, wo er erwartet werden sollte. in einem <link>Tag.
Nordamerikaner
3
Ein einfacher npm-Anspruch hat mindestens 10 + MB, kein Benutzer möchte dieses Gewicht aus irgendeinem Grund einem Projekt hinzufügen. Der springende Punkt bei npm ist es, während der Entwicklung zu helfen und die Produktionsgröße nach dem Erstellen zu minimieren / zu reduzieren. Denken Sie nicht, dass dies eine gute Option ist, auch wenn es funktioniert. ;; )
T04435
Ich habe den folgenden Haftungsausschluss hinzugefügt: Zum Zeitpunkt dieser ursprünglichen Antwort waren gute Tools nicht so verbreitet. Mit aktuellen Build-Tools wie Webpack oder browserify ist es wahrscheinlich nicht sinnvoll, diese Antwort zu verwenden. Ich kann es löschen, aber ich denke, es ist wichtig, die verschiedenen Optionen und die möglichen Vor- und Nachteile hervorzuheben.
Con Antonakos
3

Da ich gerade Knoten js lerne, bin ich auch auf dieses Problem gestoßen. Alles, was ich getan habe, war, zuerst die Schriftart-awesome mit npm zu installieren

npm install font-awesome --save-dev

Danach habe ich einen statischen Ordner für CSS und Schriftarten festgelegt:

app.use('/fa', express.static(__dirname + '/node_modules/font-awesome/css'));
app.use('/fonts', express.static(__dirname + '/node_modules/font-awesome/fonts'));

und in HTML:

<link href="/fa/font-awesome.css" rel="stylesheet" type="text/css">

und es funktioniert gut!

alvinsandwich
quelle
2

Wenn Sie npm verwenden, können Sie Gulp.js verwenden, ein Build-Tool, um Ihre Font Awesome-Pakete aus SCSS oder LESS zu erstellen. In diesem Beispiel wird der Code aus SCSS kompiliert.

  1. Installieren Sie Gulp.js v4 lokal und CLI V2 global.

  2. Installieren Sie ein Plugin namens gulp-sass mit npm.

  3. Erstellen Sie eine main.scss-Datei in Ihrem öffentlichen Ordner und verwenden Sie diesen Code:

    $fa-font-path: "../webfonts";
    @import "fontawesome/fontawesome";
    @import "fontawesome/brands";
    @import "fontawesome/regular";
    @import "fontawesome/solid";
    @import "fontawesome/v4-shims";
  4. Erstellen Sie eine gulpfile.js in Ihrem App-Verzeichnis und kopieren Sie diese.

    const { src, dest, series, parallel } = require('gulp');
    const sass = require('gulp-sass');
    const fs = require('fs');
    
    function copyFontAwesomeSCSS() {
       return src('node_modules/@fortawesome/fontawesome-free/scss/*.scss')
         .pipe(dest('public/scss/fontawesome'));
    }
    
    function copyFontAwesomeFonts() {
       return src('node_modules/@fortawesome/fontawesome-free/webfonts/*')
         .pipe(dest('public/dist/webfonts'));
     }
    
     function compileSCSS() { 
       return src('./public/scss/theme.scss')
         .pipe(sass()).pipe(dest('public/css'));
     }
    
     // Series completes tasks sequentially and parallel completes them asynchronously
     exports.build = parallel(
       copyFontAwesomeFonts,
       series(copyFontAwesomeSCSS, compileSCSS)
     );
  5. Führen Sie "gulp build" in Ihrer Befehlszeile aus und beobachten Sie die Magie.

Ryan
quelle
0

Ich stieß auf diese Frage mit einem ähnlichen Problem und dachte, ich würde eine andere Lösung teilen:

Wenn Sie eine Javascript-Anwendung erstellen, können auf Symbole für großartige Schriftarten auch direkt über Javascript verwiesen werden:

Führen Sie zunächst die Schritte in diesem Handbuch aus :

npm install @fortawesome/fontawesome-svg-core

Dann in Ihrem Javascript:

import { library, icon } from '@fortawesome/fontawesome-svg-core'
import { faStroopwafel } from '@fortawesome/free-solid-svg-icons'

library.add(faStroopwafel)

const fontIcon= icon({ prefix: 'fas', iconName: 'stroopwafel' })

Nach den obigen Schritten können Sie das Symbol in einen HTML-Knoten einfügen mit:

htmlNode.appendChild(fontIcon.node[0]);

Sie können auch auf die HTML-Zeichenfolge zugreifen, die das Symbol darstellt, mit:

fontIcon.html
jrook
quelle