react-fontawesome 导入所有图标

rob*_*ken 7 font-awesome reactjs font-awesome-5

I'm trying to import just the fontawesome icons I need as the full library is 3mb. I've swapped to the fontawesome-react component to enable this but I'm not having much luck.

Here's my test case:

Package includes:

"@fortawesome/fontawesome-svg-core": "^1.2.4",
"@fortawesome/pro-regular-svg-icons": "^5.3.1",
"@fortawesome/react-fontawesome": "^0.1.3",
Run Code Online (Sandbox Code Playgroud)

Component:

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faThumbsUp } from '@fortawesome/pro-regular-svg-icons';

// In Render:
<FontAwesomeIcon
    icon={ faThumbsUp }
/>
Run Code Online (Sandbox Code Playgroud)

Results in an include size of 1MB Is this expected behaviour?

It appears to be following the explicit import methodology - https://github.com/FortAwesome/react-fontawesome#user-content-explicit-import

可视化结果

Wet*_*émi 14

如果你想通过新的 Fontawesome React 库以最简单的配置使用任何你想要的图标,你可以这样做:

import { library } from '@fortawesome/fontawesome-svg-core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import * as Icons from '@fortawesome/free-solid-svg-icons';

const iconList = Object
  .keys(Icons)
  .filter(key => key !== "fas" && key !== "prefix" )
  .map(icon => Icons[icon])

library.add(...iconList)
Run Code Online (Sandbox Code Playgroud)

(提示:(...iconList)这里用来将我们拥有的每个对象作为数组添加为函数参数)

然后在任何你想要的地方添加到你的代码中

<FontAwesomeIcon icon="check" />
Run Code Online (Sandbox Code Playgroud)

现在您可以使用所有图标而无需全部导入

  • 这很酷,你知道如何用打字稿做到这一点吗?我在 Icons[icon] `Element 隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 'typeof import` 时收到此错误 (2认同)

rob*_*ken 5

与 react-fa 团队讨论了这个问题,他们建议需要使用完整路径明确导入图标:

import { faThumbsUp } from '@fortawesome/pro-regular-svg-icons/faThumbsUp';
Run Code Online (Sandbox Code Playgroud)

这意味着剩余的项目将在 Webpack 的“摇树”过程中被移除。没有提到这一点,所以我建议应该在文档的显式导入部分提到这一点。

Anyhoo - 现在都在工作,所以感谢 FA 的那些人。


ram*_*sus 3

在我们的项目中,我们使用这种 scss 技术 ( font-awesome@4.7.0):

@import '~font-awesome/scss/font-awesome';

@mixin fa-icon($type) {
  @extend .fa;
  @extend .fa-#{$type};
}

i {
  @include fa-icon('star');
  margin-right: 0.2rem;
}
Run Code Online (Sandbox Code Playgroud)

因此,我们的 css 包中只有我们需要的图标。

更新:使用带有babel-plugin-react-css-modules的 React 组件,我们可以重用 font-awesome lib 中的任何图标样式并将其直接应用到我们自己的类中:

.button {
  i {
    @include fa-icon('star');
  }
}
Run Code Online (Sandbox Code Playgroud)