Pular para o conteúdo

Minificar JavaScript

O mesmo tipo de minificador que as ferramentas de build usam, funcionando dentro desta página. Entende sintaxe moderna e módulos, e o seu código-fonte nunca fica armazenado.

  • Nunca armazenado
  • Sem fila, sem espera
  • Sem cadastro, sem marca d'água
Minificado

O JavaScript minificado aparece aqui.

Como funciona

1

Cole seu JavaScript

Ou solte o arquivo aqui. Módulos, classes e sintaxe moderna são todos entendidos.

2

Escolha as opções

Renomear variáveis locais, remover chamadas de console, manter comentários de licença — cada um tem sua opção.

3

Copie ou baixe

Com o tamanho antes e depois.

Renomear, remover e o que nunca pode ser tocado

Acontecem três coisas, em ordem crescente de quanto economizam e de quanto custam para você. Espaços em branco e comentários saem, o que não custa nada. Código morto sai — um ramo que nunca pode ser executado, uma variável atribuída e nunca lida. E os nomes locais são encurtados, então um calculateMonthlyTotal cuidadosamente nomeado vira uma única letra. É nesta última etapa que está a maior parte do ganho, e é também ela que deixa o resultado ilegível — o que serve para publicar e não serve para depurar.

O que não pode ser renomeado é tudo aquilo a que o mundo externo se refere pelo nome, e errar nisso é como minificadores quebram código. Funções exportadas, propriedades de objetos acessadas como strings, tudo o que é alcançado por window e nomes usados em eval precisam sobreviver intactos, porque algo em outro lugar os procura pelo nome que você escreveu. As propriedades, em especial, ficam intactas por padrão: renomear user.emailAddress quebraria tudo no momento em que esse objeto fosse serializado em JSON ou lido por um código minificado separadamente.

Guarde um source map ou o original. Depois que os nomes somem, um stack trace de um usuário real aparece como um erro na função t no caractere 48.213, o que não diz absolutamente nada. Um source map restaura os nomes e os números de linha originais no depurador e nos relatórios de erro, e gerar um não custa nada, porque ele é publicado como um arquivo separado que só carrega quando alguém abre as ferramentas de desenvolvedor.

Os comentários de licença são mantidos por padrão, e isso é uma questão jurídica, não uma preferência. Muito código aberto tem licença permissiva com uma única condição: que o aviso de copyright vá junto com ele — MIT e BSD dizem isso explicitamente. Tirar esses comentários de um bundle com código de terceiros coloca você em violação da licença que permitiu usá-lo. São algumas centenas de bytes.

Quando você precisa de outra coisa

Isso deve ficar no build, não em uma aba do navegador, e os bundlers modernos fazem isso naturalmente. O esbuild --minify e o Rollup ou o Vite minificam no build, geram source maps automaticamente e — o que é muito mais importante — fazem tree shaking, descartando as exportações das suas dependências que você nunca importa. Em uma aplicação real, isso economiza muito mais do que minificar um arquivo pronto jamais conseguiria.

Antes de otimizar, meça. Um analisador de bundle geralmente revela que uma única dependência grande responde pela maior parte do arquivo — uma biblioteca de datas, um conjunto de ícones, um pacote de gráficos importado inteiro por causa de um único gráfico. Substituir essa dependência ou carregá-la sob demanda vale mais do que qualquer minificação, e o code splitting, para que cada página carregue só o que precisa, vale mais do que as duas coisas.

Perguntas frequentes

Meu código fica armazenado em algum lugar?

Não, e para código-fonte esse é o ponto. Nada fica armazenado e nenhum servidor o vê. Colar código proprietário em um minificador online que o envia para algum lugar é uma divulgação, diga o site o que disser sobre retenção — e é exatamente o tipo de coisa que se faz com pressa, sem pensar.

É o mesmo minificador da minha ferramenta de build?

Quase certamente, sim. É o mesmo tipo de minificador que webpack, Rollup, Vite e a maioria dos outros bundlers usam. A única diferença é que ele funciona aqui, em vez de ser algo que você instala.

Ele vai mudar o que o meu código faz?

Não deveria, e isso é verificado, não presumido: nossos testes minificam um módulo, importam a versão original e a minificada, executam as duas e comparam os resultados. O que MUDA: os nomes das variáveis locais (a menos que você desative isso), expressões constantes que podem ser calculadas antecipadamente e código morto. Qualquer coisa que dependa do nome de uma função em tempo de execução, ou de Function.prototype.toString, pode quebrar com a renomeação — desative a renomeação se você depende de algum dos dois.

O que significa “Interpretar como módulo”?

Se o seu código é interpretado como um módulo ES ou como um script comum. Módulos podem usar import e export e estão sempre em modo estrito. A opção vem ativada por padrão porque é assim que a maior parte do código moderno é; se o seu arquivo é um script à moda antiga que usa "with" ou depende de comportamento não estrito, desative-a.

Devo remover as chamadas de console?

Para produção, geralmente sim — elas são ruído e podem vazar detalhes internos para qualquer pessoa que abra as ferramentas de desenvolvedor. A opção vem desativada por padrão porque apagar código sem avisar não é algo que uma ferramenta deva fazer sem ser solicitada.

Ele mantém os comentários de licença?

Sim, por padrão. Comentários que começam com /*! e comentários que contêm @license ou @preserve são mantidos, porque retirá-los da biblioteca com licença MIT de outra pessoa é uma violação de licença. Os comentários comuns são removidos.

Ele gera um source map?

Não nesta página. Um source map só é útil ao lado do arquivo original, em uma URL conhecida, o que não combina com uma ferramenta de colar e copiar — a sua ferramenta de build é o lugar certo para isso.

Existe limite de tamanho?

Não há um limite fixo. Alguns milhares de linhas são minificados em bem menos de um segundo; um arquivo empacotado muito grande demora mais, porque ele é interpretado inteiro antes de qualquer coisa ser renomeada. Se você está minificando um bundle de produção inteiro, a sua ferramenta de build é o lugar mais adequado — esta página é para um único arquivo ou uma verificação rápida.

Bom saber: Renomear variáveis locais deixa o arquivo menor e o resultado ilegível, o que serve para publicar e não serve para depurar — guarde um source map ou o original. Os comentários de licença são mantidos por padrão, porque removê-los pode violar a licença de um código que você tem permissão para usar.

Coloque esta ferramenta no seu site

Grátis para qualquer blog, página de turma ou artigo de ajuda. Cole um único trecho de código e seus visitantes podem usá-la direto na sua página.