21

我试图通过 webpack 仅捆绑所需的 Font Awesome 5 图标,但这些图标不会在 DOM 中被替换。

  1. 我已经从文档中添加了所有必需的包:

    yarn add -D @fortawesome/fontawesome
    yarn add -D @fortawesome/fontawesome-pro-solid
    yarn add -D @fortawesome/fontawesome-pro-regular
    yarn add -D @fortawesome/fontawesome-free-brands
    
  2. 包含以下自定义 JS:

    "use strict";
    
    import fontawesome from '@fortawesome/fontawesome';
    import faCheck from '@fortawesome/fontawesome-pro-regular/faCheck';
    
    fontawesome.icon(faCheck);
    
    function iconsDoneRendering () {
        console.log('Icons have rendered'); // No output in console
    }
    
    fontawesome.dom.i2svg({ 
        callback: iconsDoneRendering,
    })
    
  3. HTML 模板:

    <head>
        <link rel="stylesheet" href="/css/app.css?v2.1.4"> <!-- contains fa-svg-with-js.css -->
    </head>
    <body>
        <ul class="fa-ul">
            <li><span class="fa-li"><i class="far fa-phone"></i></span>List item 1</li>
            <li><span class="fa-li"><i class="far fa-check"></i></span>List item 2</li>
        </ul>
        <script src="/js/app.js?v2.1.4"></script>
    </body>
    

svg 路径在捆绑的 JS 文件中,但我不知道需要调用哪个方法。


下面的 JS 代码解决了这个问题(从 v5.0.2 开始):

"use strict";

import fontawesome from '@fortawesome/fontawesome';
import faCheck from '@fortawesome/fontawesome-pro-regular/faCheck';
import faPhone from '@fortawesome/fontawesome-pro-regular/faPhone';

fontawesome.library.add(faCheck,faPhone);
4

3 回答 3

12

我意识到这已经得到解答,但我想对完整的解决方案提供一些可见性,因为上面的信息不包括如何执行 SVG 图标替换。

如果您像我一样通过 NPM 和 WebPack 加载 Font Awesome 5 以便在前端 HTML 中使用,您将需要在您的捆绑包中包含的 JS 中执行类似的操作:

"use strict";

// Import FontAwesome: https://fontawesome.com/how-to-use/use-with-node-js
import fontawesome  from '@fortawesome/fontawesome';

// This enables using FontAwesome in CSS pseudo elements
// see: https://fontawesome.com/how-to-use/svg-with-js#pseudo-elements
fontawesome.config.searchPseudoElements = true;

// Icons should be imported individually to keep bundle size down
import faCheck from '@fortawesome/fontawesome-pro-regular/faCheck';
import faPhone from '@fortawesome/fontawesome-pro-solid/faPhone';
fontawesome.library.add(faCheck, faPhone);

// If really necessary, entire styles can be loaded instead of specifying individual icons
//import solid from '@fortawesome/fontawesome-pro-solid';
//fontawesome.library.add(solid);

// Execute SVG replacement
fontawesome.dom.i2svg();

最后一行是关键,您必须手动执行 SVG 图标替换。

于 2018-01-18T18:52:34.730 回答
8

我们刚刚发布了 5.0.2 版并更新了 @fortawesome NPM 包以修复一些与此相关的错误。确保在尝试其他任何操作之前升级。

上面示例中缺少的步骤是将图标添加到库中:

fontawesome.library.add(faCheck)
于 2017-12-20T17:51:30.380 回答
1

尝试使用

fontawesome.library.add(faCheck);

代替

fontawesome.icon(faCheck);

如果它不起作用,请使用您的 DOM 模板更新您的问题,以查看它是如何定义的。

于 2017-12-08T11:06:57.727 回答