Minificar JS e CSS
Cole o código e a versão minificada aparece enquanto você digita — com os caracteres economizados.
Saída minificada
Como usar
- Cole JavaScript ou CSS na caixa — a versão minificada aparece enquanto você digita, sem botão para clicar.
- Deixe a sintaxe em Automático, ou escolha JavaScript / CSS se a detecção errar; o resultado é re-renderizado imediatamente.
- O cabeçalho mostra os caracteres economizados antes → depois. Copie a saída ou baixe-a como arquivo .js / .css.
Exemplo
Entrada
// Total do carrinho com o selo de frete grátis const TAX = 0.08; function total(items, coupon) { let sum = 0; for (const item of items) { sum += item.price * item.qty; } if (coupon) { sum -= coupon; } return { amount: sum * (1 + TAX), freeShipping: sum > 50 }; }
Minificado
const TAX=0.08;function total(items,coupon){let sum=0;for(const item of items){sum+=item.price*item.qty;}if(coupon){sum-=coupon;}return{amount:sum*(1+TAX),freeShipping:sum>50};}
O comentário sumiu e os espaços foram reduzidos, mas cada identificador mantém o nome e cada literal mantém a grafia exata. A leitura mostra 279 → 177 caracteres (−37%).
Regras, limites e problemas conhecidos
- Apenas espaços e comentários. Nada é renomeado, nenhuma instrução é dobrada e nenhum código é removido — então a saída minificada se comporta como o original, mas é maior do que a produzida pelo Terser.
- Comentários que começam com /*! ou //!, e comentários que mencionam @license ou @preserve, são mantidos; todos os outros são removidos.
- As quebras de linha permanecem onde removê-las mudaria o programa: após return / throw / break / continue / yield / async, e entre duas instruções em que o JavaScript inseriria um ponto e vírgula automaticamente (a\nb, x={}\nfoo()). A maior parte do código sai em uma linha.
- JavaScript é tokenizado, não analisado: "/*" dentro de uma string, de uma expressão regular ou de um template literal nunca é tocado. Divisão e expressões regulares são distinguidas pelo token anterior; uma regex que atravessa uma linha é tratada como divisão.
- CSS só perde espaços que não podem significar nada: ao redor de { } ; , > ~ ! e após ":", e o último ";" antes de um "}". Espaços de descendência permanecem (.a .b não é .a.b), o espaço antes de ":" permanece (a :hover não é a:hover), e calc(100% - 10px) mantém os espaços porque fazem parte da sintaxe.
- Sem renomeação (mangle), sem remoção de código morto, sem drop_console: isso muda o comportamento, o que um botão de "minificar" não deveria fazer em silêncio.
- Não suportado: HTML/SVG (os espaços ali dependem de <pre>, <textarea> e elementos inline), reescritas de tipos do TypeScript, entrada JSX/TSX, source maps e mesclagem de vários arquivos. JSX é detectado e sinalizado com um aviso.
- Uma string, template, comentário ou url( não fechado no fim da entrada é aviso, não erro: o restante do código ainda é minificado. Parênteses desbalanceados também são aviso — isto não é um validador.
- As leituras contam pontos de código Unicode, não bytes nem unidades UTF-16; as porcentagens são arredondadas para número inteiro e mostradas como +n% quando a saída cresce. Tudo roda no seu navegador: nada é enviado, armazenado ou colocado na URL.
- Acima de 200.000 caracteres o resultado é atualizado cerca de 0,6 s depois de você parar de digitar; o texto nunca é truncado. A saída usa LF e não termina com quebra de linha.
Ferramentas relacionadas
O que as pessoas costumam precisar depois que o código está pequeno.