6 dingen die het garen tot beste JavaScript-pakketmanager maken

Yarn is een opensource-npm-client die is ontwikkeld op Facebook en die veel aspecten van de standaard npm-client verbetert. In deze tutorial zal ik me concentreren op de top zes functies die Yarn geweldig maken:

  1. Snelheid
  2. Robuuste installaties
  3. Licentiechecks
  4. Compatibiliteit met npm en Bower
  5. Meerdere registers
  6. emojis

1. Snelheid

Een van Yarns aanspraken op roem is de snelheid ten opzichte van de standaard npm-client. Maar hoe snel is het? In een recente benchmark was Garen twee tot drie keer sneller dan npm. De benchmark timed de installatie van React, Angular 2 en Ember. Dit is een redelijk goede test voor een pakketbeheerder omdat elk van deze frameworks afhankelijk is van een aantal afhankelijkheden en een groot deel van de afhankelijkheden van een real-world webapplicatie vertegenwoordigt..  

Laten we een ander gegevenspunt toevoegen en zelf controleren door een create-react-app te installeren met zowel garen als npm. Hier is de installatie met behulp van garen:

$ yarn global add create-react-app --prefix / usr / local yarn global v0.27.5 warning package.json: Geen licentieveldwaarschuwing Geen licentieveld [1/4] Pakketten oplossen ... [2/4] Pakketten ophalen ... [ 3/4] Verbanden leggen tussen afhankelijkheden ... [4/4] Nieuwe pakketten bouwen ... succes Geïnstalleerd "[email protected]" met binaries: - create-react-app warning Geen licentieveld Gedaan in 2.59s.

Hier is de installatie met behulp van npm:

$ npm installatie -g create-react-app / usr / local / bin / create-react-app -> /usr/local/lib/node_modules/create-react-app/index.js + [email protected] .0 80 pakketten toegevoegd in 9.422s

Yep. Dit bevestigt zeker andere rapporten over een belangrijk snelheidsvoordeel voor garen. Garen geïnstalleerd in 2,59 seconden, terwijl npm 9,422 seconden duurde. Het garen was 3,63x sneller!

2. Robuuste installaties

Garen heeft ook meer robuuste installaties dan npm. Wat maakt een installatie schilferig? Als volgende installaties mislukken of een ander resultaat opleveren, is een installatie schilferig. Er zijn twee hoofdoorzaken:

  1. Transiente netwerkproblemen kunnen ertoe leiden dat het ophalen van pakketten uit het register mislukt.
  2. Nieuwe versies van pakketten kunnen leiden tot incompatibele en verbreking van wijzigingen.

Garens pakken beide zorgen aan. 

Offline Cache

Yarn gebruikt een wereldwijde offline cache om pakketten die u eenmaal hebt geïnstalleerd, op te slaan, zodat nieuwe installaties de cacheversie gebruiken en onregelmatigheden voorkomen als gevolg van intermitterende netwerkfouten. U kunt vinden waar uw garencache zich bevindt door te typen:

$ yarn cache dir /Users/gigi.sayfan/Library/Caches/Yarn/v1

Dit zijn de eerste vijf pakketten in mijn offline cache:

$ ls 'garen cache dir' | head -5 npm- @ kadira npm- @ types npm-Base64-0.2.1-ba3a4230708e186705065e66babdd4c35cf60028 npm-JSONStream-0.8.4-91657dfe6ff857483066132b4618b62e8f4887bd npm-abab-1.0.3-b81de5f7274ec4e756d797cd834f303642724e5d

Garen kan nog verder gaan en heeft een volledige offlinespiegel die geschikt is voor upgrades van het garen zelf.

Het garenlock-bestand

Het yarn.lock-bestand wordt bijgewerkt telkens wanneer u een versie toevoegt of bijwerkt. Het pikt in feite de exacte versie van elk pakket vast dat kan worden gespecificeerd in package.json met behulp van gedeeltelijke versiebeheer (bijvoorbeeld alleen hoofd- en kleinbedrijf) en de afhankelijkheden ervan. 

Hier is het begin van een typisch garenlock-bestand. U kunt de versie zien zoals gespecificeerd in package.json zoals "abbrev @ 1" en de vastgezette versie "1.1.0".

 kat garen.lock | hoofd -18 # DIT IS EEN AUTOGENERATED FILE. BEWERK DIT BESTAND NIET DIRECT. # yarn lockfile v1 abab@^1.0.3: versie "1.0.3" is opgelost "https://registry.yarnpkg.com/abab/- /abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" abbrev @ 1: version "1.1 .0 "resolved" https://registry.yarnpkg.com/abbrev/- /abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f "accepted@~1.3.3: version" 1.3.4 "resolved" https: // register. yarnpkg.com/accepts/ - / accepted-1.3.4.tgz # 86246758c7dd6d21a6474ff084a4740ec05eb21f "dependencies: mime-types" ~ 2.1.16 "negotiator" 0.6.1 " 

Maar waarom?

Garen geeft je ook de garen waarom commando om uit te leggen waarom een ​​bepaald pakket is geïnstalleerd in uw project:

$ yarn waarom worker-farm yarn why v0.27.5 [1/4] Waarom hebben we de module "worker-farm" ...? [2/4] Afhankelijkheidsgrafiek initialiseren ... [3/4] Afhankelijkheid vinden ... [4/4] Bereken bestandsgrootte ... info Deze module bestaat omdat "react-scripts # jest # jest-cli" ervan afhangt. info Schijfgrootte zonder afhankelijkheden: "132kB" info Schijfgrootte met unieke afhankelijkheden: "212kB" info Schijfgrootte met transitieve afhankelijkheden: "244kB" info Aantal gedeelde afhankelijkheden: 2 gedaan in 1.38s.

3. Licentiechecks

Sommige projecten moeten zich houden aan bepaalde licentievereisten of gewoon een rapport produceren voor interne of externe doeleinden. Garen maakt het echt gemakkelijk met de garen licenties ls commando. Het produceert een compact rapport dat de volledig gekwalificeerde pakketnaam, de URL en de licentie bevat. Hier is een voorbeeld:

$ garenlicenties ls | head -20 garenlicenties v0.27.5 ├─ [email protected] │ ├─ Licentie: ISC │ └─ URL: git + https: //github.com/jsdom/abab.git ├─ [email protected] │ ├ ─ Licentie: ISC │ └─ URL: http://github.com/isaacs/abbrev-js ├─ [email protected] │ ├─ Licentie: MIT │ └─ URL: https://github.com/jshttp/ accepts.git ├─ [email protected] │ ├─ Licentie: MIT │ └─ URL: https://github.com/kesne/acorn-dynamic-import ├─ [email protected] │ ├─ Licentie: MIT │ └─ URL: https://github.com/ForbesLindesay/acorn-globals.git ├─ [email protected] │ ├─ Licentie: MIT │ └─ URL: https: // github .com / RReverser / eikel-JSX 

Garen kan zelfs een afwijzing voor u genereren garenlicenties genereren-disclaimer. Het resultaat is een tekst met een disclaimer-bericht en tekst voor elk pakket in uw toepassing. Hier is een voorbeeld van de disclaimer die is gegenereerd voor mijn testproject:

----- Mogelijk bevat dit product de volgende software: utils-merge. Een kopie van de broncode kan worden gedownload van git: //github.com/jaredhanson/utils-merge.git. Deze software bevat de volgende licentie en onderstaande kennisgeving: (De MIT-licentie) Copyright (c) 2013 Jared Hanson-toestemming wordt hierbij gratis verleend aan iedereen die een exemplaar van deze software en bijbehorende documentatiebestanden (de "Software") verkrijgt , om zonder beperkingen in de Software te handelen, inclusief maar niet beperkt tot de rechten om kopieën van de Software te gebruiken, kopiëren, wijzigen, samenvoegen, publiceren, distribueren, in sublicentie geven en / of verkopen, en om personen aan wie de Software is geleverd toe te staan dus, met inachtneming van de volgende voorwaarden: De bovenstaande copyrightkennisgeving en deze toestemmingsverklaring moeten worden opgenomen in alle kopieën of substantiële delen van de Software. DE SOFTWARE WORDT GELEVERD "IN DE HUIDIGE STAAT", ZONDER ENIGE VORM VAN GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUKMAKENDHEID. IN GEEN GEVAL ZIJN DE AUTEURS OF COPYRIGHTHOUDERS AANSPRAKELIJK VOOR CLAIMS, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ BIJ EEN ACTIE VAN CONTRACT, ONRECHTMATIGE DAAD OF ANDERSZINS, VOORTVLOEIEND UIT, IN OF MET BETREKKING TOT DE SOFTWARE OF HET GEBRUIK OF ANDERE HANDELINGEN IN DE SOFTWARE. ----- De volgende software is mogelijk in dit product inbegrepen: uuid. Een kopie van de broncode kan worden gedownload van https://github.com/defunctzombie/node-uuid.git. Deze software bevat de volgende licentie en onderstaande kennisgeving: Copyright (c) 2010-2012 Robert Kieffer MIT-licentie - http://opensource.org/licenses/mit-license.php ----- 

4. Compatibiliteit met npm en Bower

Yarn is volledig compatibel met npm omdat het gewoon een andere client is die met npm-registers werkt. Al heel vroeg ondersteunde het Bower, maar toen kort nadat er een beslissing was genomen om de ondersteuning van Bower te laten vallen. 

De belangrijkste reden was dat de Bower-ondersteuning niet erg goed werkte en de directory bower_components leegmaakte of geen prikpakken voor een nieuw project ophaalde. Maar een andere reden is dat het Yarn-team geen fragmentatie in de package management-arena wilde aanmoedigen en in plaats daarvan voor iedereen de voorkeur gaf om over te schakelen naar npm.

Als u in Bower hebt geïnvesteerd en nu niet wilt migreren, kunt u nog steeds Garen gebruiken, maar het volgende fragment aan uw package.json-bestand toevoegen:

"scripts": "postinstall": "prieel installeren"

5. Meerdere registers

Garen kan met meerdere typen registers werken. Als u gewoon een pakket toevoegt, gebruikt het standaard het npm-register (wat is niet het standaard npm-register). Maar het kan ook pakketten van bestanden, externe tarballs of git-repositories op afstand toevoegen.

Om het huidige geconfigureerde npm-register te zien:

$ yarn config krijgt register https://registry.yarnpkg.com

Om een ​​ander type register in te stellen: garen config set register

Gebruik de volgende opdrachten om pakketten van verschillende locaties toe te voegen:

# Geconfigureerde npm-registergaren toevoegen  # Lokaal pakket garenbestand toevoegen: / # Extern tarballgaren toevoegen https: //.tgz # Remote git repo yarn add 

6. Emojis FTW!

Sommige mensen houden van emoji's en sommige mensen niet. Yarn heeft emoji's oorspronkelijk automatisch weergegeven, maar alleen op Mac OS X. Het vat vuur van beide kampen: de emoji-haters waren boos dat hun console op Mac OS X vol zat met emoji's, en de emoji-liefhebbers waren boos dat ze geen emoji's hadden op Windows en Linux. 

Nu worden emoji's standaard niet weergegeven op macOS en kun je emoji's inschakelen met de --emoji vlag:

$ yarn install --emoji yarn install v0.27.5 [1/4] 🔍 Pakketten oplossen ... [2/4] 🚚 Pakketten ophalen ... [3/4] 🔗 Verbindingsafhankelijkheden ... 

Conclusie

Garen is de beste JavaScript-pakketbeheerder. Het is compatibel met npm, maar veel, veel sneller. Het adresseert serieuze problemen voor grootschalige projecten met een schilferige installatie, het ondersteunt meerdere soorten registers, en het heeft emoji's om op te starten. 

JavaScript heeft, hoewel niet zonder de leercurves, veel bibliotheken en frameworks om je bezig te houden, zoals je kunt zien. Als u op zoek bent naar extra middelen om te studeren of om te gebruiken in uw werk, kijk dan wat we beschikbaar hebben op de Envato-markt.

De JavaScript-community is over het algemeen heel positief en er is veel kracht achter Yarn. Er zijn al enkele problemen aan de orde, zoals redundante ondersteuning voor Bower en emoji's standaard. Migreren naar narn vanaf npm is erg eenvoudig. Ik adviseer hoogst dat u een poging geeft.