- Principales criterios de comparación: compatibilidad multiplataforma, configuración inicial, fuente de versiones de Node y uso diario
Node Version Manager (NVM)
- Con 75.2k estrellas en GitHub, es la solución más popular para gestionar versiones de Node
- Apareció temprano y ganó gran popularidad en la comunidad
- No tiene soporte completo para Windows, y funciona en GitBash, Cygwin, WSL, etc.
- Existe un paquete separado para Windows,
nvm-windows, pero no es NVM en sí
- Solo soporta shells POSIX (
bash, zsh), por lo que deja fuera a usuarios de Fish y otros
- La instalación puede hacerse con un comando sencillo
- Puede reconocer la versión de Node.js a usar mediante el archivo
.nvmrc
- El comando
nvm use configura la versión de Node.js solo en el shell actual, así que la versión se mantiene incluso al salir de la carpeta del proyecto
- Esto implica la carga de tener siempre presente la versión de Node.js del shell actual y la que requiere el proyecto
- Es mejor que gestionar manualmente todas las versiones de Node.js, pero está lejos de una integración perfecta
N
- Un gestor de versiones de Node.js popular con 18.5k estrellas en GitHub
- No es multiplataforma y tiene más limitaciones que NVM
- No funciona en el shell nativo de Windows, Git for Windows Bash ni en la DLL de Cygwin
- Puede instalarse directamente con NPM o Brew, o descargando un script
sh
- Puede detectar directamente la versión de Node desde la sección
"engines" de package.json
- Sigue existiendo el problema de tener que rastrear manualmente qué versión exacta de Node.js usar en otros proyectos
- Gestiona una versión “global” de Node.js, así que incluso después de cerrar el shell queda activa la versión usada en el último proyecto
Fast Node Manager (FNM)
- Un gestor de versiones de Node escrito en Rust, con 15.2k estrellas en GitHub
- Es el primer gestor de versiones de Node multiplataforma de la lista
- Funciona en Windows sin necesidad de instalar otros paquetes
- El proceso de instalación es claro e intuitivo
- Gestiona la versión de Node.js por shell y usa una versión “predeterminada” cuando el proyecto no especifica una
- Tiene una función para cambiar automáticamente la versión de Node.js según la carpeta, aunque requiere configuración
- Para que el cambio automático funcione correctamente, la versión necesaria de Node.js debe estar instalada de antemano
- Solo puede detectar la versión de Node desde archivos
.node-version o .nvmrc
Volta
- Con 10k estrellas en GitHub, es una estrella en ascenso en el mundo de los gestores de versiones
- Está escrito en Rust y es multiplataforma
- El proceso de instalación es fluido en sistemas basados en Unix
- No requiere archivos adicionales al configurar la versión de Node.js
- Toma la configuración directamente desde
package.json
- La sección
"engines" está justo al lado de la configuración de Volta, lo que facilita sincronizar versiones
- Puede gestionar el toolchain, por lo que no solo cambia dinámicamente la versión de Node.js, sino también la de Yarn
- Cada vez que se ejecuta un comando de instalación, garantiza que las versiones de Node.js y Yarn coincidan con lo declarado
PNPM
- Aunque suele considerarse una alternativa a NPM o Yarn, también puede gestionar versiones de Node.js
- Es multiplataforma y ofrece la misma experiencia de gestión de versiones de Node.js en todas las plataformas
- Como la gestión de versiones de Node no es su función principal, es difícil usarlo junto con NPM o Yarn
- El Node.js instalado con PNPM no incluye Corepack
- Solo puede gestionar versiones de Node.js de forma global, no por shell
- No cambia dinámicamente la versión de Node.js al moverse entre proyectos, por lo que hay que rastrearla manualmente
Conclusión
- Los gestores de versiones de Node.js han evolucionado bastante
- NVM fue la solución más antigua y popular, y sigue siéndolo
- Pero el ecosistema está evolucionando, y han aparecido diversas herramientas como N, FNM y Volta
- Por ahora, Volta parece ser el gestor de versiones de Node.js más completo y con más funcionalidades
- Volta es multiplataforma, ofrece una experiencia fluida en el uso diario y además gestiona otras herramientas usadas en el proyecto
4 comentarios
Me da flojera aprender a manejarlo aparte como paquete, así que simplemente estoy usando
brew unlink && brew link node@14.Hay tantas opciones que las ganas de aprenderlo en serio se sienten "muy débiles".
Si recuerdo cuando antes hurgaba entre ejecutables para Windows en FileForge, sí dan ganas de pensar si de verdad está bien que ahora sea tan cómodo.
Para mí, más que el rendimiento, lo que espero de un gestor de versiones es la versatilidad. En ese sentido, estoy usando https://github.com/asdf-vm/asdf con bastante satisfacción. Según el plugin, no solo puede gestionar Node, sino también Python, Ruby, Golang y otros. También estoy usando bien el plugin de direnv.
Nodenv(https://github.com/nodenv/nodenv) también es una alternativa bastante buena, así que da un poco de pena que no lo hayan mencionado. Como tiene 2.2k estrellas en GitHub, parece que lo dejaron fuera por considerarlo poco conocido.
Como está basado en scripts de shell, su compatibilidad con Windows es limitada, similar a NVM o N; pero a cambio, además de la versión global de Node.js, también permite fijar una versión de Node.js por carpeta, o incluso abrir un nuevo entorno de shell que use una versión específica de Node.js.