Realmente tarde para la fiesta aquí, pero pensé que esto podría ayudar a alguien que todavía busca una respuesta diferente:
Después de tratar de usar YUI Compressor, me decepcionó que fuera incompatible con las versiones más recientes de jQuery y Prism (las dos bibliotecas principales de JS de terceros que necesitaba para mi proyecto que quería comprimir en un solo archivo). Así que decidí usar Terser , que es una bifurcación de Uglify-JS que admite ES6 +. No pude hacer que se ejecute directamente usando la <exec>
tarea, pero usar el método de línea de comandos de Windows funciona para Win 10, al menos (no digo que no pueda funcionar de otra manera, pero esta fue una solución muy fácil). No es necesario agregar nada más a la variable del sistema Path (ya que Node.JS generalmente se agrega durante la instalación). Primero uso la <concat>
tarea ANT para hacer un archivo grande y sin comprimir. Úselo <fileset>
ya que preservará el orden (si eso es importante, de todos modos).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Luego use la <exec>
tarea para ejecutar cualquier programa NPM, como Terser. La página del manual de Apache sobre esta tarea indica que esta es la solución alternativa de Windows para ejecutar archivos .bat, pero realmente le permite ejecutar casi cualquier aplicación de línea de comandos (incluso aquellas que <exec>
misteriosamente no pueden encontrar de otra manera).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
¿Integrar? Es parte de un script de compilación ANT (un complemento de DITA Open Toolkit para admitir JavaScript personalizado, entre otras cosas, no una aplicación web Java, per se, sino que usa Java para construir una salida HTML5), por lo que la integración no fue mucho más que agregar esos tareas a un nuevo objetivo (¡hay más código con respecto a la configuración de valores predeterminados y la verificación de los parámetros de entrada!
Fácil de habilitar / deshabilitar? En mi caso, tengo un parámetro que paso a ANT Build para incluir la construcción y la minificación del archivo JS. Entonces, sí, solo realiza este objetivo si configuro el parámetro en 'Sí'. Eso es algo bastante fácil de configurar en una compilación ANT.
Transparente Hasta ahora, parece no tener efecto en ninguno de los varios archivos JS que estoy incluyendo. Algunos de ellos son míos (y no soy un experto en JS, de ninguna manera) y algunos son, como mencioné, bibliotecas JS comunes.
Minifier Terser, pero podría usar casi cualquier minified con entrada de línea de comando con este método.
¿Carece de características? Terser solo funciona con JavaScript. Si quiero hacer lo mismo con mis archivos CSS (que hago), uso YUI Compressor.
Like That es un proyecto actualmente activo y tiene un buen apoyo. Además, la implementación actual (solo llamándolo a través del <exec>
objetivo ANT ) me permite cambiar los minificadores si necesito usar algo más en el futuro.
No me gusta que requiere Node.JS. Nada en contra de Node.JS, ten en cuenta, solo que este proyecto en particular no lo necesita de otra manera. Preferiría usar un archivo Java .jar como YUI Compressor para esto (puedo distribuirlo fácilmente con un complemento si lo necesito).