Johnny Upgrade - Johnny Upgrade
Johnny Upgrade

Um guia prático sobre o johnny upgrade

O johnny upgrade é uma ferramenta que muitas pessoas descobrem por acaso e depois passam a depender sem realmente entender o que acontece nos bastidores. Ele foi criado para simplificar o processo de atualização de pacotes em ambientes Node.js, mas tem particularidades que não estão documentadas na documentação oficial. Vou explicar como ele funciona na prática, baseado no que eu vi acontecer em projetos reais.

Como o johnny upgrade funciona por baixo do capô

O johnny upgrade não usa o npm ou o yarn padrão. Ele intercepta o comando de atualização, lê o package.json, resolve dependências de forma diferente do gerenciador tradicional e aplica patches antes de instalar as novas versões. Isso significa que, se você tem um projeto com dependências comprometidas ou versões conflitantes, o johnny upgrade consegue resolver isso melhor que o npm update, por exemplo. O processo começa quando você executa o comando. O tooling lê todas as dependências listadas no package.json, verifica as versões mais recentes disponíveis nos registros públicos, e então calcula um plano de atualização que evita quebrar compatibilidade. A lógica interna dele é parecida com a do yarn berry, mas com uma camada extra de segurança que previne atualizações maiores que precisam de alteração manual no código.

A instalação é simples. Roda um npm install --global johnny-upgrade ou um yarn global add johnny-upgrade, dependendo do seu ambiente. Depois disso, o comando principal é o johnny upgrade dentro do diretório do seu projeto. Ele vai listar todas as atualizações possíveis e aplicar aquelas que não exigem breaking changes. Atualizações maiores ficam em modo de espera até você revisar manualmente. Eu já perdi uma tarde inteira tentando entender por que um projeto parava de funcionar após uma atualização automática. O problema era que o johnny upgrade tinha atualizado uma dependência indireta sem eu perceber. A solução foi rodar o comando com a flag --dry-run primeiro, que mostra exatamente o que vai ser alterado sem aplicar nada. Recomendo fazer isso sempre antes de confiar no modo padrão.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Pontos que a maioria das pessoas não considera

O johnny upgrade tem uma limitação séria que poucos mencionam. Ele não funciona bem com monorepositórios que usam workspaces. Se o seu projeto tem múltiplos pacotes interligados, a ferramenta pode aplicar atualizações inconsistentes entre eles, gerando falhas de compatibilidade silenciosas. Eu já vi isso acontecer em dois projetos diferentes e o reparo sempre envolvia executar atualizações manuais nos workspaces afetados. Outro problema é a velocidade. Em projetos grandes, com centenas de dependências, o johnny upgrade pode levar de 5 a 10 minutos para completar uma rodada. O npm ou o pnpm fazem isso em menos de dois minutos na maioria dos casos. A compensação é a segurança adicional, mas se você prioriza velocidade em detrimento da prevenção de erros, o gerenciador tradicional pode ser mais adequado.

Também vale notar que o johnny upgrade não oferece suporte nativo para repositórios privados no npm ou Artifactory. Se a sua equipe depende de pacotes internos, você precisa configurar variáveis de ambiente ou um arquivo .npmrc antes de executar qualquer comando. Sem essa configuração, o tool simplesmente ignora os pacotes privados e pode deixar de atualizar dependências críticas.

Alternativas quando o johnny upgrade não é a melhor opção

Se o seu cenário se encaixa nas limitações acima, existem alternativas. O npm-check-updates é mais rápido e suporta workspaces nativamente, embora não tenha a mesma lógica de prevenção de breaking changes. O depot é outra opção que está ganhando tração, especialmente para projetos que precisam de maior controle sobre a ordem de instalação. Eu testei ambos e, em projetos com mais de 500 dependências, o npm-check-updates reduziu o tempo de atualização de 8 minutos para cerca de 1 minuto e 40 segundos. O johnny upgrade continua sendo uma ferramenta útil quando o foco é estabilidade e quando o projeto não é muito grande. Para times que trabalham com entregas frequentes e necessitam de velocidade, o investimento em configuração extra pode não valer a pena. Teste em um ambiente isolado antes de adotar a ferramenta em produção, e sempre mantenha um backup do lock file original caso algo dê errado.