Davvero in ritardo per la festa qui, ma ho pensato che questo potrebbe aiutare qualcuno ancora alla ricerca di una risposta diversa:
Dopo aver provato a utilizzare YUI Compressor, sono rimasto deluso dal fatto che fosse incompatibile con le versioni più recenti di jQuery e Prism (le due principali librerie JS di terze parti di cui avevo bisogno per il mio progetto che volevo comprimere in un unico file). Quindi ho deciso di usare Terser , che è un fork di Uglify-JS che supporta ES6 +. Non sono stato in grado di farlo funzionare direttamente utilizzando l' <exec>
attività, ma l'utilizzo del metodo della riga di comando di Windows funziona almeno per Win 10 (non dicendo che non possa funzionare altrimenti, ma questa è stata una soluzione molto semplice). Non è necessario aggiungere nient'altro alla variabile di sistema Path (poiché Node.JS viene solitamente aggiunto durante l'installazione). Per prima cosa utilizzo l' <concat>
attività ANT per creare un file grande e non compresso. Usalo <fileset>
perché preserverà l'ordine (se è importante, comunque).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Quindi utilizzare l' <exec>
attività per eseguire qualsiasi programma NPM, come Terser. La pagina del manuale di Apache su questa attività indica che questa è la soluzione alternativa di Windows per eseguire file .bat, ma in realtà ti consente di eseguire praticamente qualsiasi applicazione a riga di comando (anche quelle che <exec>
misteriosamente non riescono a trovare altrimenti).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Integrare? Fa parte di uno script di compilazione ANT (un plug-in DITA Open Toolkit per supportare JavaScript personalizzato, tra le altre cose, non un'applicazione Web Java, di per sé, ma utilizzando Java per creare output HTML5), quindi l'integrazione non era molto più che aggiungere quelli task su un nuovo target (c'è più codice relativo all'impostazione dei valori predefiniti e al controllo dei parametri di input!).
Facile da abilitare / disabilitare? Nel mio caso, ho un parametro che passo a ANT Build per includere la creazione e la minimizzazione del file JS. Quindi sì, esegue questo obiettivo solo se imposto il parametro su "Sì". È una cosa abbastanza facile da configurare in una build ANT.
Trasparente Finora, sembra non avere alcun effetto su nessuno dei numerosi file JS che includo. Alcuni di questi sono miei (e non sono un esperto di JS, in alcun modo) e alcuni sono, come ho detto, librerie JS comuni.
Minifier Terser, ma con questo metodo è possibile utilizzare praticamente qualsiasi minimizzato con input da riga di comando.
Mancano le caratteristiche? Terser funziona solo con JavaScript. Se voglio fare lo stesso per i miei file CSS (cosa che faccio), utilizzo YUI Compressor.
Like That è un progetto attualmente attivo e ha un buon supporto. Inoltre, l'attuale implementazione (chiamandola solo tramite il <exec>
target ANT ) mi consente di sostituire i minifiers se dovessi aver bisogno di usare qualcos'altro lungo la strada.
Non mi piace che richiede Node.JS. Niente contro Node.JS, attenzione, solo che questo particolare progetto non ne ha bisogno altrimenti. Preferirei di gran lunga utilizzare un file Java .jar come YUI Compressor per questo (posso distribuirlo facilmente con un plug-in, se necessario).