NEW KID IN THE BLOCK – YARN
Intro
U JavaScript zajednici, inzinjeri dele stotine hiljada linija koda tako da mogu izbjeci prepisivanje osnovne komponente neke biblioteke. Svaki deo koda moze zauzvrat zavisiti od drugih delova koda, tako da zavisnostima upravljaju menadzeri paketa.
Najpopularniji JavaSkript paket menadzer je npm, koji omogućava pristup više od 300.000 paketa u npm registar. Vise od 5 miliona inzenjera koristi npm, koji vidi do 5 milijardi preuzimanja svakog meseca.
Zato yarn
Novih alata za JavaScript ima u izobilju i svake nedelje izlaze novi. Svi se secamo vremena kada je npm
uveden da resi upravljanje zavisnostima za JavaScript i svi su bili uzbuđeni zbog toga. Onda je npm
brzo postatao glavni menadzer paketa za Node.js.
npm postaje deo zivota programera, programeri ga koriste i za frontend I backend. Iako je npm
super, programeri imalju puno problema sa njim. Neki od tih problema su:
Kao sto znamo, svi paketi ce biti sacuvani u node_modules
direktorijum u okviru npm
-a. Ako ste izbrisali direktorijum node_modules
iz bilo kog razloga i uradili npm
install u konzoli projekta, npm
će ponovo da krene sa preuzimanjem svih paketa zajedno sa svojim zavisnostima, koje samo po sebi nije potrebno i uzima previse vremena.
npm
uvek instalira svaku zavisnost jednu iza druge sto se uvek zavrsi troseci mnogo vremena. Nekad mozes I da se prosetas dok to radi :).
Nema offline mode.
Sta nudi
YARN
je napravljen da resi tri glavna problema:
Brzina
Bezbednost
Pouzdanost
2 do 7 puta brzi nego npm
Dobre performanse dolaze zbog zanimljivih implementacije kesa. Kad god yarn
instalira paket, on ih odma I kesira. Dakle, svaki put kad yarn
vidi zahtev za instalaciju za paket, on ce prvo pokusati da je instalira iz svog kesa sto ga cini neuporedivo brzim. Takodje yarn
, za razliku od npm
-a, izvrsava preuzimanja u paralelnim tredovima tako da na najbolji nacin koristi resurse. Ovo rezultira tome da je yarn
brzi od npm
-a skoro 7 puta.
Super siguran
Svaki put kada je paket instaliran i sprema se da bude izvrsen, on proverava integritet paketa pomocu checksum-a . Isti metod se koristi I za proveru da li je proces kesiranja paketa zaista uspesan ili ne. Kada se otkrije neispravan checksum, paket se ponovo ucitava iz originalnog izvora.
Pouzdan
Koristeci detaljan, ali sazet lockfile format, i deterministicki algoritam za instaliranje, yarn
je u stanju da garantuje da ce onaj ko je radio na jednom sistemu sa jednom verzijom raditi na potpuno isti nacin na bilo koji drugi sistem, sto se u mnogome razlikuje od npm
-a koji ume da instalira pogresne verzije,
Lock fajl?
Kada pokrenete yarn
(ekvivalentno pokretanju npm
instalacije), stvara yarn.lock
file. Ovaj fajl je ekvivalentan “Shrinkvrap” fajlu npm
-a ali “Shrinkvrap” se ne generise podrazumevano i nece se napraviti ako inzinjer zaboravi da ga generise. Da bi resio problem sinhronizacije, cak i posle svake nadogradnje ili uklanjanja, yarn
azurira yarn.lock
fajl posle svake promene Tako yarn.lock
fajl uvek prati tacan raspored paketa i verzija koje su instalirane u node_modules
direktorijumu.
Offline mode
yarn
stvara kesiranu kopiju koja olaksava instaliranje online paket. Zbog toga mozete instalirati svoje npm
pakete bez internet konekcije sa yarn
-om. Ovo je posebno korisno za CI sisteme koji se ne oslanjaju na internet konekciju i npm
bazu, a vasi testovi ce proci cak i kada npm
ne radi (sto je bio slucaj pre par godina kada je npm
pao na 3 sata).
Generalno govoreci, yarn
nudi bolji workflow rada nego npm
.
Kako poceti sa yarn
-om ?
Za vecinu komandi, yarn
radi potpuno na isti nacin kao npm
. Medutim, postoje promene u nekoliko osnovnih komandi.
npm install → yarn
Pozvana bez argumenta, komanda yarn ce ucitati package.json, povuci pakete iz npm baze, popuniti direktorijum node_modules
I generisati yarn.lock
fajl.
U tabeli imamo poredjenja komandi izmedju npm
-a I yarn
-a.
npm install react --save → yarn add react npm uninstall react --save → yarn remove react npm install react --save-dev → yarn add react --dev npm update --save → yarn upgrade npm install react --global → yarn global add react
Sledece komande su identicne:
npm init → yarn init npm link → yarn link npm outdated → yarn outdated npm publish → yarn publish npm run → yarn run npm cache clean → yarn cache clean npm login → yarn login npm logout → yarn logout npm test → yarn test
Kao i uvek, koriste -g
komandu sa dozom pažnje.
Jos jedna od interesantnih stvari u vezi yarn
-a koja ne postoji kod npm
-a je to sto mozete proveravati licence svih svojih dependenci-a I isto tako generisati svoje uz pomoc komandi:
yarn licenses yarn licenses generate
Jedan od interesantnih feature-a napisanih za yarn
je yarn why package-name
.
Napisan je kao alat za proveru zasto je neki paket instaliran I koje sve dependencie vuce sa sobom.
yarn why react
Za ono koliko sam se ja igrao sa yarn
-om, on i radi neverovatno, a probleme jos uvek nisam nasao. Pošto je projekat podržan od strane kompanija kao što su Google i Facebook, veliki sam optimista da ce moze uskoro postati zvanivni menadzer npm
paketa.