Eliberați-ne de iadul dependenței
majoritatea serviciilor și aplicațiilor moderne au o masă de dependențe care trăiesc într-un folder node-modules
în continuă creștere. În general, multe dintre aceste biblioteci sunt întreținute, modificate și actualizate în mod activ. Dacă dependențele dvs. sunt prost gestionate, vă puteți găsi rapid în iadul dependenței.
dacă nu sunteți familiarizat cu npm, verificați-l aici înainte de a citi pe
cumpărături de produse alimentare de la
când porniți o aplicație nod, unul dintre primii pași rulează npm install
. Când executați acest lucru, node va verifica pentru un fișier numit package.json
în baza proiectului. În cazul în care fișierul este găsit, se va folosi dependency
secțiune ca un fel de „lista de cumparaturi” pentru a merge și a aduna „ingrediente” (biți de cod) cererea dumneavoastră necesită.
„magazin alimentar”, în acest caz, este ceva NPM numește o registry
. În mod implicit, aplicația node va căuta în registrul public npm aceste pachete, unde va fi cel mai mult tot ce aveți nevoie (registrele private pot fi create pentru cod proprietar și fleacuri). Dacă pachetul se găsește în registru, node pune acel „ingredient” într-un director node_modules
la baza proiectului.
este important să rețineți că pachetele de care aveți nevoie pot avea propria lor „listă de cumpărături” (pachet.json) și toate aceste dependențe imbricate trebuie rezolvate înainte ca aplicația dvs. să treacă la următoarea dependență din propriul pachet.json.
⬆️ versiuni, carete, și wildcard-uri de la 7157>
versiunile dependențelor dvs. sunt, în general, ceva de genul v1.3.5
. Aceasta se numește versiune semantică sau semver. Cu semver, numerele reprezintă modificări ale codului în severitate variabilă – MAJOR.MINOR.PATCH
.
din documentele lor-
versiune majoră atunci când efectuați modificări API incompatibile,
versiune minoră atunci când adăugați funcționalitate într-un mod compatibil înapoi și
versiune de corecție atunci când efectuați corecții de erori compatibile înapoi.
având în vedere acest lucru, o mulțime de oameni doresc să își actualizeze automat aplicația cu orice lucruri noi proaspete pe care dependențele lor le-ar putea avea în modificări mai noi, care nu se rup.
prefixarea cu Tilda
~
vă va oferi orice actualizări noiPATCH
, dar nu majore sau minore. Deci,~1.3.1
ar putea instala1.3.9
, dar nu1.4.0
prefixarea cu caret
^
vă va oferi noiPATCH
șiMINOR
versiuni, dar nu majore. Deci^1.3.1
ar putea instala1.4.9
dar nu1.5.0
![]()
să aruncăm o privire la arborele de dependență al Codului nostru de exemplu:
my-breakfast | | milk | |coffee-script
ok, mai mult ca un băț, dar sperăm că lanțul de dependență este clar. Pachetul nostru.json necesită versiunea v0.5.0
în mod specific de milk
, dar laptele necesită coffee-script
oriunde de la 0.9.6
– 1.0.0
. npm install
este rulat, vom dezvolta aplicația noastră, totul este chipes-dory.
acum să derulăm înainte 2 luni. Cineva îți găsește proiectul și vrea să contribuie. Ei furculiță și clona repo, rula npm install
, aaaaand nu funcționează. „Dar a lucrat la mașina mea!”plângi. Când colaboratorul dvs. a instalat modulele nodului, li s-a garantat o versiune specifică a milk
, dar au primit o versiune diferită a coffee-script
deoarece pachetul milk
.json l-a folosit pe semver.
XV setarea dependențelor în piatră
o soluție la acest lucru este de a utiliza un fișier package-lock.json
. Acest fișier vă oferă un control foarte granular asupra versiunilor fiecărei dependențe pe care o instalați. Dacă package.json
este ca lista de cumpărături, atunci package-lock.json
este ca un buget. Poți avea cereale, dar va fi marca magazinului în loc de Cap ‘ n Crunch. Această specificitate rulează până la capăt în fiecare ramură a arborelui Dvs. de dependență. Trebuie să aveți un package.json
dacă doriți să utilizați un fișier de blocare (package.json
face mult mai mult decât gestionarea dependenței, acesta este doar punctul central al acestui post).
eu personal simt că un fișier package-lock.json
ar trebui să fie întotdeauna utilizat (în versiunile mai noi ale npm, acesta este de fapt generat automat). Face totul mai fiabil în medii și implementări. Iată câteva nuggets ultimele mici pentru a ajuta, sperăm, atunci când vine vorba de dependecies:
-
npm install --save
va actualiza automat lockfile și pachetul.json cu acel pachet. -
npm ci
în loc de doarnpm install
va reconstrui automat modulele nod, și de a construi de la lockfile dumneavoastră. Este o comandă foarte util pentru CI / CD și, în general, cel mai bine să utilizați în tandem cu un lockfile. - pentru proiecte mai mari și dependență super robustă, verificați docker și containere. Poate funcționa aproape ca o mașină virtuală care conține perfect codul dvs. și dependențele sale și este clonată pentru a promova în medii diferite. Deci, sperăm că veți termina cu mult mai puțin „a funcționat pe mașina mea”.