¿Cuándo usar Yarn sobre NPM? ¿Cuáles son las diferencias?

102

¿Cuáles son las diferencias entre Yarn y NPM? En el momento de escribir esta pregunta, solo puedo encontrar algunos artículos en Internet que muestran cuál es el equivalente de Yarn de un comando NPM como este .

¿Tienen las mismas funcionalidades (sé que Yarn hace almacenamiento en caché local y parece que solo necesita descargar un paquete una vez) pero, aparte de esto, hay algún beneficio para pasar de NPM a Yarn?

Asha
fuente
11
Esta no es una mala pregunta y no merece un voto negativo. Dicho esto, es necesario desarrollarlo un poco para que sea una pregunta realmente buena.
jedd.ahyoung
Un rápido Google muestra esto . Creo que esto probablemente sea demasiado amplio / no constructivo para StackOverflow y, de todos modos, podría mostrar un poco más de investigación.
Aurora0001
1
@ Aurora0001 cuando busqué vi la hoja de trucos, ¡pero esa no es la respuesta a mi pregunta! Quiero saber las diferencias entre los dos y no las diferencias entre los comandos. Primero lea mi pregunta
Asha
4
@Asha Debes editar tu pregunta para tener más detalles y mostrar lo que ya has investigado. ¿Qué tipo de diferencias buscas encontrar? ¿Está intentando averiguar cómo se implementan las bibliotecas? ¿Está intentando averiguar en qué se diferencian al abordar el problema? Si hace su pregunta más precisa, puede ser bueno, dependiendo de lo que esté preguntando. (Dependiendo de lo que pregunte, es posible que la información ya esté disponible en Google).
jedd.ahyoung
3
la gente divertida te dice que lo busques en Google; Encontré su pregunta yendo a Google ... a las personas en stackoverflow les gusta descartar demasiado las cosas, como si eso las hiciera más importantes, supongo.
jairhumberto

Respuestas:

69

ACTUALIZACIÓN: marzo de 2018 (un poco tarde ...)

Desde la versión 5, npm

  • genera un 'archivo de bloqueo' llamado package-lock.jsonque arregla todo su árbol de dependencias de la misma manera que lo hace el mecanismo de bloqueo del hilo (o cualquier otro),
  • Se ha hecho una herramienta
  • --save ahora está implícito para npm i
  • Mejor uso de red y caché

npm 5.7.0 introdujo además el npm cicomando para instalar dependencias más rápidamente en un entorno de integración continua instalando solo los paquetes que se encuentran en package-lock.json(informa un error si package-lock.jsony package.jsonno están sincronizados).

Personalmente , sigo usando npm.


Original

Detesto citar directamente los documentos, pero hacen un gran trabajo al explicar por qué, lo suficientemente concisa como para no ver cómo resumir más las ideas.

En gran parte:

  1. Siempre sabe que obtiene lo mismo en todas las máquinas de desarrollo

  2. Paraleliza operaciones que npmno lo hacen, y

  3. Hace un uso más eficiente de la red.

  4. También puede hacer un uso más eficiente de otros recursos del sistema (como la RAM) .

¿Cuáles son las experiencias de producción de las personas con él? Quién sabe, es un bebé para el público en general.

TL; DR de Yehuda Katz :

Desde el principio, el archivo de bloqueo de Yarn garantiza que la ejecución repetida de hilo en el mismo repositorio da como resultado los mismos paquetes.

En segundo lugar, Yarn intenta tener un buen rendimiento, con una caché fría, pero especialmente con una caché caliente.

Finalmente, Yarn hace de la seguridad un valor fundamental.

Buena publicación de blog

" NPM vs Yarn Cheat Sheet " por Gant Laborde

Versión un poco más larga del proyecto :

Rápido: Yarn almacena en caché todos los paquetes que descarga para que nunca más necesite hacerlo. También paraleliza las operaciones para maximizar la utilización de recursos, por lo que los tiempos de instalación son más rápidos que nunca.

Confiable: con un formato de archivo de bloqueo detallado, pero conciso, y un algoritmo determinista para las instalaciones, Yarn puede garantizar que una instalación que funcionó en un sistema funcionará exactamente de la misma manera en cualquier otro sistema.

Seguro: Yarn utiliza sumas de comprobación para verificar la integridad de cada paquete instalado antes de que se ejecute su código.

Y del README.md :

  • Modo sin conexión: si ha instalado un paquete antes, puede volver a instalarlo sin ninguna conexión a Internet.
  • Determinista: las mismas dependencias se instalarán exactamente de la misma manera en todas las máquinas, independientemente del orden de instalación.
  • Rendimiento de la red: Yarn pone en cola las solicitudes de manera eficiente y evita las cascadas de solicitudes para maximizar la utilización de la red.
  • Múltiples registros: instale cualquier paquete de npm o Bower y mantenga el flujo de trabajo de su paquete igual.
  • Resiliencia de la red: una sola solicitud que falle no hará que falle la instalación. Las solicitudes se reintentan si fallan.
  • Modo plano: resuelva versiones no coincidentes de dependencias en una sola versión para evitar la creación de duplicados.
  • Más emojis. 🐈
msanford
fuente
¿Puede decirme si el hilo tiene resolución de dependencia como lo hace npm v3 ? Entiendo que hay una --flatopción que fuerza una estructura plana real donde solo se permite instalar una versión de cada dependencia, pero ¿cuál es el comportamiento predeterminado en esto? Gracias.
Dimitris Karagiannis
2
Más emoji: gato:
Huei Tan
7
Excelente respuesta. Me pregunto si intentaron contribuir a npm antes de bifurcar y renombrar y cambiar la sintaxis de install -g.
Gardner Bickford
muy buena publicación scotch.io/tutorials/…
Akshay Vijay Jain
2

npm :

  1. El administrador de paquetes para JavaScript. npm es la interfaz de línea de comandos para el ecosistema npm. Está probado en batalla, es sorprendentemente flexible y lo utilizan cientos de miles de desarrolladores de JavaScript todos los días.
  2. NPM genera un archivo de bloqueo correcto, mientras que un archivo de bloqueo de Yarn podría estar dañado en algunos casos y debe corregirse con yarn-tools

Hilo :

  1. Un nuevo administrador de paquetes para JavaScript. Yarn almacena en caché cada paquete que descarga para que nunca más necesite hacerlo. También paraleliza las operaciones para maximizar la utilización de recursos, por lo que los tiempos de instalación son más rápidos que nunca.
  2. Yarn no admite el inicio de sesión con contraseña (mientras que NPM lo hace)
Yogesh Waghmare
fuente
1
¿Qué tipo de inicios de sesión?
Rich Stone
2

¿Qué es PNPM?

pnpmutiliza enlaces físicos y enlaces simbólicos para guardar una versión de un módulo solo una vez en un disco. Al usar npm o Yarn, por ejemplo, si tiene 100 proyectos que usan la misma versión de lodash, tendrá 100 copias de lodash en el disco. Con pnpm, lodash se guardará en un solo lugar en el disco y un enlace fijo lo colocará en los node_modules donde debe instalarse.

Como resultado, ahorra gigabytes de espacio en su disco y tiene instalaciones mucho más rápidas. Si desea obtener más detalles sobre la estructura única node_modules que crea pnpm y por qué funciona bien con el ecosistema Node.js, lea este pequeño artículo: ¿Por qué deberíamos usar pnpm?

¿Cómo instalar PNPM?

npm install -g pnpm

¿Cómo instalar el paquete npm usando PNPM?

pnpm install -g typescript // or your desired package

Beneficios de PNPMover YarnyNPM

Aquí hay una barra de progreso que muestra el tiempo de instalación que tomó NPM, YARNyPNPM (la barra más corta es mejor) ingrese la descripción de la imagen aquí

Haga clic para comprobar el punto de referencia completo

para obtener más detalles, visite https://www.npmjs.com/package/pnpm

WasiF
fuente
1

Cuando instala un paquete usando Yarn (usando yarn add packagename), coloca el paquete en su disco . Durante la próxima instalación, este paquete se utilizará en lugar de enviar una solicitud HTTP para obtener el tarball del registro.

El hilo viene con un práctico comprobador de licencias. , que puede volverse realmente poderoso en caso de que tenga que verificar las licencias de todos los módulos de los que depende.

Si está trabajando en software propietario, realmente no importa cuál utilice. Con npm, puede usar npm-shrinkwrap.js, mientras que puede usar yarn.lock con Yarn.

Para obtener más información, lea el siguiente blog

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

ganesh kalje
fuente
1

Tratando de dar una mejor visión general para principiantes.

npm ha sido históricamente (2010) el administrador de paquetes más popular para JavaScript. Si desea usarlo para administrar las dependencias de su proyecto, puede escribir el siguiente comando:

npm init

Esto generará un package.jsonarchivo. Contiene todas las dependencias del proyecto.

Luego

npm install

crearía un directorio node_modulesy descargaría las dependencias (que agregó al package.jsonarchivo) dentro de él.

También creará un package-lock.jsonarchivo. Este archivo se utiliza para describir el árbol de dependencias que se generó. Permite a los desarrolladores instalar exactamente las mismas dependencias. Por ejemplo, podría imaginar a un desarrollador actualizando una dependencia a v2 y luego a v3 mientras que otro se actualiza directamente a v3.

npm instala las dependencias de una manera no determinista, lo que significa que los dos desarrolladores podrían tener un node_modulesdirectorio diferente que resulte en comportamientos diferentes . ** npm ha sufrido una mala reputación como, por ejemplo, en febrero de 2018: se descubrió un problema en la versión 5.7.0 en el que ejecutar sudo npm en sistemas Linux cambiaría la propiedad de los archivos del sistema, rompiendo permanentemente el sistema operativo.

Para resolver esos problemas y otros, Facebook introdujo un nuevo administrador de paquetes (2016): Yarn, un administrador de paquetes más rápido, seguro y confiable para JavaScript.

Puede agregar Yarn a un proyecto escribiendo:

yarn init

Esto creará un package.json archivo. Luego, instale las dependencias con:

yarn install

Se node_modulesgenerará una carpeta .Yarn también generará un archivo llamado yarn.lock. Este archivo tiene el mismo propósito que elpackage-lock.json pero en cambio se construye usando un algoritmo determinista y confiable, lo que conduce a compilaciones consistentes.

Si inició un proyecto con npm , puede migrar a Yarn fácilmente. el hilo consumirá lo mismopackage.json . Consulte Migración desde npm para obtener más detalles.

Sin embargo, npm se ha mejorado con cada nueva versión y algunos proyectos todavía usan npm sobre hilo .

Mathieu Gemard
fuente
1

La respuesta de @msanford cubre casi todo, sin embargo, me falta la parte de seguridad (Vulnerabilidades conocidas de OWASP).

Hilo

Puede verificarlos usando yarn audit, sin embargo, no puede arreglarlos. Este sigue siendo un problema abierto en GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Puede usar npm audit fix, por lo que algunos de ellos los puede arreglar usted mismo.

Los dos, es decir, npm audity yarn audittienen sus propias herramientas de integración continua. Estos son respectivamente https://github.com/IBM/audit-ci (usado, ¡funciona muy bien!) Y https://yarnpkg.com/package/audit-ci (no usado).

Daniel Danielecki
fuente