Yarn es un cliente npm de código abierto que se desarrolló en Facebook y mejora muchos aspectos del cliente npm estándar. En este tutorial, me centraré en las seis características principales que hacen que Yarn sea increíble:
Una de las afirmaciones de Yarn a la fama es su velocidad en comparación con el cliente estándar de npm. ¿Pero qué tan rápido es? En un punto de referencia reciente, Yarn fue de dos a tres veces más rápido que npm. El punto de referencia cronometró la instalación de React, Angular 2 y Ember. Esta es una prueba bastante buena para un gestor de paquetes, ya que cada uno de estos marcos extrae un montón de dependencias y representa una parte importante de las dependencias de una aplicación web del mundo real..
Agreguemos otro punto de datos y comprobemos por nosotros mismos mediante la instalación de una aplicación crear-reaccionar usando tanto hilo como npm. Aquí está la instalación utilizando hilo:
$ yarn global add create-react-app --prefix / usr / local yarn global v0.27.5 warning package.json: Sin campo de licencia warning No campo de licencia [1/4] Resolviendo paquetes ... [2/4] Recuperando paquetes ... [ 3/4] Vinculación de dependencias ... [4/4] Creación de paquetes nuevos ... éxito Instalar "[email protected]" con binarios: - advertencia de crear-reaccionar-aplicación No hay campo de licencia Hecho en 2.59s.
Aquí está la instalación usando npm:
$ npm install -g create-react-app / usr / local / bin / create-react-app -> /usr/local/lib/node_modules/create-react-app/index.js + [email protected] .0 agregado 80 paquetes en 9.422s
Sí. Esto definitivamente corrobora otros informes sobre una ventaja de velocidad significativa para el hilo. El hilo se instaló en 2.59 segundos, mientras que npm tomó 9.422 segundos. El hilo fue 3.63X más rápido!
Yarn también cuenta con instalaciones más robustas que npm. ¿Qué hace que una instalación sea escamosa? Si las instalaciones subsiguientes fallan o producen un resultado diferente, la instalación es inestable. Hay dos causas principales:
Hilo aborda ambas preocupaciones.
Yarn usa un caché sin conexión global para almacenar los paquetes que ha instalado una vez, por lo que las nuevas instalaciones usan la versión en caché y evitan la descamación debido a fallas intermitentes en la red. Puede encontrar dónde está su caché de hilos escribiendo:
$ yarn cache dir /Users/gigi.sayfan/Library/Caches/Yarn/v1
Aquí están los primeros cinco paquetes en mi caché sin conexión:
$ ls 'direccion caché de hilo' | head -5 npm- @ kadira npm- @ tipos npm-Base64-0.2.1-gen3a330508a186705065e66babdd4c35cf60028.
El hilo puede ir aún más lejos y tener un espejo offline completo que funcionará en las actualizaciones del propio hilo..
El archivo yarn.lock se actualiza cada vez que agrega o actualiza una versión. Básicamente, fija la versión exacta de cada paquete que puede especificarse en package.json mediante el uso de versiones parciales (por ejemplo, mayor y menor) y sus dependencias..
Aquí está el comienzo de un típico archivo yarn.lock. Puede ver la versión especificada en package.json como "abbrev @ 1" y la versión anclada "1.1.0".
gato hilo.lock | head -18 # ESTE ES UN ARCHIVO AUTOGENERADO. NO EDITAR ESTE ARCHIVO DIRECTAMENTE. # yarn lockfile v1 abab@^1.0.3: versión "1.0.3" resuelta "https://registry.yarnpkg.com/abab/- /abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" abbrev @ 1: version "1.1 .0 "resolvió" https://registry.yarnpkg.com/abbrev/- /abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f "acepta@~1.3.3: versión" 1.3.4 "resuelto" https: // registro. yarnpkg.com/accepts/ - / accept-1.3.4.tgz # 86246758c7dd6d21a6474ff084a4740ec05eb21f "dependencias: mime-types" ~ 2.1.16 "negociador" 0.6.1 "
El hilo también te da la hilo por qué
comando para explicar por qué un paquete en particular está instalado en su proyecto:
$ hilo por qué trabajador-granja por qué v0.27.5 [1/4] ¿Por qué tenemos el módulo "trabajador-granja" ...? [2/4] Inicializando el gráfico de dependencia ... [3/4] Buscando dependencia ... [4/4] Calculando tamaños de archivo ... info Este módulo existe porque "react-scripts # jest # jest-cli" depende de ello. info Tamaño del disco sin dependencias: "132kB" info Tamaño del disco con dependencias únicas: "212kB" info Tamaño del disco con dependencias transitivas: "244kB" info Número de dependencias compartidas: 2 Hecho en 1.38s.
Algunos proyectos deben cumplir con ciertos requisitos de licencia o simplemente producir un informe para fines internos o externos. El hilo lo hace muy fácil con el licencias de hilo ls
mando. Produce un informe compacto que incluye el nombre del paquete completo, su URL y la licencia. Aquí hay un ejemplo:
$ hilo licencias ls | head -20 yarn license v0.27.5 ├─ [email protected] ├─ Licencia: ISC └─ └─ URL: git + https: //github.com/jsdom/abab.git ├─ [email protected] │ ├ ─ Licencia: ISC └─ └─ URL: http://github.com/isaacs/abbrev-js ├─ accept @ 1.3.4 │ ├─ Licencia: MIT │ └─ URL: https://github.com/jshttp/ accept.git ├─ [email protected] ├─ Licencia: MIT │ └─ URL: https://github.com/kesne/acorn-dynamic-import ├─ [email protected] │ Licencia: MIT └─ └─ URL: https://github.com/ForbesLindesay/acorn-globals.git ├─ [email protected] Licencia: MIT URL: https: // github .com / RReverser / acorn-jsx
Yarn puede incluso generar un descargo de responsabilidad para usted con licencias de hilo generar-descargo de responsabilidad
. El resultado es un texto con un mensaje de exención de responsabilidad y un texto para cada paquete en su aplicación. Aquí hay una muestra del descargo de responsabilidad generado para mi proyecto de prueba:
----- El siguiente software puede incluirse en este producto: utils-merge. Se puede descargar una copia del código fuente de git: //github.com/jaredhanson/utils-merge.git. Este software contiene la siguiente licencia y el siguiente aviso: (La licencia MIT) Derechos de autor (c) 2013 Jared Hanson Por la presente se otorga el permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software") , para operar en el Software sin restricciones, incluidos, sin limitación, los derechos de uso, copia, modificación, combinación, publicación, distribución, concesión de sublicencia y / o venta de copias del Software, y para permitir que las personas a quienes se suministra el Software hagan por lo tanto, sujeto a las siguientes condiciones: El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software. EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESO O IMPLÍCITO, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INCUMPLIMIENTO. EN NINGÚN CASO, LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES POR CUALQUIER RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA QUE SEA RESPONSABLE DE UN CONTRATO, CORTE U OTRA MANERA, DERECHOS DE, FUERA O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRAS REPARACIONES EN EL SOFTWARE. ----- El siguiente software puede incluirse en este producto: uuid. Se puede descargar una copia del código fuente de https://github.com/defunctzombie/node-uuid.git. Este software contiene la siguiente licencia y aviso a continuación: Copyright (c) 2010-2012 Robert Kieffer MIT License - http://opensource.org/licenses/mit-license.php -----
Yarn es totalmente compatible con npm, ya que es solo un cliente diferente que funciona con los registros de npm. Muy temprano apoyó a Bower, pero poco después se tomó la decisión de abandonar el soporte de Bower..
La razón principal fue que el soporte de Bower no funcionó muy bien y vació el directorio bower_components o no obtuvo ningún paquete de bower en un proyecto nuevo. Pero otra razón es que el equipo de Yarn no quiso fomentar la fragmentación en el campo de la gestión de paquetes y, en cambio, prefirió que todos cambiaran a npm.
Si está invirtiendo en Bower y no desea migrar en este momento, aún puede usar Yarn, pero agregue el siguiente fragmento de código a su archivo package.json:
"scripts": "postinstall": "bower install"
Yarn puede trabajar con múltiples tipos de registro. De forma predeterminada, si solo agrega un paquete, utilizará su registro npm (que es no el registro estándar de npm). Pero también puede agregar paquetes desde archivos, archivos tar remotos o repositorios git remotos.
Para ver el actual registro de npm configurado:
$ yarn config obtener registro https://registry.yarnpkg.com
Para establecer un tipo de registro diferente: registro de conjuntos de configuración de hilo
Para agregar paquetes desde diferentes ubicaciones, use los siguientes comandos de agregar:
# Configurado npm registro hilo agregar# Archivo de hilo local agregar archivo: / # Hilo de tarball remoto agregar https: // .tgz # Remoto de git repo agregar
A algunas personas les gustan los emojis, y otras no. El hilo originalmente mostraba los emojis automáticamente, pero solo en Mac OS X. Se incendió en ambos bandos: los enemigos de los emoji estaban molestos porque su consola en Mac OS X estaba llena de emojis, y los amantes de los emojis estaban molestos porque no tenían emojis en Windows y Linux.
Ahora, los emojis no se muestran en macOS de manera predeterminada, y puede habilitarlos con la --emoji
bandera:
$ yarn install --emoji yarn install v0.27.5 [1/4] 🔍 Resolviendo paquetes ... [2/4] 🚚 Recuperando paquetes ... [3/4] 🔗 Vinculando dependencias ...
Yarn es el mejor gestor de paquetes de JavaScript. Es compatible con npm, pero mucho, mucho más rápido. Trata problemas serios para proyectos a gran escala con una instalación inestable, admite múltiples tipos de registros y tiene emojis para iniciar.
JavaScript, aunque no sin sus curvas de aprendizaje, tiene muchas bibliotecas y marcos para mantenerlo ocupado, como puede ver. Si está buscando recursos adicionales para estudiar o usar en su trabajo, vea lo que tenemos disponible en el mercado de Envato.
La comunidad de JavaScript es en general muy positiva, y hay mucho impulso detrás de Yarn. Ya ha abordado algunos problemas, como la compatibilidad con Bower redundante y los emojis de forma predeterminada. Migrar a Yarn desde npm es muy fácil. Recomiendo que pruebes.