Symfony - Webpack Encore - Best practices

Symfony - Webpack Encore - Best practices - PHP - Programmation

Marsh Posté le 02-03-2020 à 09:57:49    

Bonjour à tous,
 
Je me remets à jour sur ce framework, et notamment sur la partie "Webpack Encore" qui permet la gestion des assets (js, css, images, etc.)
De ce que je comprends, le javascript se gère depuis un fichier "app.js", lui-même déclaré dans le fichier webpack.config.js qui contient la configuration du webpack.
 
Habituellement, j'étais plutôt du genre à séparer mes fonctionnalités FrontEnd dans des fichiers séparés, correspondant à chaque page de mon site. Bien sûr, le code redondant est présent dans un seul fichier, par exemple "globalScript.js"
 
Par exemple, pour un controler "Accueil" qui contiendrait une fonction "landscape" et une fonction "contact", j'aurai eu deux fichiers "accueil_landscape.js" et "accueil_contact.js" pour gérer ce qu'il y'a à faire spécifiquement en javascript pour chacune de ces pages.
Mais je ne vois pas comment faire ça via "webpack encore"
 
Si tout est géré dans un fichier commun comme je le vois, je ne trouve pas d'intérêt à embarquer des fonctionnalités de vérification de formulaire, utilisées dans la page "contact", et à l'inverse des fonctionnalités de graphiques ou d'animation utilisées dans la page "landscape".
 
Autant je comprends bien que "webpack encore" va compiler lui même son fichier .js, embarquant tout ce dont il a besoin en terme de librairies et de code, mais cela m'embête de trimballer un gros fichier "fourre-tout" au travers de toutes mes pages.
Le cache du navigateur va éviter le chargement du fichier, mais je suis pas convaincu qu'en terme de lisibilité et maintenabilité, le fait de travailler dans un unique fichier "app.js" soit pertinent.
 
Comment vous faites chez vous ?


---------------
All I wanna say is that they don't really care about us
Reply

Marsh Posté le 02-03-2020 à 09:57:49   

Reply

Marsh Posté le 02-03-2020 à 14:00:27    

hello,

 

tu peux déclarer plusieurs entrées dans ton webpack.

 

Tu te retrouves avec un fichier qui ressemble à ca :

 
Code :
  1. Encore.setOutputPath('public/build/')
  2.          .setManifestKeyPrefix('build/')
  3.          .addEntry('js/app', './assets/js/app.js')
  4.          .addEntry('js/accueil/landscape', './assets/js/accueil_landscape.js')
  5.          .addEntry('js/accueil/contact', './assets/js/accueil_contact.js')
 

où app.js est ton script de base, que tu veux charger partout à mettre dans ton template base.html.twig

 

Et tu appelles les autres dans les vues spécifiques
en surchargeant ton block javascripts comme ça

 
Code :
  1. {% block javascripts %}
  2.     {{ parent() }} # va appeler le js/app
  3.     {{ encore_entry_script_tags('js/accueil/landscape') }}
  4. {% endblock %}


Message édité par xtieu le 02-03-2020 à 14:06:07

---------------
There's more to life than the boy in that mirror.
Reply

Marsh Posté le 02-03-2020 à 14:58:48    

Yes, merci pour ta réponse.
Pour toi, c'est logique de vouloir séparer les scripts par module fonctionnel/page ? Ou tu vois pas d'inconvénients à tout bourrer dans app.js ?


---------------
All I wanna say is that they don't really care about us
Reply

Marsh Posté le 02-03-2020 à 15:22:08    

Ouep c'est logique, autant ne charger que les parties utiles à la page en cours, mine de rien ça allège un peu, et ça t'évitera d'éventuel conflits sur des events, des functions, etc ...
 
C'est pas rare que j'ai 10/15 entrées de js dans mon webpack


---------------
There's more to life than the boy in that mirror.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed