如何为nextjs项目添加font-awesome

And*_*ata 8 webpack webpack-2 nextjs

我正在尝试使用webpack将font-awesome添加到我的next.js项目中.我试过按照我在网上找到的各种说明(使用文件加载器,url-loader),但没有任何对我有用.我暂时放弃了使用webpack加载font-awesome,但我想知道如何实现这一目标.目前我有一个.scss文件,我用来加载font-awesome.

它的内容是:

$fa-font-path: "static/fonts";
@import "~font-awesome/scss/font-awesome.scss";
Run Code Online (Sandbox Code Playgroud)

我手动将字体移动node_modules/font-awesome/fontsstatic/fonts.这很好用,但我想知道2017年是否有一个webpack 2方法.

Yil*_*maz 21

更新

要进行设置,请nextjs13参阅:

如何将 Font Awesome 添加到 Next.js 13 项目错误模块未找到

有3种方法:

Head1:通过向组件添加 FontAwesome 脚本

创建组件,添加脚本并在组件或在每个页面中使用它的文件中Head呈现该组件。HeaderLayout

<Head>
  <script
    // you might need to get a newer version
    src="https://kit.fontawesome.com/fbadad80a0.js"
    crossOrigin="anonymous"
  ></script>
</Head>
Run Code Online (Sandbox Code Playgroud)

2:在.net文件中添加指向CDN的链接_document.js

可以通过在文件夹下html创建 来覆盖 Next.js 中的根文件。您还可以添加其他一些 CDN。但是,最简单的方法是:_document.jspages

<Html>
  <Head>
    <link
      rel="stylesheet"
      type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
      />
    <link
      rel="stylesheet"
      type="text/css"
      href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
    />
  </Head>
  <body>
    <Main />
    <NextScript />
  </body>
</Html>
Run Code Online (Sandbox Code Playgroud)

3:安装npmFontAwesome 所需的所有软件包

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

然后在文件顶部_app.js添加这些行:

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

此后,您可以导入并使用其余的 FontAwesome 图标作为 React 组件,如下所示:

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCheck, faTrash } from "@fortawesome/free-solid-svg-icons";

<FontAwesomeIcon icon={faCheck} className="fas fa-check" style={{ color: "red" }}
></FontAwesomeIcon>
Run Code Online (Sandbox Code Playgroud)

  • @Jarmos 你有一个错字。不是`@fontawesome`,而是`"@fortawesome` (4认同)

小智 12

这篇文章中的解决方案都不是关于如何通过 cdn 使用 font-awesome 的,所以,我将这样做。

有多种方法可以做到这一点,但我通常使用 _app.js 或 _document.js 来完成此类任务。

这是它如何通过 _document.js 完成的

import Document, { Html, Head, Main, NextScript } from "next/document";

class MyDocument extends Document {
    render() {
        return (
            <Html>
                <Head>
                    <link
                        href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css"
                        rel="stylesheet"
                        integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
                        crossOrigin="anonymous"
                    />
                    <script src="https://kit.fontawesome.com/e20sdfsd9.js" crossOrigin="anonymous"></script>
                </Head>
                <body>
                    <Main />
                    <NextScript />
                </body>
            </Html>
        );
    }
}

export default MyDocument;
Run Code Online (Sandbox Code Playgroud)

这里我只是在下一个应用程序的 DOM 中添加了一个指向 fontawesome 的 css cdn 的链接,该链接将添加到浏览器中呈现的页面中。

要了解有关 _document.js 的更多信息,请参阅此处

可以通过 _app.js 遵循类似的方法,我现在没有使用它,但如果有人需要它,请随意发表评论,我会为你做的。

这是自定义应用程序或 _app.js的简要介绍

  • 谢谢。这真的很有帮助。然而,Fontawesome 的 src 链接似乎无法再访问。在我将链接更改为 https://cdnjs.com/libraries/font-awesome 上显示的链接后,效果很好(*不要使用此链接作为源。跳转到网站,然后在那里获取链接) (2认同)

Vad*_*est 5

对于任何想要查看 Next 9 真实示例的人,请查看https://github.com/UnlyEd/next-right-now

有趣的部分是:

免责声明:我是该项目的贡献者


配置:pages/_app.tsx

import { config, library } from '@fortawesome/fontawesome-svg-core';
import '@fortawesome/fontawesome-svg-core/styles.css';
import { faGithub } from '@fortawesome/free-brands-svg-icons';
import { faAngleDown } from '@fortawesome/pro-solid-svg-icons';

// See https://github.com/FortAwesome/react-fontawesome#integrating-with-other-tools-and-frameworks
config.autoAddCss = false; // Tell Font Awesome to skip adding the CSS automatically since it's being imported above
library.add(
  faGithub, faAngleDown
);
Run Code Online (Sandbox Code Playgroud)

您可以通过从正确的存储库导入图标来使用solid/light/etc

用法:components/Nav.tsx

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';

<FontAwesomeIcon icon={['fab', 'github']} />
Run Code Online (Sandbox Code Playgroud)

编辑 Next.js 10

虽然以上仍然有效,但我现在为 Next.js 10 及更高版本推荐的是将您的 Font-Awesome 相关配置拆分到不同的文件中,并将该文件导入_app.tsx. 这使代码更易于维护,仅此而已。

就像是:

  • 该解决方案正是您正在寻找的解决方案 (2认同)

Pen*_*Liu 5

有关与其他工具和框架集成的官方文档,请参阅此处。

您将能够执行以下操作:

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { config, library } from '@fortawesome/fontawesome-svg-core';
import { fas } from '@fortawesome/free-solid-svg-icons';
import { fab } from '@fortawesome/free-brands-svg-icons';

config.autoAddCss = false;
library.add(fas, fab);

return ( 
  <FontAwesomeIcon icon={['fas', 'hat-wizard']} />
  <FontAwesomeIcon icon={['fab', 'github']} />
)
Run Code Online (Sandbox Code Playgroud)

或者

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faAdobe } from '@fortawesome/free-brands-svg-icons/faAdobe';

return ( 
   <FontAwesomeIcon icon={faAdobe} />
)
Run Code Online (Sandbox Code Playgroud)


arc*_*ryx 4

有几种方法可以做到这一点。第一个是通过 next/head 创建一个 head 组件并在那里导入 - 请参阅此处:

另一种方法是创建一个 HOC 来包装您的页面并使用简单的方法导入到那里import 'font-awesome/css/font-awesome.min.css'

或者,您可以使用相同类型的导入将其导入到您的页面之一。(我相信这会将其范围限制到该特定页面。请仔细检查我)

希望这可以帮助。