Actualizar las dependencias de Node a la última versión de forma automática

Publicado el 17 noviembre 2021 por Daniel Rodríguez @analyticslane

Al trabajar en un proyecto con Node generalmente se instala la última versión de los paquetes necesarios. A medida que pasa el tiempo van saliendo nuevas versiones de estos con nuevas funcionalidades, soluciones de errores y parches de seguridad. Pero, si no hacemos nada, las versiones del archivo package.json no se actualizan. Algo que, en el peor de los casos, puede exponer los desarrollos debido a fallos de seguridad conocidos que pueden ser explotados. Para solucionar este problema y actualizar las dependencias de Node a la última versión se puede recurrir al paquete npm-check-updates.

Instalación de npm-check-updates

El paquete npm-check-updates permite actualizar las dependencias de cualquier proyecto, por lo que es aconsejable instalarlo como una dependencia global, nunca como una dependencia de un proyecto. Para lo que, como es habitual, se usará el comando npm con la opción -g

npm install npm-check-updates -g

Comando que en el caso de Linux y macOS ha de venir precedido de sudo. Una vez hecho esto ya tendremos el paquete instalado y podremos acceder al mismo mediante el comando ncu.

Comprobando y actualizando las dependencias de un proyecto Node

Tras la instalación del paquete en nuestro sistema podemos ir a cualquier proyecto y ejecutar el comando ncu. Por ejemplo, podemos descargar el proyecto jslane (código que se puede descargar desde GitHub) para ver los paquetes que requieren actualización.

Resultado de ejecutar el comando ncu en el proyecto jslane a fecha de publicación (respecto a la versión de GutHub se ha actualizado la versión de chai para disponer de un ejemplo de cada tipo).

En este ejemplo, con la versión del proyecto a fecha de publicación, existen cinco paquetes que pueden ser actualizados. Indicando la versión actual y la última disponible. Empleando además un código de colores diferente para los parches (verde), las versiones menores (azul) y las mayores (rojo). Algo que ayuda a decir si actualizar o no en función de que la nueva versión pueda tener cambios que no sean compatibles (las versiones mayores).

Actualizar las versiones a la última

En la sección anterior se ha obtenido el listado de paquetes, pero no se ha modificado el listado de archivos package.json. Aunque la actualización se puede hacer manualmente, esto también lo puede hacer automáticamente el comando ncu. Facilitando de este modo las tareas de mantenimiento. En el caso de que queramos actualizar todas las dependencias simplemente hay que lanzar el comando con la opción -u

ncu -u

Pero, en el caso de que solamente se deseen instalar los parches o las versiones menores esto se puede indicar con el comando --target seguido de algunas de las opciones ( patch, minor, o latest) con las que se indica el tipo de actualización. Por ejemplo, si queremos actualizar los paquetes a la última versión menor de la versión actual debemos escribir el comando

ncu -u --target minor
Actualización de los paquetes a la última versión menor de la versión instalada con ncu

Finalmente, si se desea un mayor control sobre los paquetes a actualizar, es mejor usar el modo interactivo en el que preguntará uno a uno que paquetes se van a actualizar. Modo al que se accede mediante la opción -i.

ncu -i

Una vez hecho esto se actualizará la lista de dependencias en el archivo package.json, pero no los paquetes. Lo que se tiene que hacer mediante npm con el comando install

npm install

Actualizar los paquetes globales

También es posible actualizar el listado de paquetes globales. Lo que se puede hacer usando el parámetro -g en el comando ncu.

ncu -g

En el caso de que existan paquetes globales que requieran actualización ncu creará un comando con el que realizar la tarea. Solamente hay que copiar este y ejecutarlo en la terminal (precediendo este de sudo tanto en Linux como macOS).

Conclusiones

En esta entrada hemos visto un paquete de Node gracias al cual es posible actualizar las dependencias de Node a la última versión de forma automática. Algo que nos puede evitar problemas debido a fallos de seguridad conocidos de paquetes que pueden ser utilizados para atacar nuestros proyectos.