Manual de Node.js, Parte 5: npm y npx

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.




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 --depth=0 

Como resultado, si, por ejemplo, instaló solo el paquete cowsay, se mostrará lo siguiente:

 > npm list --depth=0 /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

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 #v6.14.3 npx node@8 -v #v8.11.3 

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://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 

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?

Source: https://habr.com/ru/post/es423705/


All Articles