Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=10d42605-95ac-4fec-ae4e-bb71d25973f1

TRUCO: Actualizar a la última las versiones de dependencias npm en package.json

npm es el gestor de paquetes de Node.js. Nació en el mundo backend, para gestionar paquetes en el servidor, pero hace ya mucho tiempo que permite gestionar paquetes y dependencias en el lado cliente, por lo que se ha convertido en la herramienta indispensable del desarrollador web Front-End.

Los paquetes que vamos añadiendo a nuestros desarrollos se almacenan en el archivo package.json, ubicado en la carpeta raíz de nuestro proyecto, y se encuentran en los nodos dependencies y devDependencies, para anotar dependencias que necesitamos para la propia aplicación y para el desarrollo de la misma respectivamente.

Este es un ejemplo de contenido de archivo package.json:

{
  "name": "Mi aplicación",
  "version": "1.0.0",
  "author": "Jose M. Alarcon",
  "license": "MIT",
  "dependencies": {
    "jquery": "^3.2.1",
    "purecss": "^0.6.2"
  },
  "devDependencies": {
    "babel-core": "^6.25.0",
    "babel-loader": "^7.0.0",
    "babel-plugin-syntax-dynamic-import": "^6.18.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^0.28.4",
    "extract-text-webpack-plugin": "^2.1.2",
    "file-loader": "^0.11.1",
    "jquery": "^3.2.1",
    "rimraf": "^2.6.1",
    "style-loader": "^0.18.1",
    "uglify-js": "^2.8.29",
    "url-loader": "^0.5.8",
    "webpack": "^3.0.0",
    "webpack-dev-server": "^2.4.5"
  }
}

En la actualidad, de hecho, y gracias a herramientas como Browserify y (sobre todo) Webpack, el nodo dependencies casi no se utiliza y la mayor parte de las referencias se llevan a tiempo de desarrollo en devDependencies.

Si te fijas en el archivo anterior, la mayor parte de las referencias están desactualizadas. Esto no supone un problema en este caso concreto ya que con el símbolo ^ al principio le estamos indicando que se utilice cualquier versión "minor" que sea superior a la actual. Es decir, por ejemplo, en el caso de Webpack en el momento de escribir esto la versión más reciente es la 3.11.1 (lo escribí unos días antes de que lanzasen la 4.0). Por lo tanto cuando ejecutemos npm install se descargará esta versión sin problema, pues la versión "major" (la 3) no ha cambiado y es la misma.

Sin embargo en paquetes que tengan versiones "major" más recientes esto no ocurrirá y solo se instalará la más alta que tenga la misma versión principal. Por ejemplo, el paquete uglify-js que tenemos referenciado tiene indicada la versión 2.8.29 pero ahora mismo la última es la 3.3.12. Por lo tanto no se actualizará, ya que se pasa de la 2 a la 3 en "major", quedándose en la más alta posible dentro de las "2" que es la 2.8.29 (o sea, la que ya está especificada). Esto es bueno porque nos evita problemas de compatibilidad hacia atrás, pero si queremos sacarle partido a las últimas versiones, nos limita. Por ello, es posible que deseemos utilizar la última versión disponible, aun a riesgo de que haya algún problema de compatibilidad.

Otra opción es que tengamos un archivo package.json patrón que utilicemos para nuestros desarrollos y queramos actualizarlo antes de comenzar un nuevo proyecto para que refleje los últimos números de versión disponibles, no los que estaban vigentes en el momento de generarlo por primera vez.

Una forma de conseguir actualizar el archivo es "a mano": yendo referencia por referencia y poniendo un >= delante en vez del ^. De esta manera al instalar los paquetes de nuevo, se actualizarán a la versión más reciente de cada paquete.

Nota: también se podría poner un asterisco * o una cadena vacía "" para conseguir que se instale siempre la versión más reciente.

Pero tenemos una opción mejor y automatizada...

npm-check-updates

Como casi todo lo relacionado con JavaScript hoy en día, disponemos un paquete en npm que nos ayudará a conseguirlo. En este caso, actualizar package.json con el número de versión disponible para todas las dependencias.

Se trata del paquete npm-check-updates.

Este paquete nos permite consultar cuáles son las últimas versiones de cada dependencia sin tocar el package.json o mostrarlas y al mismo tiempo actualizar el archivo.

Para instalarlo abriremos una línea de comandos y escribiremos:

npm install -g npm-check-updates

A partir de ese momento dispondremos de un comando global del mismo nombre (npm-check-updates), o mejor áun, abreviado como ncu, que nos permitirá hacer todo lo indicado.

Por ejemplo, si abrimos una línea de comandos en la carpeta raíz de nuestro proyecto y escribimos simplemente:

ncu

Veremos por pantalla algo similar a lo siguiente:

Ejecución de ncu

Lo que nos está mostrando son las versiones actuales de nuestros paquetes y, separadas con una flecha, las más recientes. Se muestran en dos grupos: los que necesitan actualizar su número "major" para poder tener instalada la última versión, y los que pueden actualizarse a lo último disponible sin necesidad de actualizar package.json, ya que la indicación actual de versión es suficiente.

Si escribimos:

ncu -u

lo que hará será actualizar el archivo package.json para poner la última versión de los paquetes que necesitan actualizar su versión "major", dejando intactos los del segundo grupo.

Por ejemplo, en nuestro caso veremos esto por pantalla:

npm -u

pero en el archivo package.json solo se modificarán las versiones que es necesario tocar para disponer de los paquetes más actualizados (las del primer grupo).

ACTUALIZACIÓN 2019: se ha quitado del producto la opción -a explicada a continuación. Ahora al usar -u se actualiza todo, independientemente de la versión máxima especificada. Lo siguiente se deja por histórico.

Si queremos que se actualicen todos en cualquier caso, entonces usaremos:

ncu -a

obteniendo el siguiente resultado:

ncu -a

que nos informa de las que se han actualizado a pesar de no ser necesario.

Con esto tendremos el archivo con las versiones más recientes escritas como requisito, que es lo que buscábamos.

¡Espero que te resulte útil!

Fecha de publicación:
José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón
Archivado en: Desarrollo Web

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (7) -

Charles Cifuentes
Charles Cifuentes

Muy útil este artículo

Gracias

Responder

Excelente artículo!!! muchas gracias

Responder

Samuel Lozada
Samuel Lozada

Excelente, gracias por el aporte

Responder

Excelente aporte!

Responder

Muy bueno, gracias!

Responder

Carlos Alvarado
Carlos Alvarado

Excelente, muy buen articulo, muchas gracias.

Responder

Laura Berlanga
Laura Berlanga

muy buen artículo

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.