web-dev-qa-db-fra.com

Plugin Maven pour versionner et minimiser javascript

Application Javascript sur une seule page

J'ai créé une webapp sophistiquée basée sur une seule page, basée sur ajax, qui utilise un service Web backend RESTful desservant JSON. Le javascript est divisé en de nombreux fichiers différents, chaque fichier représentant une sorte de fonctionnalité ou de composant.

Alors que le service a été testé alpha, je viens de servir tous ces fichiers séparément sans minification. Mais maintenant que je voudrais lancer une version beta, j'ai vraiment besoin de combiner des fichiers, de les réduire et de les versionner. Je veux ajouter ceci à mon processus de construction, en utilisant Maven.

Types de fichiers Javascript

J'utilise les "types" de fichiers javascript suivants, dont # 3 et # 4 sont mes préoccupations:

  1. Fichiers externes, tels que jquery et jquery-ui servis à partir du CDN Google. Modifiez rarement ces versions, peut être géré manuellement.
  2. Plugins Jquery que j'héberge moi-même, tels que fullcalendar ou ui-layout. Encore une fois, je les mets rarement à jour vers de nouvelles versions et je peux les gérer manuellement.
  3. Code javascript à l'échelle de l'application. Javascript personnalisé qui est réparti sur de nombreux fichiers et peut changer de temps en temps. Tous ces fichiers doivent être chargés pour que l'application fonctionne.
  4. Code javascript spécifique aux fonctionnalités. Javascript personnalisé qui est chargé à la demande lorsqu'une fonctionnalité spécifique est demandée. Ce code peut changer assez fréquemment et n'est pas chargé au démarrage.

Construire des objectifs

J'aimerais faire ce qui suit pendant mon processus de construction:

  • Concaténez tous les fichiers javascript de type 3 ensemble, réduisez-les et enregistrez-les en un seul fichier avec un numéro de version. Par exemple: app-2.0.6.min.js, où 2.0.6 est la version du projet maven.
  • Tous les fichiers de type 4 doivent être minifiés individuellement et enregistrés en tant que fichiers séparés avec des numéros de version dans le nom. Par exemple: feature-abc-56ab32de29.min.js, où 56ab32de29 est le numéro de version de ce fichier spécifique.
  • Mettre à jour les fichiers HTML avec <script> balises pour pointer vers des fichiers javascript avec les numéros de version corrects.
  • Mettez à jour les fichiers Javscript qui chargent les fichiers javascript de type 4 pour pointer vers les bonnes versions.

Des questions

  • Existe-t-il un plugin maven qui aidera à la concaténation?

  • Existe-t-il un plugin maven qui aidera à la minification? Idéalement, j'aimerais utiliser Google Closure Compiler, mais travailler avec d'autres si c'est plus simple.

  • Existe-t-il un plugin maven qui aidera à la gestion des versions?

  • Existe-t-il un moyen de faire en sorte que les fichiers javascript de type 4 aient des numéros de version indépendants? Idéalement, si un fichier ne change pas entre la version 2.0.5 et la version 2.0.6, les utilisateurs n'ont pas besoin de télécharger une nouvelle version et leur version mise en cache fonctionnerait bien. J'utilise GIT pour le contrôle de source, donc y aurait-il un moyen d'utiliser le code de hachage GIT d'un fichier pour le contrôle de version?

  • Existe-t-il une solution qui compressera le javascript qui est en ligne dans les fichiers HTML normaux sans tuer le HTML?

  • Existe-t-il une solution qui compressera et versionnera également mes fichiers CSS?

51
Tauren

Jetez un oeil à yuicompressor-maven-plugin . Il peut agréger divers fichiers js (ainsi que css) ainsi que les réduire et les obscurcir.

22
Taylor Leese

Voici un tout nouveau plugin Maven qui cible cette tâche: http://mojo.codehaus.org/webminifier-maven-plugin/

11
Chris Dolan

J'ai réussi à intégrer l'optimisation RequireJS (utilise le compilateur Google Closure + fait la concaténation) dans un environnement Maven (pour l'application JS d'une seule page). Voir ma question et la réponse de suivi pour plus de détails: Compilation RequireJS dans le projet Maven avec les dépendances JS externes

Vous pouvez probablement développer cela pour versionner et archiver les artefacts JS minifiés.

3
Ates Goral