51 Stimmen

Maven-Plugin für die Versionierung und Minimierung von Javascript

Einseitige Javascript-Anwendung

Ich habe eine anspruchsvolle Ajax-gesteuerte Single Page Webapp gebaut, die einen RESTful Backend Web Service verwendet, der JSON serviert. Das Javascript ist in viele verschiedene Dateien aufgeteilt, wobei jede Datei eine Art von Funktion oder Komponente darstellt.

Während der Dienst in der Vergangenheit alpha Beim Testen habe ich all diese Dateien ohne Minification separat bereitgestellt. Aber jetzt möchte ich eine beta Version muss ich wirklich Dateien kombinieren, minifizieren und versionieren. Ich möchte dies zu meinem Build-Prozess hinzufügen, mit Maven.

Javascript Dateitypen

Ich verwende die folgenden "Typen" von Javascript-Dateien, von denen #3 und #4 meine Bedenken sind:

  1. Externe Dateien, wie jquery und jquery-ui, die vom Google CDN bereitgestellt werden. Selten ändern diese Versionen, können manuell behandelt werden.
  2. Jquery-Plugins, die ich selbst hoste, wie z.B. fullcalendar oder ui-layout. Auch diese aktualisiere ich nur selten auf neue Versionen und kann es manuell erledigen.
  3. Anwendungsweiter Javascript-Code. Benutzerdefiniertes Javascript, das über viele Dateien verteilt ist und sich gelegentlich ändern kann. Alle diese Dateien müssen geladen werden, damit die Anwendung funktioniert.
  4. Funktionsspezifischer Javascript-Code. Benutzerdefiniertes Javascript, das bei Bedarf geladen wird, wenn eine bestimmte Funktion angefordert wird. Dieser Code kann sich recht häufig ändern und wird nicht beim Start geladen.

Zielsetzungen erstellen

Ich möchte während meines Bauprozesses Folgendes tun:

  • Verketten Sie alle Typ-3-Javascriptdateien, verkleinern Sie sie, und speichern Sie sie als eine einzige Datei mit einer Versionsnummer. Zum Beispiel: app-2.0.6.min.js wobei 2.0.6 die Version des Maven-Projekts ist.
  • Alle Dateien des Typs 4 sollten einzeln verkleinert und als separate Dateien mit Versionsnummern im Namen gespeichert werden. Zum Beispiel: feature-abc-56ab32de29.min.js wobei 56ab32de29 die Versionsnummer dieser speziellen Datei ist.
  • Aktualisieren Sie HTML-Dateien mit <script> Tags, um auf Javascript-Dateien mit den richtigen Versionsnummern zu verweisen.
  • Aktualisieren Sie Javscript-Dateien, die Typ-4-Feature-Javascript-Dateien laden, um auf die richtigen Versionen zu verweisen.

Fragen

  • Gibt es ein Maven-Plugin, das bei der Verkettung helfen wird?

  • Gibt es ein Maven-Plugin, das bei der Minifizierung hilft? Idealerweise würde ich gerne Google Closure Compiler verwenden, würde aber auch mit anderen arbeiten, wenn es einfacher ist.

  • Gibt es ein Maven-Plugin, das bei der Versionierung hilft?

  • Gibt es eine Möglichkeit, die Typ-4-Javascriptdateien mit unabhängigen Versionsnummern zu versehen? Im Idealfall, wenn eine Datei nicht zwischen Version 2.0.5 und 2.0.6 ändern, gibt es keine Notwendigkeit für die Benutzer, eine neue Version herunterladen und ihre Cache-Version würde gut funktionieren. Ich verwende GIT für die Versionskontrolle, gäbe es also eine Möglichkeit, den GIT-Hashcode einer Datei für die Versionierung zu verwenden?

  • Gibt es eine Lösung, die das Javascript komprimiert, das in normalen HTML-Dateien inline ist, ohne den HTML-Code zu zerstören?

  • Gibt es eine Lösung, mit der ich meine CSS-Dateien auch komprimieren und versionieren kann?

22voto

Taylor Leese Punkte 48438

Werfen Sie einen Blick auf die yuicompressor-maven-plugin . Es kann verschiedene js-Dateien (und css-Dateien) zusammenfassen, minifizieren und verschleiern.

11voto

Chris Dolan Punkte 8777

Hier ist ein brandneues Maven-Plugin, das auf diese Aufgabe abzielt: http://mojo.codehaus.org/webminifier-maven-plugin/

3voto

Ates Goral Punkte 132294

Ich habe erfolgreich RequireJS Optimierung (verwendet Google Closure Compiler + tut Verkettung) in einer Maven-Umgebung (für einzelne Seite JS app) integriert. Siehe meine Frage und die nachfolgende Antwort für Details: RequireJS-Kompilierung in einem Maven-Projekt mit externen JS-Abhängigkeiten

Man könnte das wahrscheinlich erweitern, um die minifizierten JS-Artefakte zu versionieren und zu archivieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X