Riješi se node_modula pomoću pređe Plug'n'Play

Smanjite vrijeme instalacije do 70%. Pitajte me kako! ?

Svatko tko me poznaje može potvrditi da sam dugogodišnji zaljubljenik u JavaScript i cijeli njegov ekosustav . Kao Front-end inženjer, upravitelji paketa temeljeni na čvorovima bili su presudni dio mog skupa alata od 2013. godine.

Prvo sam koristio Bower, koji je prvenstveno bio usmjeren na front-end svijet. Tada sam 2015. godine, nažalost (u redu, ne baš ) shvatio da Bower umire i da je NPM, zadani upravitelj paketa za Node, također put za front-end. U početku mi je bilo neobično koristiti NPM za druge stvari, osim za Node module, ali naviknuo sam se na tu ideju i besprijekorno migrirao.

Napokon, samo godinu dana kasnije, Facebook nam je dao Pređu, modernu i brzu alternativu NPM-u. Svidjelo mi se na prvi pogled! Ali neke su stvari i dalje bile problematične ...

Naslijeđeni problemi u pređi

Osim brzine, Yarn je donio niz prednosti u usporedbi s NPM verzijom u to vrijeme, kao što su datoteke zaključavanja, izvanmrežni način rada, mrežna otpornost, kontrolne sume i druge. Ipak, pređa je posudila neke poznate probleme od NPM-a:

node_modules ovdje, tamo, svugdje

Za svaki projekt na vašem stroju koji koristi NPM ili pređu node_moduleskreira se mapa. Nije važno koristi li 10 projekata potpuno istu verziju određenog modula, on će se kopirati iznova u svaku node_modulesmapu tih projekata.

Stvaranje nove mape node_modules traje zaista dugo

Čak i čineći veliki skok naprijed u smislu brzine instalacije, pređa je bila ograničena ograničenjima node_modules. Samo stvaranje mape node_modules traje do 70% vremena potrebnog za pokretanje yarn install(s toplom predmemorijom). Ogromna količina datoteka treba se stvoriti pri svakoj instalaciji. Dakle, nemojte kriviti pređu.

Ovisnosti nisu dodane u package.json

Evo scenarija za vas: Vaša aplikacija savršeno radi u razvoju, ali se sruši u proizvodnji. Nakon višesatne istrage napokon shvatite da ste zaboravili dodati ovisnost package.json. Da, može se dogoditi.

Spora razlučivost modula za vrijeme izvođenja

Na vrijeme pokretanja vaše aplikacije uvelike utječe način na koji Node rješava ovisnosti. Gubimo vrijeme na upite nad datotečnim sustavom kako bismo otkrili odakle će se riješiti određena ovisnost.

Pređa Plug'n'Igrajte u pomoć!

Sve gore navedene probleme Yarn tim je riješio izdavanjem Plug'n'Play značajke u rujnu prošle godine.

Kada omogućite PnP, umjesto kopiranja svake potrebne datoteke iz predmemorije u node_modulesmapu, evo što Yarn radi:

  1. Stvara jednu datoteku sa tablicama statičke razlučivosti. Te će tablice sadržavati hrpu važnih informacija, kao što su: paketi dostupni u stablu ovisnosti, kako su povezani između sebe i svog mjesta na disku.
  2. Poseban razrješivač koristi se kako bi Nodeu pomogao otkriti gdje je svaka ovisnost instalirana (u mapi predmemorije pređe). Oslani se isključivo na tablice razlučivosti koje su prethodno stvorene. Kako ove tablice sadrže informacije o cijelom stablu ovisnosti, postupak razlučivanja node_modules više neće trebati puno upućivati stati readdirpozivati ​​tijekom izvođenja, što značajno smanjuje vrijeme pokretanja vaše aplikacije. A kako Yarn zna sve vaše ovisnosti, žalit će se ako pokušate uvesti modul koji nije prisutan u vašem package.json:

Korištenje pređe Plug'n'Play

Pretvaranje projekta u upotrebu PnP-a jednostavno je kao 1-2. Samo trebate dodati installConfigodjeljak package.jsons pnpključem postavljenim na true, poput ovog:

{ "installConfig": { "pnp": true }}
Napomena: Potrebna vam je Yarn v1.12 + da biste koristili Plug'n'Play.

Nakon toga samo pokrenite yarn installi sve u vašoj node_modulesmapi bit će izbrisano. Od sada će se svaka ovisnost rješavati izravno iz vruće predmemorije pređe.

Korištenje PnP-a u novom React projektu s create-response-app

Ako koristite aplikaciju create-response-2+, dobra vijest je da izvrsno funkcionira s Yarn Plug'n'Play! Samo dodajte --use-pnpopciju create-react-appnaredbi i spremni ste:

npx create-react-app your-app-name --use-pnp

Mogući problemi

Kako ništa nije savršeno na svijetu, PnP može imati novih problema kada se koristi u projektima oslanjajući se na prilagođenu logiku instalacije. Ako trebate više informacija o tim potencijalnim novim izdanjima, detaljno objašnjenje možete pronaći u ovom radu.

Zaključak

Plug'n'Play rješava neke stvarno neugodne probleme u pređi. Osim toga, dramatično poboljšava predmemoriranje ovisnosti o CI-ovima, štedi vrijeme instalacije i omogućava našim građevinama da prijeđu na stvar: pokretanje testova!

I to je to! Zabavite se s pređom PnP.