Aller au contenu
Photo d’Armand Philippot
Logo d’Armand Philippot

Armand Philippot

Intégrateur web

À la découverte de webpack Encore

Écrit par :
Armand
Publié le :
Mis à jour le :
Temps de lecture :
3 minutes
Thématique :
Développement

Depuis la version 4, Symfony intègre webpack Encore. Il s’agit d’une enveloppe pour webpack. Son objectif, si j’ai bien compris, est de simplifier la configuration. Voyons comment ça fonctionne.

Introduction

webpack Encore, bien que créé par Symfony, peut être utilisé avec n’importe quelle application PHP. Il ne se cantonne pas à Symfony. Ceci dit, je ne l’ai pas encore utilisé dans un projet en dehors de Symfony. Donc, ici, je vais vous parler de son fonctionnement avec Symfony Flex. Si vous souhaitez l’utiliser ailleurs, vous pouvez consulter la documentation de webpack Encore sur le site de Symfony.

webpack

Installation de webpack Encore

composer require symfony/webpack-encore-bundle
yarn install

À l’issue de ces commandes, plusieurs fichiers sont générés :

  • webpack.config.js
  • assets/app.js
  • assets/styles/app.css

Le premier contient la configuration de webpack. Le second sert de point d’entrée. Le 3e est une dépendance de votre projet (votre feuille de style) qui est important dans le fichier assets/app.js.

Il est possible d’utiliser Sass à la place. C’est d’ailleurs ce que nous allons faire pour voir comment webpack Encore peut se configurer.

yarn add sass-loader node-sass --dev

Vous aurez peut-être besoin de préciser des versions pour une question de compatibilité avec vos autres dépendances.

Configuration de webpack Encore

Maintenant que vous avons installé Sass et son loader, nous allons renommer notre fichier assets/styles/app.css en assets/styles/app.scss. Il faut alors modifier le fichier assets/app.js pour remplacer le fichier importé :

import "./styles/app.scss";

Ensuite, il faut modifier le fichier webpack.config.js pour utiliser le loader de Sass. Le fichier généré devrait déjà le contenir :

// enables Sass/SCSS support
//.enableSassLoader()

Pour l’utiliser, il faut donc dé-commenter la ligne .enableSassLoader().

Et si nous utilisions aussi autoprefixer pour éviter de gérer manuellement les préfixes vendeurs ?

yarn add postcss-loader autoprefixer --dev

Il faut ensuite créer le fichier de configuration de PostCSS :

module.exports = {
    plugins: {
        autoprefixer: {}
    }
}

Pour qu’autoprefixer fonctionne, il faut également lui indiquer la liste des navigateurs à supporter. Nous allons utiliser le fichier package.json pour cela :

"browserslist": [
  "defaults"
]

N’hésitez pas à remplacer defaults par la liste des navigateurs que vous devez supporter.

Puis, nous ajoutons le loader dans le fichier webpack.config.js :

.enablePostCssLoader()

Finalement, pour que notre feuille de style soit intégrée dans l’application, il faut ajouter un tag dans notre fichier base.html.twig :

{% block stylesheets %}
    {{ encore_entry_link_tags('app') }}
{% endblock %}

Générer les ressources

Il est possible de compiler les ressources manuellement avec :

yarn encore dev

Ceci dit, il est peut-être plus intéressant de laisser webpack surveiller nos changements pour qu’il les compile automatiquement, non ? Il suffit d’utiliser la commande suivante :

yarn encore dev --watch

Il ne reste plus qu’à rafraîchir la page !

Pour l’environnement production, il faudra utiliser la commande suivante pour générer les ressources :

yarn encore production

Épilogue

Ici, nous avons vu une configuration assez basique de webpack Encore. En s’arrêtant là, son intérêt peut sembler restreint vis à vis d’outils comme Gulp ou Grunt. Cependant, il est possible de lui ajouter d’autres plugins ou d’autres loaders. Il est également possible de définir différents points d’entrées, ce qui peut-être utile si vous souhaitez intégrer un style ou un script qui ne s’applique qu’à une page.

Par ailleurs, un projet Symfony peut rapidement devenir complexe. Avec des « tasks runners » comme Gulp, pour concaténer les fichiers dans le bon ordre, il faut alors se rappeler des relations entre chaque fichiers. Avec webpack, vous n’avez plus à vous en soucier ; il s’en charge pour vous.

Si vous souhaitez en savoir plus sur les possibilités, la documentation de Webpack Encore vous aidera certainement. Si vous débutez avec webpack, vous pouvez également suivre Symfony The Fast Track qui intègre Webpack Encore dans l’une de ces parties.

0 commentaire

Laisser un commentaire