Reputation: 437
I have installed @fortawesome/fontawesome-free package using npm. The latest Laravel application uses vite by default. I am unable to solve this issue. Any help would be much appreciated. My vite.config.js is
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import { viteStaticCopy } from 'vite-plugin-static-copy';
export default defineConfig({
plugins: [
laravel([
'resources/css/app.css',
'resources/js/app.js',
'resources/admin/css/app.css',
'resources/admin/js/app.js',
'resources/css/glide.css',
'resources/js/glide.js',
'resources/js/Sortable.js',
'resources/js/tinymce.js',
'resources/sass/app.scss',
'resources/admin/sass/app.scss',
]),
{
name: 'blade',
handleHotUpdate({ file, server }) {
if (file.endsWith('.blade.php')) {
server.ws.send({
type: 'full-reload',
path: '*',
});
}
},
},
viteStaticCopy({
targets: [
{
src: 'node_modules/@fortawesome/fontawesome-free/webfonts',
dest: '',
},
],
}),
],
});
I imported fontawesome scss files in app.scss. My app.scss file contains
@import "@fortawesome/fontawesome-free/scss/fontawesome";
@import "@fortawesome/fontawesome-free/scss/brands";
@import "@fortawesome/fontawesome-free/scss/regular";
@import "@fortawesome/fontawesome-free/scss/solid";
@import "@fortawesome/fontawesome-free/scss/v4-shims";
I tried using a third party library https://github.com/sapphi-red/vite-plugin-static-copy to copy webfonts of fontawesome package. Is there a better way than this?
Upvotes: 4
Views: 13586
Reputation: 509
More simple way ! the js file of the package has everything !
1 Install the package
npm install @fortawesome/fontawesome-free
2 Import it in resources/js/app.js only what you need to minimize the size.
@import '@fortawesome/fontawesome-free/js/fontawesome';
@import '@fortawesome/fontawesome-free/js/solid';
3 Enjoy
<i class="fa-solid fa-sort"></i>
You also need to have sass installed. Nothing to change in vite conf.
My vite conf if you need :
import {defineConfig, preprocessCSS} from 'vite';
import laravel from 'laravel-vite-plugin';
import * as path from "path";
export default defineConfig({
plugins: [
laravel({
input: ['resources/sass/app.scss', 'resources/js/app.js'],
refresh: true,
}),
],
});
Upvotes: 1
Reputation: 1334
in Laravel 9 OR Above, by default Laravel use Vite to bundle your application's CSS and JavaScript files into production ready assets.
Now if you need to use FontAwesome with Vite in laravel then you can do it as below way.
Step 1:- Run npm i @fortawesome/fontawesome-free
command for install Font Awesome. by running above command fontawesome will be installed in "node_modules" directory (full path:- {root_dir}/node_modules/@fortawesome/fontawesome-free).
Step 2:- Open {root_dir}/vite.config.js
file and add below path in this file
export default defineConfig({
plugins: [
laravel({
input: [
'resources/sass/app.scss',
'resources/js/app.js',
],
refresh: true,
}),
],
resolve: {
alias: {
'~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
// add below path of fontawesome
'~fontawesome': path.resolve(__dirname, 'node_modules/@fortawesome/fontawesome-free'), // <- add this line
}
},
});
Step 3:- Now open {root_dir}/resources/sass/app.scss
file & import fontawesome scss as like below
// Bootstrap
@import 'bootstrap/scss/bootstrap';
// for FontAwesome v6+
$fa-font-path: '~fontawesome/webfonts';
@import '~fontawesome/scss/fontawesome';
@import '~fontawesome/scss/brands';
@import '~fontawesome/scss/solid';
Note that, in last step we import the fontawesome files. but that import path may different. here currently I used latest version (6.4) of FontAwesome. Refer this for more read about "how to use fontAwesome with Sass"
Upvotes: 4
Reputation: 437
I solved it by first installing sass pre-processor:
npm install -D sass
after that I imported all fontawesome scss files into my app.js file:
import './bootstrap';
import '@fortawesome/fontawesome-free/scss/fontawesome.scss';
import '@fortawesome/fontawesome-free/scss/brands.scss';
import '@fortawesome/fontawesome-free/scss/regular.scss';
import '@fortawesome/fontawesome-free/scss/solid.scss';
import '@fortawesome/fontawesome-free/scss/v4-shims.scss';
import Alpine from 'alpinejs';
window.Alpine = Alpine;
Alpine.start();
Upvotes: 7
Reputation: 15
It is quite easy if you are not adding it via npm. Copy entire fontawesome dir into resources dir (/resources/fontawesome)
, then declare variable in your scss file like (assuming you are doing it in a file inside /resources/sass:
$fa-font-path: '../fontawesome/webfonts';
and import fontawesome files:
@import '../fontawesome/scss/brands';
@import '../fontawesome/scss/solid';
@import '../fontawesome/scss/light';
@import '../fontawesome/scss/fontawesome';
Build script will copy files to your /public/build/assets
dir and change urls and dev script will load them from your resources dir.
Upvotes: 1