«Cargo install» existe, mas «cargo update» — não? Uma dor familiar para todo desenvolvedor Rust
\n\nVocê acabou de executar cargo install ripgrep para obter o binário mais recente rg. Uma semana se passou. Você ouve que uma nova versão foi lançada — 14.1.0 em vez de 13.0.0. E então surge uma pergunta pertinente: «Does cargo install have an equivalent update command?»
Esta pergunta acumulou milhares de visualizações no Stack Overflow. E não é à toa. Acontece que no cargo não há um comando embutido cargo install update. Não, você não ficou cego. Realmente não há. Mas isso não significa que você está condenado a baixar novas versões manualmente. Existem várias abordagens, e vamos analisar todas — desde as simples até as elegantes.
Neste artigo, não vamos apenas traduzir a resposta do Stack Overflow. Vamos comparar abordagens, mostrar código real e dar dicas acionáveis. Vamos lá!
\n\nPor que o Cargo não tem um comando «update» para crates instalados?
\n\nAntes de sair procurando bugs, vamos entender a filosofia. cargo install é destinado à instalação de crates binários (aqueles que têm a seção [[bin]] no Cargo.toml). Não é um gerenciador de pacotes no estilo apt ou npm. O Cargo é, antes de tudo, um compilador e gerenciador de dependências para projetos, não um instalador global de software.
O comando cargo update existe, mas funciona dentro do projeto — atualiza as dependências no Cargo.lock. Para binários instalados globalmente, é necessária uma solução diferente.
Método nº1: Reinstalação clássica (cargo install --force)
\n\nO método mais simples e óbvio é reinstalar o crate com a flag --force:
# Instalou na primeira vez\ncargo install ripgrep\n\n# Uma semana depois — atualiza\ncargo install --force ripgrep\n\n\nO que acontece nos bastidores? O Cargo baixa a versão mais recente do crate do crates.io, recompila e substitui o binário. A flag --force força a sobrescrita do arquivo existente, mesmo que a versão seja a mesma.
Vantagens:
\n- \n
- Não requer instalação de ferramentas adicionais \n
- Funciona sempre e em qualquer lugar \n
- Intuitivo \n
Desvantagens:
\n- \n
- Toda vez, uma recompilação completa (demorada se o crate for grande) \n
- Não verifica se uma nova versão foi lançada — você apenas reinstala \n
- Incômodo se você tiver 10+ crates instalados \n
É como reinstalar o Windows para atualizar um driver. Funciona? Sim. Ideal? Não.
\n\nMétodo nº2: cargo-outdated — detector inteligente de crates desatualizados
\n\nSe você quer ter certeza de que uma atualização é necessária, instale o cargo-outdated:
cargo install cargo-outdated\n\n\nAgora verifique quais crates estão desatualizados:
\n\ncargo outdated --root ~/.cargo\n\n\nA saída mostrará algo como:
\n\nPackage Current Latest Deps\nripgrep 13.0.0 14.1.0 -\nbat 0.22.1 0.23.0 -\n\n\nEm seguida, você pode atualizar um crate específico com cargo install --force. Mas ainda são dois passos. Quer automação? Continue lendo.
Vantagens:
\n- \n
- Mostra apenas os crates que realmente estão desatualizados \n
- Funciona também para dependências de projeto \n
- Possui opções de filtragem \n
Desvantagens:
\n- \n
- Não atualiza por si só — apenas informa \n
- Requer instalação separada \n
Método nº3: cargo-update (sim, existe esse crate!)
\n\nA resposta mais elegante para a pergunta «Does cargo install have an equivalent update command?» é