Vraiment en retard à la fête ici, mais j'ai pensé que cela pourrait aider quelqu'un à chercher encore une réponse différente:
Après avoir essayé d'utiliser YUI Compressor, j'ai été déçu qu'il soit incompatible avec les versions plus récentes de jQuery et Prism (les deux principales bibliothèques JS tierces dont j'avais besoin pour mon projet que je voulais compresser en un seul fichier). J'ai donc décidé d'utiliser Terser , qui est un fork d'Uglify-JS qui prend en charge ES6 +. Je n'ai pas pu l'exécuter directement à l'aide de la <exec>
tâche, mais l'utilisation de la méthode de ligne de commande Windows fonctionne au moins pour Win 10 (sans dire que cela ne peut pas fonctionner autrement, mais c'était une solution de contournement très facile). Pas besoin d'ajouter quoi que ce soit d'autre à la variable système Path (car Node.JS est généralement ajouté lors de l'installation). J'utilise d'abord la <concat>
tâche ANT pour créer un gros fichier non compressé. Utilisez <fileset>
car cela préservera l'ordre (si c'est important, de toute façon).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Utilisez ensuite la <exec>
tâche pour exécuter n'importe quel programme NPM, tel que Terser. La page de manuel Apache sur cette tâche a indiqué qu'il s'agissait de la solution de contournement Windows pour exécuter des fichiers .bat, mais elle vous permet vraiment d'exécuter à peu près n'importe quelle application de ligne de commande (même celles qui <exec>
ne peuvent mystérieusement pas trouver le contraire).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Intégrer? Il fait partie d'un script de construction ANT (un plugin DITA Open Toolkit pour prendre en charge JavaScript personnalisé, entre autres - pas une application Web Java en soi, mais utilisant Java pour créer une sortie HTML5), donc l'intégration n'était pas beaucoup plus que l'ajout de ceux-ci tâches vers une nouvelle cible (il y a plus de code concernant la définition des valeurs par défaut et la vérification des paramètres d'entrée!).
Facile à activer / désactiver? Dans mon cas, j'ai un paramètre que je passe à la construction ANT afin d'inclure la construction et la réduction du fichier JS. Donc oui, il n'effectue cette cible que si je règle le paramètre sur «Oui». C'est une chose assez facile à configurer dans une version ANT.
Transparent Jusqu'à présent, il semble n'avoir aucun effet sur l'un des nombreux fichiers JS que j'inclus. Certains d'entre eux sont les miens (et je ne suis en aucun cas un expert JS) et certains sont, comme je l'ai mentionné, des bibliothèques JS courantes.
Minifier Terser, mais vous pouvez utiliser à peu près n'importe quel minifié avec une entrée de ligne de commande avec cette méthode.
Manque de fonctionnalités? Terser fonctionne uniquement avec JavaScript. Si je veux faire la même chose pour mes fichiers CSS (ce que je fais), j'utilise YUI Compressor.
Comme ça, c'est un projet actuellement actif et bénéficie d'un bon support. De plus, l'implémentation actuelle (ne l'appelant que via la <exec>
cible ANT ) me permet d'échanger des minificateurs si j'ai besoin d'utiliser autre chose plus tard.
Je n'aime pas que cela nécessite Node.JS. Rien contre Node.JS, remarquez, juste que ce projet particulier n'en ait pas besoin autrement. Je préfère de loin utiliser un fichier Java .jar comme YUI Compressor pour cela (je peux facilement le distribuer avec un plugin si j'en ai besoin).