【问题标题】:How to make Font awesome 5 work with webpack如何使 Font Awesome 5 与 webpack 一起工作
【发布时间】:2021-05-05 00:58:55
【问题描述】:

我正在尝试在我的 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",
         ...
    }

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" 
        ]
    },

webpack,入口部分:

entry: {
        myStyles: './stles/myStyles.js'
    },

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) 

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

Uncaught TypeError: Cannot read property 'add' of undefined

我还尝试将导入添加到我的条目 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";

所以,终于在我的模板中:

<i class="fas fa-user-circle fa-fw"></i>

而我看到的只是正方形。

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

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

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

【问题讨论】:

  • 有没有找到用scss导入的解决方案?
  • @white_gecko 我的路径有误,请参阅问题的更新。
  • 关于不一致的“它工作”“它停止工作”行为:我不得不yarn build而不是yarn dev来调试我的 font-awesome / webpack-loaders 问题。

标签: webpack font-awesome


【解决方案1】:

在我的项目(HTML Starter with webpack 4.26.1)中,我通过两个变体添加了 FontAwesome:

1。已安装并添加

我刚刚安装了FontAwesome Free (v5.5.0)

npm install --save-dev @fortawesome/fontawesome-free

我添加到 index.js

import '@fortawesome/fontawesome-free/js/fontawesome'
import '@fortawesome/fontawesome-free/js/solid'
import '@fortawesome/fontawesome-free/js/regular'
import '@fortawesome/fontawesome-free/js/brands'

Source code/Commit

2。与 API / SVG 一起使用

installed FontAwesome(svg-core、brands-icons、regular-icons、solid-icons)

npm install --save-dev @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons

我添加到 JS 文件中

import { library, dom } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'

library.add(fas, far, fab) 

dom.i2svg() 

Source code with comments/Commits

【讨论】:

  • 如果您使用的是 Vue,那么您需要使用 vue-fontawesome,因为基础库以 Vue 不支持的方式修改 DOM。
  • 太棒了——第一步就是我所需要的。
  • 对于所有使用 FontAwesome5 的人来说,这是要在 app.js 中使用的导入:import '@fortawesome/fontawesome-pro/css/all.css'
  • 为什么不通过 sass/css 导入?
  • 我发现dom.watch() 可以打开&lt;I&gt; 标签替换,而不是dom.i2svg()
【解决方案2】:

这对我有用。

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

在您的控制台上

yarn add @fortawesome/fontawesome-free

在您的 .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';

【讨论】:

  • 这对我很有用。这种方法比通过 JS 包含更简单,而且似乎是“正确”的做法,因为这些包毕竟只是 SCSS……(Fwiw,如果你使用 npm 而不是 yarn,你可以使用 npm install 而不是yarn add))
【解决方案3】:

这对我有用

import "@fortawesome/fontawesome-free/js/all.js";
import "@fortawesome/fontawesome-free/css/all.css";

在: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

【讨论】:

    【解决方案4】:

    先安装以下,

    npm install file-loader @fortawesome/fontawesome-free --save
    

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

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

    最后,

    $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';
    

    这应该可以解决问题

    【讨论】:

    • 是的,您可能需要一个文件加载器!我还需要为 SVG 添加一个。
    • 为 node_modules 目录添加了~,这个答案有效
    【解决方案5】:

    只需将此文件导入您的 myStyle.js

    import '@fortawesome/fontawesome-free/js/all'
    

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

    import '@fortawesome/fontawesome-free/js/light'
    import '@fortawesome/fontawesome-free/js/regular'
    import '@fortawesome/fontawesome-free/js/solid'
    import '@fortawesome/fontawesome-free/js/brands'
    

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

    【讨论】:

      【解决方案6】:

      我用的是pro版,在用法上基本一样,名字的结尾是'-pro'而不是'-free'。

      我正在将字体 awesome all.js 文件导入我的 index.js 文件:

      import '@fortawesome/fontawesome-pro/js/all.js'
      

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

      @import '~@fortawesome/fontawesome-pro/css/all.css';
      

      【讨论】:

      • 我的.scss 导入不需要~,但除此之外,这是完美的。
      【解决方案7】:

      如果有人来寻找使用 webpack 在 symfony 4+ 应用程序中实现 font awesome 5 (fa5) 的解决方案,该解决方案与其他人之前提到的相同。

      所以首先你必须安装 fontawesome。跑 yarn add @fortawesome/fontawesome-free 在您的终端上。

      然后,您只需在 app.js 文件中要求 all.css 和 all.js。如果不清楚我这里指的是哪个 app.js 文件,您可以在 app-root/assets/js 目录中找到 app.js 文件。

      import '@fortawesome/fontawesome-free/js/all.js';

      import '@fortawesome/fontawesome-free/css/all.css';

      【讨论】:

        猜你喜欢
        • 2018-06-05
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 2021-05-23
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多