如何在 Laravel Mix 中安装 Font Awesome

Posted

技术标签:

【中文标题】如何在 Laravel Mix 中安装 Font Awesome【英文标题】:How to Install Font Awesome in Laravel Mix 【发布时间】:2017-09-13 01:45:04 【问题描述】:

我尝试使用 Laravel Mix 安装 Font Awesome,但在执行 run npm dev 时收到以下消息:

ERROR 编译失败,出现 1 个错误 ./~/font-awesome/scss/font-awesome.scss 模块构建中的错误 failed: /** ^ Invalid CSS after "...load the styles": expected 1 选择器或规则,是“var content = requi” /var/www/html/blog/node_modules/font-awesome/scss/font-awesome.scss (第 1 行,第 1 列)

我删除了文件中的cmets,并尝试更改字体路径,但没有解决问题。

webpack.mix.js

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')
   .copy('node_modules/font-awesome/fonts/', 'public/fonts')
   .sass('node_modules/font-awesome/scss/font-awesome.scss', 'public/css')
   .version();

fontawesome.scss

@import "variables";
@import "mixins";
@import "path";
@import "core";
@import "larger";
@import "fixed-width";
@import "list";
@import "bordered-pulled";
@import "animated";
@import "rotated-flipped";
@import "stacked";
@import "icons";
@import "screen-reader";

_variable.scss

// Variables
// --------------------------

$fa-font-path:        "../fonts" !default;
$fa-font-size-base:   14px !default;
$fa-line-height-base: 1 !default;
// $fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
$fa-css-prefix:       fa !default;
$fa-version:          "4.7.0" !default;
$fa-border-color:     #eee !default;
$fa-inverse:          #fff !default;
$fa-li-width:         (30em / 14) !default;
// Continue...

【问题讨论】:

请考虑奖励答案。 注意问题中的mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');部分。 【参考方案1】:

要安装 font-awesome,您首先应该使用 npm 安装它。所以在你的项目根目录中输入:

npm install font-awesome --save

(当然我假设你已经安装了 node.js 和 npm。你已经在项目根目录中完成了npm install

然后编辑resources/assets/sass/app.scss文件并在顶部添加这一行:

@import "node_modules/font-awesome/scss/font-awesome.scss";

现在你可以做例如:

npm run dev

这会在正确的文件夹中构建资源的未缩小版本。如果你想缩小它们,你可以运行:

npm run production

然后你就可以使用字体了。

【讨论】:

在 Laravel 5.5 中,这对我有用:@import "~font-awesome/scss/font-awesome.scss"; 我应该说这对我有帮助,因为我忘记更新 app.scss 文件但 url 已更改,在我的情况下是 @import "node_modules/font-awesome-sass/assets/stylesheets/_font-awesome.scss"; yarnnpm 快得多,所以你可以做到yarn add font-awesome --save 有一次我遇到了 fontawesome 的问题。全部尝试,下载,安装npm。但后来发现问题前端开发人员在 css * 中为每个标签编写了一个代码,我删除了该代码,然后 fontawesome 完美运行 请注意,这不会安装最新的免费版 Font Awesome。它只会安装版本+ font-awesome@4.7.0。【参考方案2】:

对于 Font Awesome 5(webfont with css)Laravel mixin 为 font awesome 5 添加包

npm i --save @fortawesome/fontawesome-free

并在 app.scss 或您的自定义 scss 文件中导入 font awesome scss

@import '~@fortawesome/fontawesome-free/scss/brands';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/fontawesome';

编译你的资产npm run devnpm run production并将你编译的css包含到布局中

【讨论】:

谢谢,它几乎对我有用。我所要做的就是更改行的顺序并将@import '~@fortawesome/fontawesome-free/scss/fontawesome'; 移动到 font-awesome 导入的顶部。 点赞!你真的需要所有这 4 个文件吗?我认为 ~@fortawesome/fontawesome-free/scss/fontawesome 就足够了【参考方案3】:

如何在 Laravel 5.3 - 5.6 中安装 Font Awesome 5(正确的方式)

构建您的 webpack.mix.js 配置。

mix.setPublicPath('public');
mix.setResourceRoot('../');

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css');

通过像 npm 这样的包管理器安装最新的免费版Font Awesome。

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

此依赖项现在应该在您的package.json 中。

// Font Awesome
"devDependencies": 
    "@fortawesome/fontawesome-free": "^5.15.3",

在您的主 SCSS 文件 /resources/assets/sass/app.scss 中,导入一种或多种样式。

@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/brands';

编译您的资产并生成一个缩小的、可用于生产的构建。

npm run production

最后,在 Blade 模板/布局中引用生成的 CSS 文件。

<link type="text/css" rel="stylesheet" href=" mix('css/app.css') ">

如何在 Laravel 8 中使用 Laravel Mix 6 安装 Font Awesome 5(正确方式)

https://gist.github.com/karlhillx/89368bfa6a447307cbffc59f4e10b621

【讨论】:

我还必须在 /resources/assets/sass/app.scss 中包含 CSS(前缀为 @): import "~@fortawesome/fontawesome-free/scss/fontawesome.scss";导入“~@fortawesome/fontawesome-free/scss/solid.scss”; 如果不将 .copy('node_modules/@fortawesome/fontawesome-free/webfonts', 'public/webfonts') 添加到我的 webpack.mix.js 中,我无法让它工作 这里也一样,我必须将 webfonts 复制到公共,否则我会收到一个 404 not found 错误,指的是 webfonts 文件夹。我认为应该更新答案。 在 laravel 7.4 中,webpack 配置已经构建,因此我只需 npm 命令,然后添加到 scss 文件,然后运行 ​​npm run whatver-you-want-here 即可完成【参考方案4】:

这适用于使用 Laravel 5.7(及更高版本)和 Fontawesome 5.3 的新用户

npm install @fortawesome/fontawesome-free --save

在 app.scss 中

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

运行

npm run watch

在布局中使用

<link href=" asset('css/app.css') " rel="stylesheet">

【讨论】:

这应该在顶部,因为 laravel 5.7 是当前的稳定版本。我已经尝试了上述所有技巧,但除了这个之外,没有其他方法对我有用。我所缺少的只是放在我的标题中的链接部分。非常感谢! :) 这应该被接受,因为其他答案只适用于旧版本的 laravel 尝试使用此方法加载字体时仍会收到/webfonts/fa-solid-900.woff2 net::ERR_ABORTED 404。在页面上呈现图标的代码是什么样的? 我还不得不在 webpack.mix.js 中复制字体 .copy('node_modules/@fortawesome/fontawesome-free/webfonts', 'public/webfonts') 这适用于最新版本的 FA 和 Laravel 5.5,谢谢!【参考方案5】:

对于 Laravel >= 5.5

运行npm install font-awesome --saveresources/assets/saas/app.scss 中添加@import "~font-awesome/scss/font-awesome.scss"; 运行npm run dev(或npm run watch,甚至npm run production

【讨论】:

【参考方案6】:

我使用的是 Laravel 5.5.14,但上述方法都不适合我。下面是我为使其工作而采取的步骤。

1.使用npm安装font-awesome:

   npm install font-awesome --save

2.通过在您的webpack.mixin.js 中添加这一行来将字体移动到您的公共目录

mix.copyDirectory('node_modules/font-awesome/fonts', 'public/fonts/font-awesome');

3.打开你的 app.scss 指定你的 node_modules 中字体的路径以及编译使用的相对路径:

$fa-font-path: "../fonts/font-awesome" !default;
@import "~font-awesome/scss/font-awesome.scss";

【讨论】:

$fa-font-path: "../../../public/fonts/font-awesome" !default; 这将起作用,因为我们将提供字体目录的相对路径。 为什么我们不能在这里使用绝对路径,例如"/fonts/font-awesome" !default; ? 请注意,这不会安装最新的免费版 Font Awesome。它只会安装版本+ font-awesome@4.7.0。【参考方案7】:

您使用的路径不正确,您可以打开 node_module 并找到 font-awesome 的路径。 use 可以使用 js 或 svg 字体,但我更喜欢 css 样式。

首先使用这个命令安装font-awesome-free npm install --save-dev @fortawesome/fontawesome-free

之后你就可以这样做了

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

我复制下面的字体路径这是可选的

.copy('node_modules/@fortawesome/fontawesome-free/webfonts', 'public/fonts');

最后只运行脚本 npm run devnpm run watch 在 laravel 中

【讨论】:

【参考方案8】:

首先使用npm安装fontawsome

npm install --save @fortawesome/fontawesome-free

添加到resources\sass\app.scss

// Fonts
@import '~@fortawesome/fontawesome-free/scss/fontawesome';

并添加到resources\js\app.js

require('@fortawesome/fontawesome-free/js/all.js');

然后运行

npm run dev

npm run production

【讨论】:

【参考方案9】:

Laravel 7 解决方案

    安装 font-awesome 库。
npm install font-awesome --save
    安装库后。打开以下文件并粘贴给定的代码

/resources/sass/app.scss

@import "~font-awesome/scss/font-awesome";
    打开以下文件并粘贴给定代码

/webpack.mix.js

mix.setResourceRoot("../");
    根据您的环境执行命令。

npm 运行开发

npm 运行生产

字体文件夹无需复制粘贴到公用文件夹,全部自动处理。

【讨论】:

note mix.setResourceRoot("../"); 在这个答案中,非常有用。 mix.setResourceRoot("../"); 很有魅力!谢谢 这应该被接受,因为它适用于最新版本的 Laravel,今天刚刚进行了全新安装。 mix.setResourceRoot("../"); 是救命稻草! @abenevaut 和 @Emad Saeed 应该投票赞成这个答案【参考方案10】:

我最近为 Laravel5.6 写了一篇关于它的博客。博客链接是https://www.samundra.com.np/integrating-font-awesome-with-laravel-5.x-using-webpack/1574

步骤与上述类似。但就我而言,我必须做一些额外的步骤,比如在“public”目录中配置 webfonts 路径到 font-awesome。在 Laravel mix 等中设置资源根目录,具体可以参考博客。

我将链接留在此处,以便对上述解决方案不起作用的人有所帮助。

【讨论】:

谢谢,我尝试了几乎所有其他提供的答案,只有这样解决了我的问题。【参考方案11】:
npm install font-awesome --save

在路径前添加~/

@import "~/font-awesome/scss/font-awesome.scss";

【讨论】:

以前工作过,现在出错了。这修复了它:@import "~font-awesome/scss/font-awesome";【参考方案12】:

我发现上面的所有答案都不完整,下面是让它工作的确切步骤。

    我们使用 npm 来安装软件包。为此,请打开控制台并转到您的 Laravel 应用程序目录。输入以下内容:

    npm install font-awesome --save-dev

    现在我们必须将需要的文件复制到 public/css 和 public/fonts 目录。为此,请打开 webpack.mix.js 文件并添加以下内容:

    mix.copy('node_modules/font-awesome/css/font-awesome.min.css', 'public/css'); mix.copy('node_modules/font-awesome/fonts/*', 'public/fonts');

    运行以下命令以执行 Laravel Mix:

    npm run dev

    在您的应用程序布局文件 (resources/views/layouts/app.blade.phpapp.blade.php) 中添加 Font Awesome 的样式表:

    &lt;link href=" asset('css/font-awesome.min.css') " rel="stylesheet" /&gt;

    在模板中使用很棒的字体图标

    &lt;i class="fa fa-address-book" aria-hidden="true"&gt;&lt;/i&gt;

希望对你有帮助!

【讨论】:

【参考方案13】:

尝试在您的 webpack.mix.js 中添加“*”

.copy('node_modules/font-awesome/fonts/*', 'public/fonts')

【讨论】:

我不是 scss 专家,但它似乎询问从哪里导入。从 fontawasome 网站本身,您可能需要在第 1 行添加 @fa-font-path: "../font"; It has to be a relative path so in laravel it will probable be "../../../public/font" 复制没问题,但我觉得将.scss文件导入font-awesome里面的app.scss效果更好。 谢谢,我认为这应该被选为最佳答案。

以上是关于如何在 Laravel Mix 中安装 Font Awesome的主要内容,如果未能解决你的问题,请参考以下文章

javascript Laravel:在webpack.mix.js中添加Font Awesome

如何在 Laravel 6 中使用 Font Awesome 5 图标

如何在 Laravel 中安装调试栏?

在 Laravel 项目中安装 FilePond,如何?

如何在 Laravel 8 中安装 Vue.js

如何查看 Laravel 中安装了哪个 Vue 版本以及如何更新?