I want to add Font Awesome 5 to my Symfony 4 project, this is what I did :
yarn add --dev @fortawesome/fontawesome-free
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
.addEntry('js/app', './assets/js/app.js')
.addStyleEntry('css/app', './assets/css/app.scss')
./node_modules/.bin/encore dev
Everything seems ok, but when I try to use font awesome in my view I only get a square icon instead. The generated app.css file seems ok as I can see the font awesome icons definitions, for example :
.fa-sign-out-alt:before {
content: "\F2F5";
}
It just seems that the 'content' part is missing, I guess because the fonts are not loaded... Do I need to add something to load the webfonts? I tried to add the font awesome js in my app.js asset file but it doesn't change anything. I also tried to add custom loaders to my webpack encore configuration (like this https://github.com/shakacode/font-awesome-loader/blob/master/docs/usage-webpack2.md#setup-for-webpack-2) I also tried to clear the cache, same result...
Any idea?
According font-awesome docs here, after install package
yarn add --dev @fortawesome/fontawesome-free
or
npm install --save-dev @fortawesome/fontawesome-free
Require font-awesome into your config file (in my case and default Symfony 4 location) assets/js/app.js:
require('@fortawesome/fontawesome-free/css/all.min.css');
require('@fortawesome/fontawesome-free/js/all.js');
Compile again yarn encore dev
and icons should appear.
I recomand to check this video on Symfonycast to understand what is going on. (fyi : Ryan Weaver the author of the video is also the main dev of Encore).
https://symfonycasts.com/screencast/webpack-encore/css
The part about font-awesome start at 4:00.
In short :
Font-awesome v4 :
yarn add font-awesome --dev
then in your .css file
@import '~font-awesome';
Font-awesome v5 :
yarn add --dev @fortawesome/fontawesome-free
then in your .css file
@import '~@fortawesome/fontawesome-free/css/all.css';
You may ask why @import '~@fortawesome/fontawesome-free';
isn't working ?
Because the shortcut syntax check for the 'style' key of the @fortawesome package.json file.
At the moment we have
"style": "css/fontawesome.css",
Webpack will include fontawesome.css in your css but nothing from the webfont directory. This is why you see black square. The font isn't here because in fontawesome.css the path to the font directory is never mentioned. Thus Webpack won't copy the font directory to your build. But if you look at all.css you will find stuff like this
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: normal;
font-display: auto;
src: url("../webfonts/fa-brands-400.eot");
src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); }
So webpack will detect that he needs to copy the font to the build. This is why you need to specify the exact file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With