Wirklich spät zur Party hier, aber ich dachte, das könnte jemandem helfen, der noch nach einer anderen Antwort sucht:
Nachdem ich versucht hatte, YUI Compressor zu verwenden, war ich enttäuscht, dass es nicht mit neueren Versionen von jQuery und Prism kompatibel war (die beiden wichtigsten JS-Bibliotheken von Drittanbietern, die ich für mein Projekt benötigte und die ich in eine einzige Datei komprimieren wollte). Deshalb habe ich mich für Terser entschieden , eine Gabelung von Uglify-JS, die ES6 + unterstützt. Ich konnte es nicht direkt mit der <exec>
Aufgabe ausführen , aber die Verwendung der Windows-Befehlszeilenmethode funktioniert zumindest für Win 10 (ohne zu sagen, dass es sonst nicht funktionieren kann, aber dies war eine sehr einfache Umgehung). Sie müssen der Systemvariablen Path nichts anderes hinzufügen (da Node.JS normalerweise während der Installation hinzugefügt wird). Ich benutze zuerst die ANT- <concat>
Aufgabe, um eine große, unkomprimierte Datei zu erstellen. Verwenden <fileset>
Sie diese Option, um die Reihenfolge beizubehalten (wenn dies trotzdem wichtig ist).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Verwenden Sie dann die <exec>
Aufgabe, um ein beliebiges NPM-Programm wie Terser auszuführen. Auf der Apache-Handbuchseite zu dieser Aufgabe wurde angegeben, dass dies die Windows-Problemumgehung zum Ausführen von .bat-Dateien ist. Sie können jedoch nahezu jede Befehlszeilenanwendung ausführen (auch solche, die auf <exec>
mysteriöse Weise nicht anders zu finden sind).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Integrieren? Es ist Teil eines ANT-Build-Skripts (ein DITA Open Toolkit-Plugin, das unter anderem benutzerdefiniertes JavaScript unterstützt - keine Java-Webanwendung an sich, sondern Java zum Erstellen von HTML5-Ausgaben). Die Integration war also nicht viel mehr als das Hinzufügen dieser Aufgaben an ein neues Ziel (es gibt mehr Code zum Festlegen von Standardeinstellungen und Überprüfen von Eingabeparametern!).
Einfach zu aktivieren / deaktivieren? In meinem Fall habe ich einen Parameter, den ich an den ANT-Build übergebe, um das Erstellen und Minimieren der JS-Datei einzuschließen. Ja, dieses Ziel wird nur ausgeführt, wenn ich den Parameter auf "Ja" setze. Das ist ziemlich einfach in einem ANT-Build einzurichten.
Transparent Bisher scheint es keine Auswirkungen auf eine der verschiedenen JS-Dateien zu haben, die ich einbinde. Einige davon sind meine eigenen (und ich bin keineswegs ein JS-Experte), andere sind, wie bereits erwähnt, gängige JS-Bibliotheken.
Minifier Terser, aber Sie können mit dieser Methode fast jeden mit Befehlszeileneingabe minimierten verwenden.
Fehlen Funktionen? Terser funktioniert nur mit JavaScript. Wenn ich dasselbe für meine CSS-Dateien tun möchte (was ich auch tue), verwende ich YUI Compressor.
Wie Das ist es gerade aktives Projekt und eine gute Unterstützung. Außerdem <exec>
kann ich mit der aktuellen Implementierung (die nur über das ANT- Ziel aufgerufen wird) Minifizierer austauschen, falls ich später etwas anderes verwenden muss.
Mag nicht, dass es Node.JS erfordert. Nichts gegen Node.JS, wohlgemerkt, nur dass dieses spezielle Projekt es sonst nicht braucht. Ich würde es vorziehen, dafür eine Java-JAR-Datei wie YUI Compressor zu verwenden (ich kann diese bei Bedarf problemlos mit einem Plugin verteilen).