Enmilocalfunciona

Thoughts, stories and ideas.

Volta. Configurando Node y Package Managers entre proyectos (adiós NVM)

Publicado por Fernando Santamaría Marcos el

FrontVoltaNodeNPMYam

En los últimos años el ecosistema y las herramientas JavaScript han dado un gran salto cualitativo. Hemos experimentado grandes cambios en la forma en la que desarrollamos y en la que construimos y desplegamos nuestras aplicaciones y/o productos digitales.

En este contexto, Node ha sido y es muy importante. Sin él, no conoceríamos el desarrollo tal como es hoy. Le debemos mucho. De eso no hay duda.

Pero no es nuevo decir que existen, a veces, serias incompatibilidades entre las distintas versiones de Node y las de los múltiples packages que utilizamos a diario en nuestros desarrollos, lo cual se acrecienta cuando trabajamos en distintos proyectos.

Hace años, los desarrolladores teníamos una única instalación de Node para todo (versión x.x.x) pero cuando los proyectos evolucionaron y empezaron a tener necesidades de versionado diferentes entre Node y packages, switchear entre proyectos era una aventura y la experiencia de desarrollo se convirtió en algo para querer salir corriendo xD.

Pero la solución no se hizo esperar demasiado. Llegó NVM para decir adiós al problema.

NVM (Node Version Manager)

Es una herramienta básica en las máquinas de todo desarrollador, hasta el día de hoy...

NVM llegó y nos dio la posibilidad de administrar en nuestro equipo múltiples instalaciones de Node, con lo que switchear de una versión a otra según el proyecto se convirtió en algo sencillo.

Ahora bien. NVM no fue, ni es, fácil de instalar y configurar en un principio, con lo que la barrera es algo gruesa para desarrolladores sin demasiado conocimiento del sistema. Especialmente en Windows, donde a pesar de instalarse a través de un .exe, en multitud de casos había que tunear los PATH, etc., y eso normalmente no gusta y da "bajona" si no se es muy ducho para hacerlo con seguridad.

Así que, aunque este post va dirigido a desarrolladores, independientemente del sistema que utilicen, Windows o Unix., va dedicado a los desarrollares olvidados que trabajan con el SO de Microsoft.

Yo utilizo Linux, pero trabajo con equipos donde el 80% (mínimo) utiliza Windows. Y creedme, me he encontrado problemas de configuración de todo tipo, entre ellos, NVM. Y la solución no es ponerse Linux o comprarse un Mac xD. Los problemas de esta índole deben, o deberían, solucionarse con software.

Y ahora sí. Hablemos de Volta.


¿Qué es Volta?

Volta se define como “una forma sencilla de administrar las distintas herramientas de linea de comandos para el desarrollo de proyectos en JavaScript”

En la práctica, significa que Volta te da la posibilidad de administrar tanto versiones de Node, como las versiones de distintos package managers (NPM o Yarn), ya sea de forma global o local a los proyectos.

Además, estas versiones se quedan pinedadas en el package.json para que Volta realice el switch entre proyectos sin que tengas que decirle nada por línea de comandos. Es transparente, no requiere nada por nuestra parte.

Las diferencias más notorias respecto a NVM saltan a la vista:

  • NVM solo administra versiones de Node. Volta, además, administra versiones de los package managers.
  • NVM también puede pinear la versión de Node utilizada en un proyecto a través del archivo .nvmrc, pero necesita que se lo digas de forma implícita en el terminal con nvm use, o bien, instalar tools adicionales como AVN.
  • NVM es lento. Se toma de 2 a 5 segundos en iniciar el bash y en realizar los switchs. Volta es transparente. Además de que lo hace todo por ti, es ultra rápido. De hecho, no sabrás que lo ha hecho ;)

Pero todo esto es teoría y leer y leer. Donde mejor se ven estas cosas es ¡chacharreando! Así que, ¡vamos a empezar instalando Volta!

Instalando Volta

Volta es muy fácil de instalar en cualquier sistema, pero antes de proceder a la instalación hay que tener estos dos puntos en cuenta:

  • Se recomienda desinstalar NVM, así como cualquier versión global de Node que tengáis en la máquina.
  • Para los usuarios de Windows, es importante tener activadas las opciones de desarrollador antes de proceder a instalar Volta. Esto es un paso bastante crucial de cara a que Volta pueda resolver todo el tema de symlinking y funcionar correctamente.
volta-install-global.gif

Windows

Teniendo las opciones de desarrollador activadas, nos descargamos el instalador y seguimos los pasos (no hay nada que configurar, solo instalar).

Unix

Tan solo hay que hacer este curl y ¡listo!

curl https://get.volta.sh | bash  


Instalando una versión de Node global

Así de fácil, sin demasiadas palabras:

# Instala la última versión de Node
volta install node

# Instala una versión específica de Node
volta install node@15.14.0

# Instala la última versión de la v15.x.x
volta install node@15  

Con esas líneas instalamos una versión global de Node disponible allá donde abras el terminal.

Echa un vistazo al siguiente .gif de ejemplo, donde se parte de cero, sin ninguna versión de Node instalada previamente:

volta-install-global.gif


Instalando una versión específica en un proyecto

Tan solo tendremos que dirigirnos al root del proyecto y usar el comando pin:

# Instala la última versión de la v16.x.x
volta pin node@16  

Ademas de instalar la versión indicada, Volta nos grabará esta configuración en el package.json:

"volta": {
  "node": "16.14.0"
}

Esta pequeña config la utilizará Volta para realizarnos el switcheo entre versiones, automágicamente, cuando entremos y salgamos del proyecto.

volta-pin-project.gif


Instalando NPM o Yarn

Como hemos comentado anteriormente, otra de las grandes ventajas de Volta es que nos da la flexibilidad para instalar distintos package managers y administrar sus versiones, tanto de forma global como para un proyecto en concreto.

NPM

Podemos definir una versión global de NPM distinta a la que traiga la versión de Node por defecto.

# Instala de forma global la versión más reciente de NPM
volta install npm

# Instala de forma global una versión específica de NPM
volta install npm@8.5.0

# Instala la última versión de la v8.x.x de NPM
volta install npm@8  

Pero lo interesante es que también podemos instalar y/o pinear la versión de NPM que necesitemos en un proyecto utilizando de nuevo el comando pin:

# Instala (pin) en un proyecto la versión más reciente de NPM
volta pin npm

# Instala (pin) en un proyecto una versión específica de NPM
volta pin npm@8.5.0

# Instala (pin) en un proyecto la última versión de v8.x.x de NPM
volta pin npm@8  

Si hacemos pin a un proyecto, esta nueva config se verá reflejada de nuevo en el package.json para que Volta la recuerde y sepa a qué versión debe hacer el switch.

"volta": {
  "node": "16.14.0",
  "npm": "8.5.0"
}
volta-pin-npm.gif

Yarn

Igual que con NPM, se puede hacer exactamente lo mismo con Yarn.

Lo podemos instalar de forma global:

volta install yarn  

O de forma local en un proyecto usando el comando pin:

volta pin yarn  


¿Por qué trabajar con Volta?

Volta va más allá de NVM y nos permite tener una administración del versionado muchísimo más fina, transparente y ultrarrápida.

Una vez que nuestro entorno y proyectos están configurados con Volta, nos podemos olvidar de todo este rollo de versiones para focalizar nuestros esfuerzos en el desarrollo. Volta hace todo el trabajo por nosotros.

Así las cosas, integrar Volta en el workflow de un equipo de desarrollo es garantía de seguridad y estabilidad. Muchísima más garantía, si además, utilizamos los ficheros -lock.json para asegurar la integridad del versionado de los packages.

Todo el equipo usando las mismas versiones sin que haya que preocuparse de ellas es la auténtica salud.

Así que, cuidado con quien diga frases del tipo: “...pues en mi local funciona...” xD.

Pero no solo vamos a aprovecharnos de estas ventajas y beneficios para nuestros entornos locales, ¿no?

Es igual de importante llevarnos todo este workflow a las máquinas de los distintos entornos que utilicemos en los proyectos, es decir, la máquina de QA, la máquina de pre-producción, producción, etc.

De nada sirve tener todo el entorno controlado en nuestras máquinas a lo largo de todo equipo de desarrollo, si luego en el pipeline de CI/CD nos peta la instalación o la construcción del proyecto por tener en esa máquina una versión de Node o package manager incompatible.

¡Happy coding!

¿Te ha gustado? ¡Pues síguenos en Twitter para estar al día de próximas entregas!