¿Qué es npx?

No sé si os ha pasado lo mismo que a mí, y es que últimamente cuando encuentro repositorios en github que requieren la instalación de una CLI, por ejemplo el proyecto create-react-app, veo que de la noche a la mañana han cambiado la forma de instalar esa CLI que te montaba el esqueleto del proyecto, pasando de una instrucción:

$ npm install -g create-react-app

a otra instrucción:

$ npx create-react-app

al ver esto ya os podéis imaginar mi confusión y las preguntas que me rondaron por la cabeza, preguntas que voy a responder a continuación.

 

¿Qué es esto de npx?

La primera pregunta era obvia, necesitaba crear un proyecto basado en React y en ese momento npx era un impedimento, así que me puse a investigar, ¿algo muy agradable verdad? toda la productividad al traste (¿por qué me hacen esto...?). Yo ya me imaginaba que era otro gestor de paquetes, pensé: estos de facebook, que si npm, que si yarn ¿y ahora esto?

Justo debajo de la nueva instrucción para instalar la CLI había una anotación diciendo que si tenías instalado npm 5.2+ también tenías npx instalado así que comprobé mi versión de npm. Cumplía los requisitios así que probé de escribir en la terminal npx ¡hala, funciona! Pues parece que no es otro gestor de paquetes. Al ser de npm me dije, voy a su web a ver si encuentro la documentación, pues ni rastro. Entonces como mínimo tiene que haber un repositorio en github, ¡y lo encontré! En el repositorio se nos explica que npx es un ejecutador de paquetes binarios de npm, es decir, que ejecuta entre otras cosas, una CLI.

 

¿Por qué se ha inventado npx?

Responder a esta pregunta me llevó un poco más de investigación, al no tener documentación más que en el repositorio de github y algunos posts por  internet, me costó entender qué ganaba al usar npx. No obstante, una vez leído todo, se pueden llegar a varias conclusiones:

Si usáis npx no tendréis que instalar nunca más un paquete como paquete global para poder ejecutarlo

No habéis tenido el problema de necesitar una herramienta como por ejemplo jest, mocha, jasmine, grunt o gulp en uno de vuestros proyectos ¿y que requiera además una versión muy concreta? Estas herramientas se instalan en modo global para poder ejecutarlas desde la terminal sin más complicaciones, no obstante a la que tienes un nuevo proyecto que necesita una versión mayor de tus paquetes npm globales ¡ay, la hemos liado! Ya estamos instalando y resinstalando diferentes versiones cuando cambiamos de proyecto, problemón. Pues este problema esta solucionado con npx ya que a partir de ahora, nada de instalar paquetes globales, ese tiempo ya pasó (cuidado que siempre hay excepciones). Ahora con npx puedes instalar jest como dependencia local de desarrollo y al ejecutar npx jest en la terminal ¡y funcionará!

Eso es por que npx se encarga de buscar el ejecutable de jest dentro de tu carpeta node_modules.

 

Si usáis npx no tendréis que crear un npm script para ejecutar binaros locales.

Para conseguir un comportamiento similar al del punto anterior, es decir, instalar paquetes como dependencias locales de desarrollo en lugar de globales, hasta ahora si queríamos ejecutar el paquete debíamos incluir en la sección scripts de nuestro package.json la instrucción a ejecutar o poner en la terminal la ruta del paquete dentro de node_modules.

...
  "scripts": {
    "test": "jest --watch"
  },
...

Ahora con npx, ya hemos visto que eso no es necesario, aunque siempre está bien tener nuestra sección scripts para ayudar al resto de compañeros de equipo o a nosotros mismos a recordar los comandos que vamos a necesitar para desarrollar con comodidad.

 

Si usáis npx podéis ejecutar comandos desechables.

Lo que quiero decir con esto es: ¿no os ha pasado que cuando vais a empezar un nuevo proyecto, la CLI que lo genera tiene ya una nueva versión? Lo malo de esto es que podría pasaros sin que ni siquiera os enteraseis de que hay una nueva versión. Pues bien, otra ventaja de npx es que puedes ejecutar cualquier paquete npm ¡sin tenerlo instalado! Por tanto no tenemos por que instalar en local el paquete create-react-app para poder generar un proyecto. Con npx podemos ejecutar $ npx create-react-app y se encargará de descargar el paquete en su última versión, que haga su cometido para finalmente eliminarlo de nuestro sistema, esto también es perfecto para probar si una herramienta puede serviros o no de manera rápida, ¡fantástico!

¿Te ha gustado el artículo? ¿Quieres que te avise de mis próximas publicaciones?

¿Quieres seguir aprendiendo?

Contextualiza a tu equipo

Esta semana mi cliente Clickennet ha decidido que es el momento de dar a su equipo motivación y conocimientos para que ellos mismos puedan, a partir de ahora, ser capaces de mejorar los procesos que existen en la empresa para llevar a cabo un...

Seguir leyendo