Actualización de dependencias en Proyectos JS

By   Skrigueztep Skrigueztep Tue Oct 31 2023

En el desarrollo de software, una parte importante y hasta critica en ocasiones es la actualización de dependencias. La mayor parte mi background es con JS (JavaScript) (incluyendo TS, Typescript).

Quizá no parezca de importancia a simple vista o para proyectos pequeños, y para los proyectos que tienen o un timepo de vida “corto” o que son desarrollos sencillos.


Tabla de contenidos

  1. El proceso
  2. Conocer el proyecto
  3. Estar al día o poder mantenerte al día
  4. Auditar el proyecto
  5. Solución de las vulnerabilidades
  6. Dependencias desactualizadas

Pero hay muchas cosas que tomar en cuenta, desde la parte de mejoras de rendimiento, actualizaciones de seguridad, actualizaciones conforme a la evolución natural de las tecnologias, etc… Puede que parezca quizá un tema complicado, “intimidante”, confuso o también puede ser algo nuevo…

El proceso

Aquí vamos a ver parte del proceso que personalmente implemento y con los puntos a tomar en consideración, ya que por experiencia; el trabajar con proyectos desactualizados y después querer actualizarlos de golpe a lo más actual, es muy tedioso, en ocasiones complicado dependiendo de la experiencia y el conocimiento sobre el proyecto… o incluso si los cambios son muy drasticos se vuelve imposible realizar actualización alguna. Y ni hablar del impacto 😖😖😖🤯🤯😵‍💫😵‍💫😵‍💫💸💸💸,hay que tomar en cuenta la consideración de los riesgos que puede haber.

Conocer el proyecto

Lo principal que podria mencionar es: conocer el proyecto, y con esto me refiero, tanto a las herramientas, las tecnologias, las posibles limitaciones que puede tener el proyecto, el entorno, las dependencias, etc… Si bien no tienes que conocer minuciosamente y de forma granular el proyecto; si es recomendable que al menos tengas conocimiento acerca del contexto general de él y de lo cual depende para su funcionamiento.

Estar al día o poder mantenerte al día

Si bien no somos sabelo todo, no tenemos todo el conocimiento del mundo y tampoco es posible estar al tanto de cada update, de cada nuevo lanzamiento, de todos y cada uno de los cambios que realizan en cada una de las distintas dependencias que puede implementar un proyecto.

No está demás estár al tanto de los mayores cambios… en caso de que no se tenga la oportunidad de ello, durante el proceso de actualización podemos aprovechar para documentarnos acerca de ellos.

Auditar el proyecto

En este caso se usa NPM (Node Package Manager o el Gestor de Paquetes de Node), que es el gestor por defecto que viene con el entorno de ejecución, pero en caso de que utilices otro: los comandos no cambian mucho, ya que la mayoria de alternativas siguen “el estandard”. Para auditar el proyecto puedes utilizar:

npm audit

Esto devolverá la cantidad de dependencias vulnerables totales y por su severidad; las severidades que puede arrojar son:

  • Critica
  • Alta
  • Moderada
  • Baja
  • Info

Si se requiere más información acerca de las vulnerabilidades, se puede ejecutar el comando:

npm audit --json

Este arrojará los detalles de cada una de las vulnerabilidades en formato json.

Solución de las vulnerabilidades

La solución de las vulnkerabilidades en teoria es relativamente fácil, ya que cuando se ejecuta el comando anterior, te arroja si las vulnerabilidades se pueden solucionar de forma “automatica” al ejecutar el comando:

npm audit --fix

Pero en este punto intervien también la parte del calculo de las veriones, como se mencionó antes; y las versiones con cambios mayores (quizá no se entienda muy bien este punto pero en una publicación posterior se abordará, por lo mientras puedes encontrar información en la siguiente liga: https://semver.org/lang/es/), no se pueden actualizar de forma aútomatica porque intervienen muchas veces estos detalles con las versiones quetenemos instaladas además de que no es recomendable actualizar las dependencias a versiones mayores sin tener en cuenta los riesgos que se pueden incurrir.

Para actualizar las dependencias a las versiones mayores puedes hacerlo manuelamente.

Dependencias desactualizadas

También npm nos brinda un comando para conocer que versiones se encuentran desactualizadas, al consultar el registro de versiones que tiene el mismo registro en donde se alojan las dependencias. Para conocer las dependencias desactualizadas se puede ejecutar:

npm outdated

Este comando arrojará un listado de las dependencias que están desactualizadas, en el cual muestra la versión actual, la versión “requerida” o recomendada y la última versión, de igual forma estas dependencias se pueden actualizar por medio de npm pero también entre en juego el calculo de las versiones. Para actualizar las dependencias desactualizadas, se puede ejecutar el comando:

npm update --save

Este comando, actualizará las dependencias desactualizadas dentro del workspace, del proyecto o dentro del espacio que sea ejecutado, NO actualizará las dependencias globales o al npm mismo. Si persisten dependencias desactualizadas en el proyecto lo más seguro es que sean dependencias con cambios de versión mayores. De igual forma estas se pueden actualizar manualmente.

Y listo!… estos son algunos puntos, algunos aspectos y el proceso a grandes rasgos que llevo a cabo a la hora de revisar proyectos. Si tienes dudas, por supuesto puedes consultar la documentación oficial en cualquier momento: https://docs.npmjs.com/cli/v7/commands