Cách sử dụng các biểu tượng phông chữ tuyệt vời từ mô-đun nút


111

Tôi đã cài đặt các biểu tượng 4.0.3 phông chữ tuyệt vời bằng cách sử dụng npm install.

Nếu tôi cần sử dụng nó từ node-module, tôi nên sử dụng nó như thế nào trong tệp html?

Nếu tôi cần chỉnh sửa tệp ít hơn, tôi có cần chỉnh sửa nó trong mô-đun nút không?


Bạn đã bao giờ tìm ra cách "chính xác" để làm điều này? Tôi hiện chỉ đang sử dụng một tác vụ gulp để sao chép nội dung từ node_modules vào thư mục chung của mình.
sjmeverett

Tôi đã sử dụng nó như Chòi chơi cho thành phần sau ...
Govan

Câu trả lời:


106

Cài đặt như npm install font-awesome --save-dev

Trong tệp phát triển của bạn ít hơn, bạn có thể nhập toàn bộ phông chữ tuyệt vời mà ít sử dụng hơn @import "node_modules/font-awesome/less/font-awesome.less", hoặc tìm trong tệp đó và chỉ nhập các thành phần bạn cần. Tôi nghĩ đây là mức tối thiểu cho các biểu tượng cơ bản:

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

Lưu ý, bạn vẫn sẽ không tiết kiệm được nhiều byte bằng cách làm điều này. Dù bằng cách nào, bạn sẽ kết thúc việc đưa vào khoảng 2-3 nghìn dòng CSS không hợp nhất.

Bạn cũng sẽ cần phân phối các phông chữ từ một thư mục được gọi /fonts/trong thư mục chung của bạn. Bạn chỉ có thể sao chép chúng ở đó bằng một tác vụ nuốt chửng đơn giản, ví dụ:

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

9
Cần phải nhấn mạnh thêm rằng các phông chữ cũng cần được cung cấp vào một thư mục phông chữ ... Tôi có lẽ đã dành một giờ để cố gắng tìm ra điều đơn giản nhỏ này.
Alex J

3
Bạn cũng có thể điều chỉnh đường dẫn tĩnh phông chữ bằng cách đặt biến fa-font-pathvào vị trí mong muốn của bạn.
zusatzstoff

Trong ví dụ trên, bạn cần phải làm theo ít hàng nhập khẩu của bạn với các ghi đè sau để các file font font-tuyệt vời sao chép bởi ngụm sẽ được tìm thấy sau khi triển khai:@fa-font-path: "/public/fonts";
CAK2

56

Bạn phải đặt đường dẫn phông chữ thích hợp. ví dụ

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

3
Tương tự đối với sass. Con đường ../assets/font-awesome/fontslàm việc cho tôi. Cảm ơn.
Andrey

16

Trong tệp style.css của tôi

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

Bạn sẽ cần sao chép các tệp như một phần của quá trình xây dựng của mình. Ví dụ: bạn có thể sử dụng npm postinstalltập lệnh để sao chép các tệp vào đúng thư mục:

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

Đối với một số công cụ xây dựng, đã có sẵn các gói phông chữ tuyệt vời. Ví dụ: webpack có font-awesome-webpack cho phép bạn đơn giản hóa require('font-awesome-webpack').


11

Sử dụng webpack và scss:

Cài đặt font-awesome bằng npm (sử dụng hướng dẫn thiết lập trên https://fontawesome.com/how-to-use )

npm install @fortawesome/fontawesome-free

Tiếp theo, sử dụng sao chép webpack-plugin , sao chép các phông chữ web thư mục từ node_modules để bạn quận thư mục trong quá trình xây dựng webpack của bạn. ( https://github.com/webpack-contrib/copy-webpack-plugin )

npm install copy-webpack-plugin

Trong webpack.config.js , hãy định cấu hình copy-webpack-plugin . LƯU Ý: Thư mục dist của webpack 4 mặc định là "dist", vì vậy chúng tôi đang sao chép thư mục webfonts từ node_modules vào thư mục dist.

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

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

Cuối cùng, trong tệp main.scss của bạn , hãy cho fontawesome biết nơi thư mục webfonts đã được sao chép vào và nhập tệp SCSS bạn muốn từ 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` 

và áp dụng những điều sau font-familycho (các) vùng mong muốn trong tài liệu html của bạn nơi bạn muốn sử dụng các biểu tượng fontawesome.

Thí dụ :

 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
hoạt động tốt đối với tôi, tôi chỉ phải điều chỉnh đường dẫn từ @import "../node_modules/[...]"đến@import "@/../node_modules/[...]"
mecograph

Bạn có thể thêm bí danh vào webpack.config.js: resolve: {alias: {'node_modules': path.join(__dirname, 'node_modules')}}và sau đó@import "node_modules/[...]
Steven Almeroth

8

Với expressjs, công khai nó:

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

Và bạn có thể xem nó tại: yourdomain.com/stylesheets/fontawesome/css/all.min.css


FontAwesome khuyến nghị rằng gói npm của họ được cài đặt dưới dạng devDependency. Để giải pháp này hoạt động (trong sản xuất) gói có nên được cài đặt như một phụ thuộc thường xuyên không?
John J. Camilleri

1
Để trả lời câu hỏi của riêng tôi: yes, nó cần phải được cài đặt với --savevà không--save-dev
John J. Camilleri

5

Bạn có thể thêm nó vào giữa <head></head>thẻ của mình như sau:

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

Hoặc bất cứ con đường nào của bạn đến node_modules là.

Chỉnh sửa (2017-06-26) - Tuyên bố từ chối trách nhiệm: CÓ CÂU TRẢ LỜI TỐT HƠN. VUI LÒNG KHÔNG SỬ DỤNG PHƯƠNG PHÁP NÀY. Vào thời điểm của câu trả lời ban đầu này, các công cụ tốt vẫn chưa phổ biến. Với các công cụ xây dựng hiện tại như webpack hoặc Browserify, có lẽ không hợp lý khi sử dụng câu trả lời này. Tôi có thể xóa nó, nhưng tôi nghĩ điều quan trọng là phải làm nổi bật các tùy chọn khác nhau mà người ta có và những điều nên làm và không nên làm.


16
Tôi không nghĩ ai đó muốn đưa thư mục node_modules vào một bản dựng và tham chiếu trực tiếp đến nó.
Fabian Leutgeb

5
Tôi hiểu, nhưng nó vẫn là một lựa chọn. Không có một câu trả lời duy nhất cho một giải pháp. :) Nếu bạn có một hệ thống gói, thì bạn có thể @import '../node_modules/...'thích các câu trả lời khác đã chỉ ra.
Con Antonakos

1
so với các câu trả lời khác, tôi cảm thấy điều này là tốt nhất. bạn vẫn đang tham chiếu đến đường dẫn tương đối thông qua node_modules trong các câu trả lời khác. nếu vị trí của tệp css bên trong font-awesomethay đổi, điều này sẽ cần điều chỉnh hoặc bảo trì giống như các câu trả lời khác. sự khác biệt là câu trả lời này không cần chuyển đổi hoặc nhiệm vụ. nó chỉ đặt việc nhập chính xác vào nơi mà nó cần được mong đợi; trong một <link>thẻ.
Northamerican

3
Một Forder npm đơn giản sẽ có tối thiểu 10 + MB, không người dùng nào muốn thêm trọng lượng đó vào một dự án vì bất kỳ lý do gì. Toàn bộ điểm của npm là trợ giúp trong khi Phát triển và thu nhỏ / giảm kích thước Sản xuất sau khi xây dựng. Đừng nghĩ rằng đây là một lựa chọn tốt ngay cả khi nó hoạt động. ; )
T04435

Tôi đã thêm tuyên bố từ chối trách nhiệm sau: Vào thời điểm của câu trả lời ban đầu này, các công cụ tốt chưa phổ biến. Với các công cụ xây dựng hiện tại như webpack hoặc Browserify, có lẽ không hợp lý khi sử dụng câu trả lời này. Tôi có thể xóa nó, nhưng tôi nghĩ điều quan trọng là phải làm nổi bật các tùy chọn khác nhau mà người ta có và những việc có thể làm và không nên làm.
Con Antonakos

3

Vì tôi hiện đang học node js nên tôi cũng gặp phải vấn đề này. Tất cả những gì tôi đã làm trước hết là cài đặt phông chữ tuyệt vời bằng cách sử dụng npm

npm install font-awesome --save-dev

sau đó, tôi đặt một thư mục tĩnh cho css và phông chữ:

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

và trong html:

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

và nó hoạt động tốt!


2

Nếu bạn đang sử dụng npm, bạn có thể sử dụng Gulp.js một công cụ xây dựng để xây dựng các gói Font Awesome của bạn từ SCSS hoặc LESS. Ví dụ này sẽ biên dịch mã từ SCSS.

  1. Cài đặt Gulp.js v4 cục bộ và CLI V2 trên toàn cầu.

  2. Cài đặt một plugin có tên gulp-sass bằng npm.

  3. Tạo tệp main.scss trong thư mục chung của bạn và sử dụng mã này:

    $fa-font-path: "../webfonts";
    @import "fontawesome/fontawesome";
    @import "fontawesome/brands";
    @import "fontawesome/regular";
    @import "fontawesome/solid";
    @import "fontawesome/v4-shims";
  4. Tạo gulpfile.js trong thư mục ứng dụng của bạn và sao chép nó.

    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. Chạy 'gulp build' trong dòng lệnh của bạn và xem điều kỳ diệu.


0

Tôi nhận ra câu hỏi này có một vấn đề tương tự và nghĩ rằng tôi sẽ chia sẻ một giải pháp khác:

Nếu bạn đang tạo một ứng dụng Javascript, các biểu tượng phông chữ tuyệt vời cũng có thể được tham chiếu trực tiếp thông qua Javascript:

Trước tiên, hãy thực hiện các bước trong hướng dẫn này :

npm install @fortawesome/fontawesome-svg-core

Sau đó, bên trong javascript của bạn:

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

Sau các bước trên, bạn có thể chèn biểu tượng bên trong nút HTML với:

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

Bạn cũng có thể truy cập chuỗi HTML đại diện cho biểu tượng bằng:

fontIcon.html
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.