Uglify para automaticamente remover mensagens de `debug`
Fala galerinha, tranquilidade? Vou deixar um pouco o assunto do this
do javascript de lado e falar agora sobre uma técnica bem interessante.
O problema
As vezes queremos incluir alguns console.log
enquanto estamos desenvolvendo a nossa aplicação. A maioria deles será removido antes do deployment, mas nem sempre é conveniente remover todos. Existem mensagens úteis que nos ajudam a identificar o que está acontecendo, como mensagens de log em requisições AJAX ou inicialização de módulos. Se removermos todas essas declarações e um bug é descoberto no código de produção, você terá de colocá-los de volta no lugar pra analisar o que está acontecendo. Certamente isso não é muito legal, não muito DRY(Don’t repeat yourself)
Claro que você poderia deixar as declarações console.log
no código. Mas existem alguns problemas com isso.
- É constrangedor ter logs no console de sua aplicação
- Pode influenciar a performance da aplicação
- Pode causar alguns bugs no IE 8/9 quando o painel de ferramentas de desenvolvedor não está aberto
A solução
Se na sua aplicação existe minificação(O que eu recomendo fortemente), o UglifyJS pode nos fornecer uma solução para esse problema. O ‘pulo do gato’ aqui é que você pode definir constants enquando minifica. Por exemplo:
uglifyjs --define DEBUG=false "main.js" > "main.min.js"
Esse código adiciona uma constante temporária chamada DEBUG
que é atribuido o valor falso pra ela. Então no seu código basta fazer o seguinte:
if (typeof DEBUG === 'undefined') DEBUG = true; // will be removed
function doSomethingCool() {
DEBUG && console.log("something cool just happened"); // will be removed
}
A mensagem de log será removida pelo Uglify's dead-code remover
. Quando definimos o DEBUG
com falso então o minificador irá limpar e remover todo o código que não será executado. Como quando DEBUG
for falso, os logs nunca serã oexecutados, então serão removidos.
Quando estivermos na fase de desenvolvimento DEBUG
será true
, logo os console.log serão executados. Tem uma nova versão do UglifyJS chamado agora UglifyJS2. Seu comportamento é um pouco diferente. De maneira a conseguir remover código morto
, temos de ativar o compressor. Por exemplo:
uglifyjs --compress --define DEBUG=false main.js -o main.min2.js
Bom, é isso galerinha. Acho que essas pequenas técnicas, quando sendo usadas em conjunto com outras, fazem uma boa diferença na performance de sua aplicação e espero que tenham gostado. Vou procurar escrever mais sobre isso em breve. Até a próxima!