Si alguna vez has usado Node.js, entonces seguro que has usado npm.

npm (node package manager) es el gestor de dependencias/paquetes que obtienes por defecto cuando instalas Node.js. Proporciona una manera para que los desarrolladores instalen paquetes tanto a nivel global como local.

A veces puede que quieras echar un vistazo a un paquete específico y probar algunos comandos. Pero no puedes hacerlo sin instalar las dependencias en tu carpeta local de node_modules.

Ahí es donde entra npx.

En este artículo, vamos a echar un vistazo a las diferencias entre npm y npx y aprenderemos cómo obtener lo mejor de ambos.

En primer lugar, vamos a entender lo que npm es en realidad y lo que podemos hacer con él.

El gestor de paquetes npm

npm es un par de cosas. En primer lugar, es un repositorio en línea para la publicación de proyectos de código abierto Node.js.

Segundo, es una herramienta CLI que ayuda a instalar esos paquetes y a manejar sus versiones y dependencias. Hay cientos de miles de librerías y aplicaciones de Node.js en npm y muchas más se agregan cada día.

npm por sí mismo no tiene ningún paquete. Si quieres ejecutar un paquete usando npm, debes especificar ese paquete en tu archivo package.json.

Cuando los ejecutables se instalan a través de paquetes npm, npm crea enlaces a ellos:

  • las instalaciones locales tienen enlaces creados en el directorio ./node_modules/.bin/
  • las instalaciones globales tienen enlaces creados desde el directorio global bin/ (por ejemplo: /usr/local/bin en Linux o %AppData%/npm en Windows)

Para ejecutar un paquete con npm tienes que escribir la ruta local, así:

$ ./node_modules/.bin/tu-paquete

o puedes ejecutar un paquete instalado localmente agregándolo a tu archivo package.json en la sección de scripts, así:

{
  "name": "tu-aplicacion",
  "version": "1.0.0",
  "scripts": {
    "tu-paquete": "tu-paquete"
  }
}

Luego puedes ejecutar el script usando npm run:

npm run tu-paquete

Puedes ver que manejar un paquete con npm simple requiere bastante ceremonia.

Afortunadamente, aquí es donde npx es útil.

El ejecutor de paquetes npx

Desde la versión 5.2.0 de npm, npx está preinstalado con npm. Así que es más o menos estándar hoy en día.

npx es también una herramienta CLI cuyo propósito es facilitar la instalación y la gestión de las dependencias alojadas en el registro npm.

Ahora es muy fácil ejecutar cualquier tipo de ejecutable basado en Node.js que normalmente se instalaría a través de npm.

Puedes ejecutar el siguiente comando para ver si ya está instalado para tu versión actual de npm:

$ which npx

Si no lo está, puede instalarlo así:

$ npm install -g npx

Una vez que te asegures de tenerlo instalado, veamos algunos de los casos de uso que hacen que npx sea extremadamente útil.

Ejecutar un paquete instalado localmente fácilmente

Si deseas ejecutar un paquete instalado localmente, todo lo que tienes que hacer es escribir:

$ npx tu-paquete

npx comprobará si <comando> o <paquete> existe en $PATH, o en los binarios del proyecto local, y si es así lo ejecutará.

Ejecutar los paquetes que no estén previamente instalados

Otra gran ventaja es la capacidad de ejecutar un paquete que no fue instalado previamente.

A veces sólo quieres usar algunas herramientas CLI pero no quieres instalarlas globalmente sólo para probarlas. Esto significa que puedes ahorrar algo de espacio en disco y simplemente ejecutarlos sólo cuando los necesites. Esto también significa que tus variables globales estarán menos contaminadas.

Ejecuta código directamente desde GitHub

execute-gist-script-with-npx

Este es bastante radical.

Puedes usar npx para ejecutar cualquier gist y repositorio de GitHub. Centrémonos en ejecutar un gist de GitHub porque es más fácil crear uno.

El script más básico consiste en el archivo principal de JS y un package.json. Después de configurar los archivos, todo lo que tienes que hacer es ejecutar el npx con el enlace a ese gist como se muestra en la imagen de arriba.

Aquí puedes encontrar el código que usé para este ejemplo.

Asegúrate de leer atentamente cualquier script antes de ejecutarlo para evitar problemas serios que pueden ocurrir debido a código malicioso.

Prueba diferentes versiones de los paquetes

npx hace que sea extremadamente fácil probar diferentes versiones de un paquete o módulo de Node.js. Para probar esta impresionante característica, vamos a instalar localmente el paquete create-react-app y probar una próxima versión.

Esto enlistará algunas etiquetas dist cerca del final de la salida. Las etiquetas dist proporcionan alias para los números de versión, lo que hace que sea mucho más fácil de escribir.

$ npm v create-react-app
create-react-app-dist-tags

Usemos npx para probar la etiqueta dist next de create-react-app que creará la aplicación dentro de un directorio sandbox.

$ npx create-react-app@next sandbox

npx instalará temporalmente la siguiente versión de create-react-app, y luego se ejecutará para andamiar la aplicación e instalar sus dependencias.

Una vez instalada, podemos navegar a la aplicación de esta manera:

$ cd sandbox

y luego empezar con este comando:

$ npm start
create-react-app-npx-next-version

Se abrirá automáticamente la aplicación de React en una ventana de tu navegador predeterminado. ¡Ahora tenemos una aplicación que funciona en la próxima version del paquete create-react-app!

index-page-react-app
Así es como debería ser la página de índica de tu aplicación de React

Conclusión

npx nos ayuda a evitar el versionado, los problemas de dependencia y la instalación de paquetes innecesarios que sólo queremos probar.

También proporciona una forma clara y fácil de ejecutar paquetes, comandos, módulos e incluso listas y repositorio de GitHub.

Si no has usado npx antes, ¡ahora es un buen momento para empezar!

Esto fue originalmente publicado en mi blog.
Puedes contactarme y preguntarme cualquier cosa en Twitter y Facebook.

Traducido del artículo de Carol-Theodor Pelu - npm vs npx — What’s the Difference?