วิธีใช้ไอคอนแบบอักษรที่ยอดเยี่ยมจากโมดูลโหนด


111

ฉันได้ติดตั้งไอคอนฟอนต์ 4.0.3 ที่ยอดเยี่ยมโดยใช้npm install.

หากฉันต้องการใช้จากโมดูลโหนดฉันจะใช้ในไฟล์ html ได้อย่างไร

หากฉันต้องการแก้ไขไฟล์ที่น้อยกว่าฉันจำเป็นต้องแก้ไขในโมดูลโหนดหรือไม่


คุณเคยคิดหาวิธีที่ "ถูกต้อง" ในการทำเช่นนี้หรือไม่? ฉันกำลังใช้งานอึกเพื่อคัดลอกสิ่งต่างๆจาก node_modules ไปยังไดเร็กทอรีสาธารณะของฉัน
sjmeverett

ฉันใช้เป็นส่วนประกอบ bower ในภายหลัง ...
Govan

คำตอบ:


106

ติดตั้งเป็น npm install font-awesome --save-dev

ในไฟล์การพัฒนาที่น้อยลงคุณสามารถนำเข้าแบบอักษรทั้งหมดที่น่ากลัวโดยใช้น้อยลง@import "node_modules/font-awesome/less/font-awesome.less"หรือดูในไฟล์นั้นและนำเข้าเฉพาะส่วนประกอบที่คุณต้องการ ฉันคิดว่านี่เป็นขั้นต่ำสำหรับไอคอนพื้นฐาน:

/* 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";

โปรดทราบว่าคุณจะยังไม่ประหยัดไบต์จำนวนมากโดยการทำเช่นนี้ ไม่ว่าจะด้วยวิธีใดคุณจะต้องรวม CSS ที่ไม่ได้รวมไว้ 2-3k บรรทัด

คุณจะต้องใช้ฟอนต์จากโฟลเดอร์ที่เรียก/fonts/ในไดเรกทอรีสาธารณะของคุณด้วย คุณสามารถคัดลอกไปที่นั่นด้วยงานอึก ๆ ง่ายๆตัวอย่างเช่น:

gulp.task('fonts', function() {
  return gulp.src('node_modules/font-awesome/fonts/*')
    .pipe(gulp.dest('public/fonts'))
})

9
ต้องเน้นมากขึ้นว่าแบบอักษรนั้นจำเป็นต้องใช้ในโฟลเดอร์ฟอนต์ด้วย ... ฉันอาจใช้เวลาหนึ่งชั่วโมงในการพยายามหาสิ่งเล็กน้อยง่ายๆนี้
Alex J

3
คุณยังสามารถปรับเส้นทางสถิติแบบอักษรโดยตั้งค่าตัวแปรfa-font-pathไปยังตำแหน่งที่คุณต้องการ
zusatzstoff

ในตัวอย่างข้างต้นคุณต้องติดตามการนำเข้าที่น้อยลงของคุณด้วยการลบล้างต่อไปนี้เพื่อให้พบไฟล์ฟอนต์ที่น่ากลัวที่คัดลอกโดย gulp หลังจากการปรับใช้:@fa-font-path: "/public/fonts";
CAK2

56

คุณต้องกำหนดเส้นทางแบบอักษรที่เหมาะสม เช่น

ฉัน-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;
}

3
เช่นเดียวกันสำหรับ sass เส้นทาง../assets/font-awesome/fontsใช้ได้ผลสำหรับฉัน ขอบคุณ
Andrey

16

ในไฟล์ style.css ของฉัน

/* 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');

12

คุณจะต้องคัดลอกไฟล์เป็นส่วนหนึ่งของกระบวนการสร้างของคุณ ตัวอย่างเช่นคุณสามารถใช้npm postinstallสคริปต์เพื่อคัดลอกไฟล์ไปยังไดเร็กทอรีที่ถูกต้อง:

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

สำหรับเครื่องมือสร้างบางอย่างมีแพ็คเกจฟอนต์ที่ยอดเยี่ยมอยู่แล้ว ยกตัวอย่างเช่น webpack มีตัวอักษรที่น่ากลัว-webpackrequire('font-awesome-webpack')ซึ่งช่วยให้คุณง่าย


11

การใช้ webpack และ scss:

ติดตั้ง font-awesome โดยใช้ npm (โดยใช้คำแนะนำการตั้งค่าบนhttps://fontawesome.com/how-to-use )

npm install @fortawesome/fontawesome-free

ถัดไปโดยใช้การคัดลอก webpack ปลั๊กอินคัดลอกอักษรบนเว็บโฟลเดอร์จากnode_modulesที่คุณโฟลเดอร์ระหว่าง webpack สร้างกระบวนการของคุณ ( https://github.com/webpack-contrib/copy-webpack-plugin )

npm install copy-webpack-plugin

ในwebpack.config.js , การกำหนดค่าการคัดลอก webpack ปลั๊กอิน หมายเหตุ: โฟลเดอร์ webpack 4 dist เริ่มต้นคือ "dist" ดังนั้นเรากำลังคัดลอกโฟลเดอร์ webfonts จาก node_modules ไปยังโฟลเดอร์ dist

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

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

สุดท้ายในของคุณmain.scssไฟล์บอก fontawesome ที่อักษรบนเว็บโฟลเดอร์ได้ถูกคัดลอกไปและนำเข้าไฟล์ SCSS ที่คุณต้องการจาก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` 

และใช้สิ่งต่อไปนี้font-familyกับพื้นที่ที่ต้องการในเอกสาร html ของคุณที่คุณต้องการใช้ไอคอน fontawesome

ตัวอย่าง :

 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)
    }

1
ใช้งานได้ดีสำหรับฉันฉันต้องปรับเส้นทางจาก@import "../node_modules/[...]"ไป@import "@/../node_modules/[...]"
mecograph

คุณสามารถเพิ่มนามแฝงใน webpack.config.js: resolve: {alias: {'node_modules': path.join(__dirname, 'node_modules')}}แล้ว@import "node_modules/[...]
Steven Almeroth

8

ด้วย expressjs สาธารณะ:

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

และคุณสามารถดูได้ที่: yourdomain.com/stylesheets/fontawesome/css/all.min.css


FontAwesome แนะนำให้ติดตั้งแพ็คเกจ npm เป็นไฟล์devDependency. เพื่อให้โซลูชันนี้ใช้งานได้ (ในการผลิต) ควรติดตั้งแพคเกจเป็นการพึ่งพาปกติหรือไม่
John J.Camilleri

1
เพื่อตอบคำถามของตัวเอง: ใช่ต้องติดตั้งด้วย--saveไม่ใช่--save-dev
John J. Camilleri

5

คุณสามารถเพิ่มระหว่าง<head></head>แท็กของคุณได้ดังนี้:

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

หรือไม่ว่าเส้นทางของคุณnode_modulesจะเป็นอย่างไร

แก้ไข (2017-06-26) - ข้อจำกัดความรับผิดชอบ: มีคำตอบที่ดีกว่า โปรดอย่าใช้วิธีนี้ ในช่วงเวลาของคำตอบเดิมเครื่องมือที่ดีไม่แพร่หลาย ด้วยเครื่องมือสร้างปัจจุบันเช่น webpack หรือ browserify อาจไม่สมเหตุสมผลที่จะใช้คำตอบนี้ ฉันสามารถลบได้ แต่ฉันคิดว่าสิ่งสำคัญคือต้องเน้นตัวเลือกต่างๆที่มีและสิ่งที่ควรทำและไม่เป็นไปได้


16
ฉันไม่คิดว่าจะมีใครต้องการรวมไดเร็กทอรี node_modules ในบิลด์และอ้างอิงโดยตรง
Fabian Leutgeb

5
ฉันเข้าใจ แต่ก็ยังเป็นตัวเลือก ไม่มีคำตอบเดียวสำหรับการแก้ปัญหา :) หากคุณมีระบบการรวมกลุ่มคุณสามารถทำตาม@import '../node_modules/...'คำตอบอื่น ๆ ได้
Con Antonakos

1
เมื่อเปรียบเทียบกับคำตอบอื่น ๆ ฉันรู้สึกว่านี่ดีที่สุด คุณยังคงอ้างอิงเส้นทางสัมพัทธ์ผ่านทาง node_modules ในคำตอบอื่น ๆ หากตำแหน่งของไฟล์ css ภายในfont-awesomeมีการเปลี่ยนแปลงสิ่งนี้จะต้องมีการปรับแต่งหรือบำรุงรักษามากพอ ๆ กับคำตอบอื่น ๆ ความแตกต่างคือคำตอบนี้ไม่จำเป็นต้องมีการถ่ายเทหรืองาน เพียงแค่วางการนำเข้าในที่ที่ควรคาดหวัง ใน<link>แท็ก
อเมริกาเหนือ

3
npm forder อย่างง่ายจะมีอย่างน้อย 10 + MB ผู้ใช้ไม่ต้องการเพิ่มน้ำหนักนั้นให้กับโครงการไม่ว่าด้วยเหตุผลใดก็ตาม จุดรวมของ npm คือการช่วยในการพัฒนาและย่อ / ลดขนาดการผลิตเมื่อสร้าง อย่าคิดว่านี่เป็นตัวเลือกที่ดีแม้ว่าจะใช้งานได้ ; )
T04435

ฉันได้เพิ่มข้อจำกัดความรับผิดชอบต่อไปนี้: ในช่วงเวลาของคำตอบเดิมนี้เครื่องมือที่ดีไม่เป็นที่แพร่หลาย ด้วยเครื่องมือสร้างปัจจุบันเช่น webpack หรือ browserify อาจไม่สมเหตุสมผลที่จะใช้คำตอบนี้ ฉันสามารถลบได้ แต่ฉันคิดว่าสิ่งสำคัญคือต้องเน้นตัวเลือกต่างๆที่มีและสิ่งที่ควรทำและไม่เป็นไปได้
Con Antonakos

3

เนื่องจากฉันกำลังเรียนรู้ node js อยู่ฉันก็พบปัญหานี้เช่นกัน สิ่งที่ฉันทำก่อนอื่นคือติดตั้งฟอนต์ที่ยอดเยี่ยมโดยใช้ npm

npm install font-awesome --save-dev

หลังจากนั้นฉันตั้งค่าโฟลเดอร์แบบคงที่สำหรับ css และฟอนต์:

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

และใน html:

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

และใช้งานได้ดี!


2

หากคุณใช้ npm คุณสามารถใช้ Gulp.js เครื่องมือสร้างเพื่อสร้างแพ็คเกจ Font Awesome จาก SCSS หรือ LESS ตัวอย่างนี้จะรวบรวมโค้ดจาก SCSS

  1. ติดตั้งGulp.js v4 ในเครื่องและ CLI V2 ทั่วโลก

  2. ติดตั้งปลั๊กอินชื่อgulp-sassโดยใช้ npm

  3. สร้างไฟล์ main.scss ในโฟลเดอร์สาธารณะของคุณและใช้รหัสนี้:

    $fa-font-path: "../webfonts";
    @import "fontawesome/fontawesome";
    @import "fontawesome/brands";
    @import "fontawesome/regular";
    @import "fontawesome/solid";
    @import "fontawesome/v4-shims";
  4. สร้าง gulpfile.js ในไดเรกทอรีแอปของคุณและคัดลอกสิ่งนี้

    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. เรียกใช้ 'gulp build' ในบรรทัดคำสั่งของคุณและดูความมหัศจรรย์


0

ฉันพบคำถามนี้ที่มีปัญหาคล้ายกันและคิดว่าจะแบ่งปันวิธีแก้ปัญหาอื่น:

หากคุณกำลังสร้างแอปพลิเคชัน Javascript คุณสามารถอ้างอิงไอคอนที่ยอดเยี่ยมแบบอักษรได้โดยตรงผ่าน Javascript:

ขั้นแรกทำตามขั้นตอนในคู่มือนี้ :

npm install @fortawesome/fontawesome-svg-core

จากนั้นภายในจาวาสคริปต์ของคุณ:

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' })

หลังจากขั้นตอนข้างต้นคุณสามารถแทรกไอคอนภายในโหนด HTML ด้วย:

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

คุณยังสามารถเข้าถึงสตริง HTML ที่แสดงถึงไอคอนด้วย:

fontIcon.html
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.