«cargo install» existe, ¿pero «cargo update» no? El dolor familiar de todo desarrollador Rust
\n\nAcabas de ejecutar cargo install ripgrep para obtener el binario rg más reciente. Pasó una semana. Escuchas que ha salido una nueva versión — 14.1.0 en lugar de 13.0.0. Y entonces surge una pregunta razonable: «Does cargo install have an equivalent update command?»
Esta pregunta ha acumulado miles de visitas en Stack Overflow. Y con razón. Resulta que en cargo no hay un comando incorporado cargo install update. No, no te has quedado ciego. Realmente no existe. Pero esto no significa que estés condenado a descargar manualmente las nuevas versiones. Hay varios enfoques, y los analizaremos todos — desde los simples hasta los elegantes.
En este artículo no solo traduciremos la respuesta de Stack Overflow. Compararemos enfoques, mostraremos código real y daremos consejos prácticos. ¡Allá vamos!
\n\n¿Por qué Cargo no tiene un comando «update» para los crates instalados?
\n\nAntes de lanzarnos a buscar errores, entendamos la filosofía. cargo install está diseñado para instalar crates binarios (aquellos que en Cargo.toml tienen una sección [[bin]]). No es un gestor de paquetes al estilo de apt o npm. Cargo es ante todo un compilador y gestor de dependencias para proyectos, no un instalador global de software.
El comando cargo update existe, pero funciona dentro del proyecto — actualiza las dependencias en Cargo.lock. Para los binarios instalados globalmente se necesita otra solución.
Método n.º 1: Reinstalación clásica (cargo install --force)
\n\nEl método más simple y obvio es reinstalar el crate con la bandera --force:
# Instalaste la primera vez\ncargo install ripgrep\n\n# Una semana después — actualizas\ncargo install --force ripgrep\n\n\n¿Qué sucede bajo el capó? Cargo descarga la última versión del crate desde crates.io, lo recompila y reemplaza el binario. La bandera --force obliga a sobrescribir el archivo existente, incluso si la versión es la misma.
Ventajas:
\n- \n
- No requiere instalar herramientas adicionales \n
- Funciona siempre y en todas partes \n
- Es intuitivo \n
Desventajas:
\n- \n
- Cada vez es una recompilación completa (lento si el crate es grande) \n
- No verifica si hay una nueva versión — simplemente reinstalas \n
- Incómodo si tienes instalados 10 o más crates \n
Es como reinstalar Windows para actualizar un controlador. ¿Funciona? Sí. ¿Es óptimo? No.
\n\nMétodo n.º 2: cargo-outdated — un detector inteligente de crates obsoletos
\n\nSi quieres saber con certeza que una actualización es necesaria, instala cargo-outdated:
cargo install cargo-outdated\n\n\nAhora verifica qué crates están desactualizados:
\n\ncargo outdated --root ~/.cargo\n\n\nLa salida mostrará algo como:
\n\nPackage Current Latest Deps\nripgrep 13.0.0 14.1.0 -\nbat 0.22.1 0.23.0 -\n\n\nLuego puedes actualizar un crate específico con cargo install --force. Pero esto sigue siendo dos pasos. ¿Quieres automatización? Sigue leyendo.
Ventajas:
\n- \n
- Muestra solo los crates que realmente están desactualizados \n
- Funciona también para las dependencias del proyecto \n
- Tiene opciones para filtrar \n
Desventajas:
\n- \n
- No actualiza por sí mismo — solo informa \n
- Requiere instalación por separado \n
Método n.º 3: cargo-update (¡sí, existe ese crate!)
\n\nLa respuesta más elegante a la pregunta «Does cargo install have an equivalent update command?» es