Deliver us from dependence hell
useimmissa nykyaikaisissa palveluissa ja sovelluksissa on joukko riippuvuuksia, jotka elävät alati kasvavassa node-modules
-kansiossa. Yleensä monia näistä kirjastoista ylläpidetään, muutetaan ja päivitetään aktiivisesti. Jos riippuvuuksiasi hallitaan huonosti, voit nopeasti joutua riippuvuushelvettiin.
jos et tunne npm: ää, katso se tästä ennen lukemista
🛒 Ruokakauppa
solmusovellusta käynnistettäessä yksi ensimmäisistä vaiheista on käynnissä npm install
. Kun suoritat tämän, solmu tarkistaa tiedoston package.json
projektin pohjalta. Jos kyseinen tiedosto löytyy, se käyttää dependency
– osiota eräänlaisena ”päivittäistavarakauppalistana”, jonka avulla voit käydä keräämässä hakemuksesi vaatimia” ainesosia ” (koodibittejä).
”päivittäistavarakauppa” on tässä tapauksessa jotain, mitä npm kutsuu nimellä registry
. Oletusarvoisesti solmusovelluksesi etsii näitä paketteja julkisesta npm-rekisteristä, jossa suurin osa kaikesta mitä tarvitset (Yksityiset rekisterit voidaan luoda omistusoikeudelliselle koodille ja sellaiselle). Jos paketti löytyy rekisteristä, node laittaa kyseisen ”ainesosan” node_modules
– hakemistoon projektisi pohjalle.
on tärkeää huomata, että vaadittavilla paketeilla voi olla oma ”ostoslista” (paketti.json), ja kaikki nämä sisäkkäiset riippuvuudet on ratkaistava ennen kuin sovelluksesi siirtyy seuraavaan riippuvuuteen omassa paketissaan.json.
⬆️ versiot, 🥕 Karetit ja 🃏 Jokerit
riippuvuuksien versiot ovat yleensä jotain v1.3.5
. Tätä kutsutaan semanttiseksi versioinniksi eli semveriksi. Semverillä numerot kuvaavat koodin muutoksia vaihtelevalla vakavuudella – MAJOR.MINOR.PATCH
.
asiakirjoistaan –
suuri versio, kun teet yhteensopimattomia API-muutoksia,
MINOR-versio, kun lisäät toimintoja taaksepäin yhteensopivalla tavalla, ja
PAIKKAVERSIO, kun teet taaksepäin yhteensopivia virheenkorjauksia.
tätä silmällä pitäen monet ihmiset haluavat päivittää sovelluksensa automaattisesti kaikilla tuoreilla uusilla tavaroilla, joita heidän riippuvuuksissaan saattaa olla uudemmissa, ei-murtavissa muutoksissa.
Prefixing with tilde
~
antaa sinulle kaikki uudetPATCH
päivitykset, mutta ei duuria tai mollia. Joten~1.3.1
voisi asentaa1.3.9
, mutta ei1.4.0
Prefixing with caret
^
antaa sinulle uusiaPATCH
jaMINOR
versioita, mutta ei suuria. Joten^1.3.1
pystyi asentamaan1.4.9
mutta ei1.5.0
![]()
Katsotaanpa katsomaan esimerkkikoodin riippuvuus puu:
my-breakfast | | milk | |coffee-script
Ok, enemmänkin keppi, mutta toivottavasti riippuvuusketju on selvä. Pakettimme.json vaatii version v0.5.0
nimenomaan milk
, mutta maito vaatii coffee-script
missä tahansa 0.9.6
– 1.0.0
. npm install
ajetaan, kehitämme sovellustamme, kaikki on hyvin.
📼 nyt pikakelataan 2 kuukautta. Joku löytää projektisi ja haluaa osallistua. He haarukoivat ja kloonaavat reposi, juokse npm install
, AAAA ja se ei toimi. ”Mutta se toimi koneessani!”sinä itket. Kun yhteistyökumppanisi asensi solmumoduulit, heille taattiin tietty versio milk
: stä, mutta he saivat eri version coffee-script
: stä, koska milk
: n paketti.json käytti semveriä.
🗿 riippuvuuksien asettaminen kiveen
yksi ratkaisu tähän on käyttää package-lock.json
– tiedostoa. Tämä tiedosto antaa sinulle hyvin rakeinen hallita versioita jokaisen riippuvuuden, että asennat. Jos package.json
on kuin ostoslista, niin package-lock.json
on kuin budjetti. Muroja saa, mutta ne ovat kaupan brändiä eikä Captain crunchia. Tämä spesifisyys ulottuu riippuvuuspuun jokaiseen haaraan asti. Sinulla täytyy olla package.json
, jos haluat käyttää lukitustiedostoa (package.json
tekee paljon muutakin kuin vain riippuvuuksien hallintaa, se on vain tämän viestin painopiste).
🎁
itse olen sitä mieltä, että package-lock.json
– tiedostoa pitäisi aina käyttää (uudemmissa npm-versioissa se syntyy itse asiassa automaattisesti). Se vain tekee kaikesta luotettavampaa ympäristöissä ja käyttöönotoissa. Tässä muutama viimeinen pieni nuggets toivottavasti auttaa, kun se tulee huollettavia:
-
npm install --save
päivittää automaattisesti lukkotiedostosi ja pakettisi.json sen paketin kanssa. -
npm ci
sen sijaan, että vainnpm install
rakentaa automaattisesti solmumoduulisi uudelleen ja rakentaa lukkotiedostostasi. Se on todella hyödyllinen komento CI / CD ja yleensä paras käyttää yhdessä lockfile. - suurempiin projekteihin, ja supervahvaan riippuvuuteen, tsekkaa docker ja containers. Se voi toimia lähes kuin virtuaalikone, joka täydellisesti sisältää koodin ja sen riippuvuudet, ja kloonataan edistää eri ympäristöissä. Joten toivottavasti päädyt paljon vähemmän” se toimi koneellani ” ongelmia.