Hoy, en la quinta parte de la traducción del manual de Node.js, completaremos el análisis de las características de npm, en particular, abordaremos temas como encontrar versiones instaladas de paquetes npm, instalar versiones antiguas de paquetes, actualizar dependencias, desinstalación local y global de paquetes. Aquí hablamos de npx.

[Le aconsejamos que lea] Otras partes del cicloParte 1:
Información general y primeros pasosParte 2:
JavaScript, V8, algunos trucos de desarrolloParte 3:
Hosting, REPL, trabajar con la consola, módulosParte 4:
archivos npm, package.json y package-lock.jsonParte 5:
npm y npxParte 6:
bucle de eventos, pila de llamadas, temporizadoresParte 7:
Programación asincrónicaParte 8:
Guía de Node.js, Parte 8: Protocolos HTTP y WebSocketParte 9:
Guía de Node.js, parte 9: trabajar con el sistema de archivosParte 10:
Guía de Node.js, Parte 10: Módulos estándar, flujos, bases de datos, NODE_ENVPDF completo de la guía Node.js Encontrar versiones de paquetes npm instalados
Para conocer las versiones de todos los paquetes npm instalados en la carpeta del proyecto, incluidas sus dependencias, ejecute el siguiente comando:
npm list
Como resultado, por ejemplo, puede resultar lo siguiente:
> npm list /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 ├── get-stdin@5.0.1 ├─┬ optimist@0.6.1 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.3 ├─┬ string-width@2.1.1 │ ├── is-fullwidth-code-point@2.0.0 │ └─┬ strip-ansi@4.0.0 │ └── ansi-regex@3.0.0 └── strip-eof@1.0.0
Puede averiguar lo mismo mirando el
package-lock.json
proyecto, pero la estructura de árbol que muestra el comando anterior es más conveniente para ver.
Para obtener una lista similar de paquetes instalados globalmente, puede usar el siguiente comando:
npm list -g
Solo puede mostrar información sobre paquetes locales de nivel superior (es decir, aquellos que instaló usted mismo y que se enumeran en
package.json
) de la siguiente manera:
npm list
Como resultado, si, por ejemplo, instaló solo el paquete cowsay, se mostrará lo siguiente:
> npm list
Para averiguar la versión de un paquete específico, use el siguiente comando:
npm list cowsay
Como resultado de su implementación, obtenemos aproximadamente lo siguiente:
> npm list cowsay /Users/flavio/dev/node/cowsay └── cowsay@1.3.1
Este comando también es adecuado para descubrir las versiones de dependencia de los paquetes que instaló. En este caso, el nombre del paquete de dependencia actúa como el nombre del paquete que se le pasó y el resultado del comando se verá así:
> npm list minimist /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 └─┬ optimist@0.6.1 └── minimist@0.0.10
Se resaltará una entrada sobre el paquete de dependencia en esta estructura.
Si desea saber cuál es el número de la última versión de un paquete disponible en el repositorio npm, necesitará un comando de la siguiente forma:
npm view [package_name] version
En respuesta, ella emite el número de versión del paquete:
> npm view cowsay version 1.3.1
Instalar versiones antiguas de paquetes npm
Puede ser necesario instalar una versión anterior del paquete npm para resolver problemas de compatibilidad. Puede instalar la versión requerida del paquete desde npm usando la siguiente construcción:
npm install <package>@<version>
En el caso del paquete cowsay que estamos utilizando como ejemplo, el comando npm
install cowsay
instalará su última versión (1.3.1 en el momento de escribir este artículo). Si necesita instalar su versión 1.2.0, use este comando:
npm install cowsay@1.2.0
Puede especificar versiones instalando paquetes globales:
npm install -g webpack@4.16.4
Si necesita averiguar qué versiones de un paquete están disponibles en npm, puede hacerlo con la ayuda de esta construcción:
npm view <package> versions
Aquí hay un ejemplo del resultado de su trabajo:
> npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ]
Actualizar dependencias del proyecto a sus últimas versiones
Cuando instala un paquete con un comando del tipo
npm install <packagename>
, la última versión se descarga del repositorio y se coloca en la carpeta
node_modules
. En este caso, las entradas correspondientes se agregan a los
package-lock.json
package.json
y
package-lock.json
ubicados en la carpeta del proyecto.
Además, al instalar un paquete, npm encuentra e instala sus dependencias.
Supongamos que instalamos el conocido paquete cowsay ejecutando el
npm install cowsay
. El paquete se instalará en la carpeta
node_modules
del proyecto y la siguiente entrada estará en el archivo
package.json
:
{ "dependencies": { "cowsay": "^1.3.1" } }
package-lock.json
también incluirá información sobre este paquete. Aquí hay un fragmento de ella:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "cowsay": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz", "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", "requires": { "get-stdin": "^5.0.1", "optimist": "~0.6.1", "string-width": "~2.1.1", "strip-eof": "^1.0.0" } } } }
De estos dos archivos puede descubrir que instalamos cowsay versión 1.3.1 y que la regla de actualización del paquete se especifica como
^1.3.1
. En la cuarta parte de esta serie de materiales, ya hemos hablado sobre las reglas de las versiones semánticas. Recuerde que esta entrada significa que npm puede actualizar el paquete cuando se lanzan sus versiones menores y parches.
Si, por ejemplo, sale una nueva versión menor de un paquete y ejecutamos el comando
npm update
, la versión instalada del paquete se actualiza y la información sobre el paquete instalado se actualiza en el archivo
package-lock.json
, y el archivo
package.json
permanece sin cambios.
Para saber si se han lanzado nuevas versiones de los paquetes utilizados en el proyecto, puede usar el siguiente comando:
npm outdated
Estos son los resultados de este comando para un proyecto cuyas dependencias no se han actualizado durante mucho tiempo:
Análisis de dependencias de proyectos obsoletos.Algunas de las actualizaciones de paquetes disponibles son sus versiones principales, actualizaciones que no ocurrirán cuando se
npm update
comando
npm update
. No se realiza la actualización a versiones principales de este equipo, ya que (por definición) pueden contener cambios importantes que no se distinguen por la compatibilidad con versiones anteriores anteriores, y npm busca salvar al desarrollador de los problemas que pueden causar el uso de dichos paquetes.
Para actualizar a nuevas versiones principales de todos los paquetes usados, instale globalmente el
npm-check-updates
:
npm install -g npm-check-updates
Luego ejecute la utilidad proporcionada por él:
ncu -u
Este comando actualizará el archivo
package.json
, realizando cambios en las instrucciones para las versiones adecuadas del paquete en las
devDependencies
dependencies
y
devDependencies
. Esto permitirá que npm actualice los paquetes utilizados en el proyecto a nuevas versiones principales después de ejecutar el comando
npm update
.
Si desea instalar las últimas versiones de paquete para un proyecto que acaba de descargar, que aún no tiene una carpeta
node_modules
, en lugar de
npm update
, ejecute el comando
npm install
.
Desinstalación local o global de paquetes
Para desinstalar un paquete que se instaló previamente localmente (usando el comando
install <package-name>
), ejecute un comando similar a este:
npm uninstall <package-name>
Si el paquete se instala globalmente, deberá usar el
(--global
-g
(--global
) para eliminarlo. Por ejemplo, un comando similar podría verse así:
npm uninstall -g webpack
Al ejecutar dicho comando, la carpeta actual no importa.
Acerca de elegir entre la instalación global y local de paquetes
¿Cuándo y por qué los paquetes se instalan mejor a nivel mundial? Para responder a esta pregunta, recordemos cómo difieren la instalación local y global de paquetes:
- Los paquetes locales se instalan en el directorio en el que ejecutan un comando de la forma
npm install <package-name>
. Dichos paquetes se encuentran en la carpeta node_modules
ubicada en este directorio. - Los paquetes globales se instalan en una carpeta especial (que depende de la configuración específica de su sistema), independientemente de dónde ejecuten un comando de la forma
npm install -g <package-name>
.
Conectar paquetes locales y globales en el código es lo mismo:
require('package-name')
Entonces, ¿cuál es la mejor manera de instalar paquetes?
En general, todos los paquetes deben instalarse localmente. Debido a esto, incluso si tiene docenas de proyectos Node.js, puede garantizar, si es necesario, el uso de diferentes versiones de los mismos paquetes.
La actualización del paquete global lleva al hecho de que todos los proyectos en los que se aplica utilizarán su nueva versión. Es fácil entender que esto, en términos de soporte de proyectos, puede conducir a una verdadera pesadilla, ya que las nuevas versiones de algunos paquetes pueden ser incompatibles con sus versiones anteriores.
Si cada proyecto tiene su propia versión local de un paquete, aunque esto pueda parecer un desperdicio de recursos, esta es una tarifa muy pequeña por la oportunidad de evitar las consecuencias negativas que pueden ser causadas por la incompatibilidad de las nuevas versiones de paquetes actualizados centralmente con el código del proyecto.
Los paquetes deben instalarse globalmente cuando son algunas utilidades llamadas desde la línea de comandos que se utilizan en muchos proyectos.
Dichos paquetes también se pueden instalar localmente ejecutando las utilidades de línea de comandos que proporcionan usando npx, pero algunos paquetes aún están mejor instalados globalmente. Dichos paquetes con los que puede estar familiarizado incluyen, por ejemplo, los siguientes:
- npm
- crear-reaccionar-aplicación
- vue-cli
- gruñido-cli
- moca
- reaccionar-nativo-cli
- gatsby-cli
- por siempre
- nodemon
Es posible que su sistema ya tenga paquetes instalados globalmente. Para averiguar sobre esto, use el siguiente comando:
npm list -g --depth 0
Sobre dependencias del proyecto
¿Cuándo debe considerarse un paquete como una dependencia de proyecto regular necesaria para garantizar su funcionamiento y cuándo, como dependencia de desarrollo?
Al instalar un paquete usando un comando como
npm install <package-name>
se instala como una dependencia regular. Se realiza un registro de dicho paquete en la sección de
dependencies
del archivo
package.json
(antes de npm 5, dicho registro solo se realizaba utilizando el indicador
--save
, ahora no es necesario usarlo).
El uso del
--save-dev
permite instalar el paquete como una dependencia de desarrollo. Al mismo tiempo, se realiza un registro en la sección
devDependencies
del archivo
devDependencies
.
Las dependencias de desarrollo son paquetes que se necesitan en el proceso de desarrollo de un proyecto; durante su funcionamiento normal, no son necesarios. Dichos paquetes incluyen, por ejemplo, herramientas de prueba, Webpack, Babel.
Cuando se implementa un proyecto utilizando el
npm install
en su carpeta, en la que hay una carpeta que contiene el archivo
package.json
, esto instalará todas las dependencias, ya que npm supone que dicha instalación se realiza con el fin de trabajar en el proyecto.
Por lo tanto, si el paquete necesita implementarse en producción, entonces, al implementarlo, debe usar el comando npm
install --production
--production. Gracias al indicador
--production
,
--production
dependencias de
--production
no se instalarán.
Utilidad npx
Ahora hablaremos de un equipo muy poderoso,
npx , que apareció en npm 5.2. Una de sus capacidades es ejecutar archivos ejecutables incluidos en paquetes npm. Ya hemos considerado usar npx para ejecutar un archivo similar desde el paquete cowsay. Ahora hablemos de esto con más detalle.
▍Utilice npx para simplificar la ejecución de comandos locales
Los desarrolladores de Node.js publicaron muchos archivos ejecutables (utilidades) en forma de paquetes que se suponía que debían instalarse globalmente, lo que proporcionó un acceso conveniente a sus capacidades, ya que podría ejecutarlos desde la línea de comandos simplemente ingresando el nombre del comando correspondiente. Sin embargo, trabajar en dicho entorno era muy incómodo si se requería instalar diferentes versiones de los mismos paquetes.
El uso de un comando del formulario
npx commandname
busca automáticamente el archivo deseado en la carpeta del proyecto
node_modules
. Esto elimina la necesidad de conocer la ruta exacta a dicho archivo. Esto también hace innecesaria la instalación global del paquete, proporcionando acceso a él desde cualquier parte del sistema de archivos mediante el uso de la
PATH
sistema
PATH
.
▍ Realización de utilidades sin la necesidad de instalarlas
Npx tiene otra característica interesante, gracias a la cual se pueden iniciar las utilidades sin instalarlas primero. Esto es útil principalmente por las siguientes razones:
- No se requiere instalación de utilidades.
- Puede ejecutar diferentes versiones de las mismas utilidades especificando la versión deseada utilizando la construcción
@version
.
Veamos cómo usar este mecanismo, usando la utilidad
cowsay
que ya conoce. Entonces, si el paquete cowsay está instalado globalmente, al ejecutar el
cowsay "Hello"
en la línea de comando se generará en la consola una vaca "parlante":
_______ < Hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Si el paquete cowsay no está instalado globalmente, un comando similar arrojará un error.
La utilidad npx le permite ejecutar dichos comandos sin instalarlos. Se ve, en el marco de nuestro ejemplo, así:
npx cowsay "Hello"
Tal comando funcionará, pero aunque una vaca "parlante", en general, no trae muchos beneficios, se puede usar el mismo enfoque para ejecutar comandos mucho más útiles. Aquí hay algunos ejemplos:
- Existe una herramienta de línea de comandos diseñada para crear y ejecutar aplicaciones Vue. Usando npx puede llamarse así:
npx vue create my-vue-app
. - Puede usar la utilidad
create-react-app
para create-react-app
aplicaciones React. Su llamada a través de npx se ve así: npx create-react-app my-react-app
.
Después de descargar y usar el código npx apropiado, se eliminará.
▍ Lanzar código JavaScript usando varias versiones de Node.js
Para ejecutar algún código usando diferentes versiones de Node.js, puede, usando npx, acceder al
node
paquete npm, indicando su versión. Se ve así:
npx node@6 -v
Esto elimina la necesidad de herramientas como nvm u otros administradores de versiones de Node.js.
▍Iniciar fragmentos de código arbitrario disponibles en una determinada dirección
Npx le permite ejecutar no solo el código publicado en npm. En particular, si tiene un enlace a un determinado fragmento de código (por ejemplo, una esencia publicada en
GitHub ), puede ejecutarlo así:
npx https:
Por supuesto, al ejecutar dicho código, no debe olvidarse de la seguridad. Npx le brinda al desarrollador grandes oportunidades, pero también significa una gran responsabilidad.
▍ Resultados
Hoy hablamos sobre algunos mecanismos npm útiles y el uso de npx. En este punto, debe tener una comprensión básica del dispositivo npm y cómo trabajar con este administrador de paquetes. Si desea profundizar en npm, consulte la
página de documentación del proyecto y experimente más.
La próxima vez discutiremos algunos mecanismos básicos de Node.js, cuya comprensión es necesaria para el desarrollo exitoso de aplicaciones para esta plataforma.
Estimados lectores! ¿Usas npx?
