Muito atrasado para a festa aqui, mas achei que isso poderia ajudar alguém ainda procurando uma resposta diferente:
Depois de tentar usar o YUI Compressor, fiquei desapontado por ser incompatível com versões mais recentes do jQuery e Prism (as duas principais bibliotecas JS de terceiros necessárias para o meu projeto, que eu queria compactar em um único arquivo). Decidi usar o Terser , que é um fork do Uglify-JS que suporta o ES6 +. Não consegui executá-lo diretamente usando a <exec>
tarefa, mas usar o método de linha de comando do Windows funciona pelo menos para o Windows 10 (sem dizer que não pode funcionar de outra maneira, mas essa foi uma solução muito fácil). Não há necessidade de adicionar mais nada à variável de sistema Path (como o Node.JS geralmente é adicionado durante a instalação). Primeiro uso a <concat>
tarefa ANT para criar um arquivo grande e não compactado. Use <fileset>
como preservará a ordem (se isso for importante, de qualquer maneira).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Em seguida, use a <exec>
tarefa para executar qualquer programa NPM, como o Terser. A página de manual do Apache nesta tarefa indicou que esta é a solução alternativa do Windows para a execução de arquivos .bat, mas realmente permite que você execute praticamente qualquer aplicativo de linha de comando (mesmo aqueles que <exec>
misteriosamente não podem encontrar de outra maneira).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Integrar? Faz parte de um script de construção ANT (um plug-in DITA Open Toolkit para suportar JavaScript personalizado, entre outras coisas - não um aplicativo Java Web, por si só, mas usando Java para criar saída HTML5), portanto, a integração não foi muito mais do que adicionar aqueles tarefas para um novo destino (há mais código relacionado à configuração de padrões e à verificação de parâmetros de entrada!).
Fácil de ativar / desativar? No meu caso, tenho um parâmetro que passo para o ANT Build para incluir a construção e a minificação do arquivo JS. Então, sim, ele só executa esse destino se eu definir o parâmetro como 'Sim'. Isso é algo muito fácil de configurar em uma compilação do ANT.
Transparente Até agora, parece não ter efeito em nenhum dos vários arquivos JS que estou incluindo. Alguns deles são meus (e não sou especialista em JS, por qualquer meio) e alguns são, como mencionei, bibliotecas JS comuns.
Minifier Terser, mas você pode usar praticamente qualquer minificado com entrada de linha de comando com esse método.
Falta recursos? O Terser funciona apenas com JavaScript. Se eu quiser fazer o mesmo com meus arquivos CSS (o que eu faço), uso o Compressor YUI.
O Like That é um projeto atualmente ativo e tem um bom suporte. Além disso, a implementação atual (apenas chamando-a através do <exec>
alvo ANT ) permite que eu troque os minificadores, caso eu precise usar outra coisa no caminho.
Não gosto disso, requer Node.JS. Nada contra o Node.JS, lembre-se, apenas que esse projeto em particular não precisa dele de outra forma. Eu preferiria usar um arquivo Java .jar como o YUI Compressor para isso (posso distribuir isso facilmente com um plugin, se necessário).