Laravel est un framework PHP consacré à la gestion côté serveur, mais on ne peut pas créer une application web sans générer du HTML et pour l'accompagner du CSS et du Javascript. Laravel n'impose rien en la matière, mais il a tendance à fortement influer. On a vu l'utilisation de Breeze et Jetstream qui imposent quelque chose à ce niveau.
Toujours est-il que Laravel, côté frontend, propose NPM comme installeur. Je vais expliquer dans cet article comment ça se passe avec comme exemple Breeze mais évidemment ça restera valable quel que soit le système qu'on a envie de mettre en place côté client.
On va donc installer Laravel avec Breeze comme on l'a déjà vu précédemment :composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
Arrivé à ce stade, on n'a pas encore généré l'intendance du frontend et c'est justement le sujet de cet article...
Le CSS avec Laravel Mix
Si vous voulez utiliser un langage de génération de CSS comme Sass (qui connait un grand succès) ou Less alors vous pouvez opter pour Laravel Mix. Il est vrai que ces langages présentent de nombreux avantages par rapport au simple CSS :
- utilisation de variables
- imbrication de code
- importations
- mixins (groupe de déclaration CSS réutilisable)
- héritage
- opérateurs...
sass input.scss output.css
On peut en plus mettre en place un observateur pour régénérer le code.
Mais on peut aussi utiliser Laravel Mix. Sous le capot, il utilise Webpack qui n'est pas si simple que ça à utiliser directement. Du coup, c'est une façon plus simple d'utiliser Webpack.
Installation
Pour utiliser Laravel Mix vous devez disposer de NPM, donc aussi de node.js. Si vous n'êtes pas trop sûr d'avoir ça sur votre machine entrez ça dans votre console :
node -v
npm -v
Si vous obtenez un numéro de version, c'est que vous en disposez, mais assurez-vous quand même que ce ne soient pas des versions trop anciennes sinon vous aurez des soucis !
Si vous n'avez rien alors installez-les en suivant les procédures sur les sites correspondants.
Dans l'installation de Laravel vous trouvez déjà un fichier package.json à la racine :
Il comporte toutes les déclarations de scripts et de dépendances nécessaires. Selon vos besoins, vous pourrez adapter tout ça. Pour le moment on a ce code :
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"@tailwindcss/forms": "^0.4.0",
"alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2",
"axios": "^0.25",
"laravel-mix": "^6.0.6",
"lodash": "^4.17.19",
"postcss": "^8.4.6",
"postcss-import": "^14.0.2",
"tailwindcss": "^3.0.18"
}
}
On voit les dépendances de développement déclarées : tailwindcss, axios, lodash...
On a aussi des scripts pour simplifier l'utilisation.
Pour installer il ne vous reste qu'à entrer :
npm install
Là vous avez le temps d'aller boire tranquillement un café...
Vous allez avoir la création d'un dossier node_modules contenant toutes les dépendances :
Utilisation
Maintenant vous pouvez utiliser le fichier webpack.mix.js pour préciser ce que vous voulez compiler. Par défaut, on a ce code :
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js').postCss('resources/css/app.css', 'public/css', [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
]);
On a la méthode postCss (on dispose également de less , sass, et stylus) et on demande de compiler le fichier resources/css/app.scss dans public/css. On a effectivement ce fichier ici :
On y trouve l'importation de tailwind :@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
Pour lancer le processus en mode développement on entre :
npm run dev
Ce qui a pour effet de créer (en fait ici régénérer parce qu'il existe déjà) le fichier app.css (et aussi celui du Javascript mais j'en parlerai plus loin) :
Le code CSS est en clair puisqu'on est en mode développement :
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
En mode production on utilise :
npm run prod
Là on obtient un code minifié pour gagner en dimension de fichier, donc en temps de téléchargement.
Un aspect intéressant est le mode observateur :
npm run watch
Dans ce mode le code est surveillé et la compilation se lance à chaque changement, ce qui est parfait quand on développe.
Le Javascript avec Laravel Mix
Pour le Javascript on peut aussi utiliser Laravel Mix comme on l'a vu ci-dessus pour le CSS. D'ailleurs on a dans le fichier webpack.mix.js une compilation de javascript :
mix.js('resources/js/app.js', 'public/js')
On utilise la méthode js pour compiler le fichier resources/js/app.js dans public/js. On a effectivement ce fichier ici :
Et le résultat compilé va se retrouver ici :Les commandes sont strictement les mêmes que celles qu'on a vues pour le CSS puisque les opérations sont groupées.
Voyons de plus près le fichier resources/js/app.js :require('./bootstrap');
import Alpine from 'alpinejs';
window.Alpine = Alpine;
Alpine.start();
On importe Alpine et on ne fait appel au fichier bootstrap. Voyons son contenu :
window._ = require('lodash');
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
On voit qu'on charge lodash et axios.
Les actions de Laravel Mix
Laravel Mix sait faire bien d'autres choses que compiler du CSS ou du Javascript. Par exemple il sait copier des fichiers :mix.copy('node_modules/foo/bar.css', 'public/css/bar.css');
Copier des dossiers :
mix.copyDirectory('assets/img', 'public/img');
Je vous invite à consulter la documentation officielle pour en apprendre plus.
En résumé
- Laravel Mix permet de compiler du CSS.
- Laravel Mix permet de compiler du Javascript.
- Laravel permet aussi d'effectuer des opérations sur les dossiers et les fichiers.
Par bestmomo
Aucun commentaire