如何使Font Awesome 5与Webpack配合使用

mim*_*mic 15 font-awesome webpack

我正在尝试在Flask / webpack项目中使用Fontawesome。

最疯狂的事情是它可以正常工作,然后停止运行,我更改了一些愚蠢的操作,再次运行,最后完全停止运行。

是)我有的:

软件包配置:

  "devDependencies": {
        ...
        "css-loader": "^1.0.0",
        "node-sass": "^4.9.3",
        "sass-loader": "^7.1.0",
        "style-loader": "^0.23.0",
        "webpack": "^4.19.0",
        "webpack-cli": "^3.1.0",
        "webpack-merge": "^4.1.4"
    },
    "dependencies": {
        "@fortawesome/fontawesome-free": "^5.3.1",
        "bootstrap": "^4.1.3",
         ...
    }
Run Code Online (Sandbox Code Playgroud)

webpack配置(规则部分):

   test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
        use: [{
            loader: 'file-loader',
            options: {
            name: '[name].[ext]',
            outputPath: '../fonts/',  
            publicPath: '../static/fonts' 
            }
        }]
    },
    {
        test: /\.css$/,
        use: [
            'style-loader',
            'css-loader',
            'sass-loader'
        ]
    },
    {
        test: /\.scss$/,
        use: [
            "style-loader", 
            "css-loader", 
            "sass-loader" 
        ]
    },
Run Code Online (Sandbox Code Playgroud)

webpack,输入部分:

entry: {
        myStyles: './stles/myStyles.js'
    },
Run Code Online (Sandbox Code Playgroud)

myStyles.js:

import fontawesome from "@fortawesome/fontawesome-free/scss/fontawesome.scss";
import regular from "@fortawesome/fontawesome-free/scss/regular.scss";
import solid from "@fortawesome/fontawesome-free/scss/solid.scss";
import brands from "@fortawesome/fontawesome-free/scss/brands.scss";

fontawesome.library.add(solid, regular, brands) 
Run Code Online (Sandbox Code Playgroud)

最后一行虽然在Chrome中导致错误:

Uncaught TypeError: Cannot read property 'add' of undefined
Run Code Online (Sandbox Code Playgroud)

我也尝试将导入添加到我的条目scss中,并且在某些时候起作用了,然后停止了:

$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
@import "~@fortawesome/fontawesome-free/scss/regular";
@import "~@fortawesome/fontawesome-free/scss/solid";
@import "~@fortawesome/fontawesome-free/scss/brands";
Run Code Online (Sandbox Code Playgroud)

所以,最后在我的模板中,我有:

<i class="fas fa-user-circle fa-fw"></i>
Run Code Online (Sandbox Code Playgroud)

我看到的只是正方形。

我检查了Chrome,加载了字体(ttf,woff,woff2)。

请帮忙。我已经在这个问题上花费了超过6(!!!!)小时,这比我在与Webpack相关的其他事情上花费的时间还多。

UPD我想我已经知道了。我发现我的公共路径是错误的,我的意思是webpack配置的这一部分:publicPath:'../static/fonts'-它当前指向我的html上一级的static / fonts文件夹。首先,相对路径本身是错误的,其次,相对路径不适用于其他文件夹,第三,我已将其更改为相对于根目录的相对路径:“ / static / fonts”,并且可以使用。

小智 32

这对我有用。

取自 webpacker 问题页面上的用户 @ahbou https://github.com/rails/webpacker/issues/619#issuecomment-430644035

在你的控制台上

yarn add @fortawesome/fontawesome-free
Run Code Online (Sandbox Code Playgroud)

在您的 .scss 文件中

$fa-font-path: '~@fortawesome/fontawesome-free/webfonts'; 
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/regular';
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常有用。这种方法比通过 JS 包含更简单,而且似乎是“正确”的事情,因为这些包只是 SCSS,毕竟......(Fwiw,如果你使用 npm 而不是 YARN,你可以使用 `npm install` 来代替`纱线添加`)) (3认同)

Cic*_*chy 31

在我的项目(带有webpack 4 .26.1的HTML Starter)中,我通过两个变体添加了FontAwesome:

1.安装并添加

我刚刚安装了FontAwesome Freev5.5.0

npm install --save-dev @fortawesome/fontawesome-free
Run Code Online (Sandbox Code Playgroud)

我添加到 index.js

npm install --save-dev @fortawesome/fontawesome-free
Run Code Online (Sandbox Code Playgroud)

源代码 / 提交

2.与API / SVG一起使用

安装了FontAwesome(svg-core,brands-icons,regular-icons,solid-icons)

import '@fortawesome/fontawesome-free/js/fontawesome'
import '@fortawesome/fontawesome-free/js/solid'
import '@fortawesome/fontawesome-free/js/regular'
import '@fortawesome/fontawesome-free/js/brands'
Run Code Online (Sandbox Code Playgroud)

然后我添加到JS文件

npm install --save-dev @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons
Run Code Online (Sandbox Code Playgroud)

带有注释 / 提交的源代码

  • 如果您正在使用Vue,则需要使用`vue-fontawesome`,因为基础库以Vue不支持的方式修改DOM。 (2认同)

equ*_*nt8 7

这对我有用

import "@fortawesome/fontawesome-free/js/all.js";
import "@fortawesome/fontawesome-free/css/all.css";
Run Code Online (Sandbox Code Playgroud)

在:app/javascript/packs/application.js

我的案例:Rails 6 webpacker gem、webpack、yarn

通过安装 yarn add @fortawesome/fontawesome-free

来自https://github.com/rails/webpacker/issues/619#issuecomment-590454028


Har*_*han 7

首先安装以下,

npm install file-loader @fortawesome/fontawesome-free --save
Run Code Online (Sandbox Code Playgroud)

然后在 webpack.config.js 中,添加

{
  test: /\.(woff|woff2|eot|ttf|otf)$/,
  loader: "file-loader",
  options: {
    outputPath: "../fonts",
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,

$fa-font-path: '../node_modules/@fortawesome/fontawesome-free/webfonts'; 
@import '../node_modules/@fortawesome/fontawesome-free/scss/fontawesome';
@import '../node_modules/@fortawesome/fontawesome-free/scss/solid';
@import '../node_modules/@fortawesome/fontawesome-free/scss/regular';
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题


ru1*_*u10 5

只需将此文件导入 myStyle.js

import '@fortawesome/fontawesome-free/js/all'
Run Code Online (Sandbox Code Playgroud)

或者您可以只导入特定大小的图标

import '@fortawesome/fontawesome-free/js/light'
import '@fortawesome/fontawesome-free/js/regular'
import '@fortawesome/fontawesome-free/js/solid'
import '@fortawesome/fontawesome-free/js/brands'
Run Code Online (Sandbox Code Playgroud)

我认为不需要 fontawesome.library.add() 。


Sta*_*ers 5

我使用的是专业版,在用法上基本相同,名称结尾是“-pro”而不是“-free”。

我将 font Awesome all.js 文件导入到我的 index.js 文件中:

import '@fortawesome/fontawesome-pro/js/all.js'
Run Code Online (Sandbox Code Playgroud)

并将 css 导入到我的 index.scss 文件中:

@import '~@fortawesome/fontawesome-pro/css/all.css';
Run Code Online (Sandbox Code Playgroud)