Eliberați-ne de iadul dependenței

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ă.
Alt Text
„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.

Text alternativ

⬆️ 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 noi PATCH, dar nu majore sau minore. Deci, ~1.3.1 ar putea instala 1.3.9, dar nu 1.4.0

prefixarea cu caret ^ vă va oferi noi PATCH și MINOR versiuni, dar nu majore. Deci ^1.3.1 ar putea instala 1.4.9 dar nu1.5.0
Text alternativ
Text alternativ

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.61.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 doar npm 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”.

Lasă un răspuns

Adresa ta de email nu va fi publicată.