nykyaikaisessa sovelluskehityksessä emme kirjoita kaikkea tyhjästä. Sen sijaan käytämme mieluummin olemassa olevia avoimen lähdekoodin paketteja. Jokaisella näistä paketeista on omat ylläpitäjät ja yhteisö. Niin, käyttämällä paketti projekteissamme antaa meille joitakin etuja, kuten nopeampi kehitys, pääsy uusia, säännöllisiä päivityksiä, ja parempi turvallisuus kuin mukautetun luotu script.
on tavallista, että yksi paketti riippuu monista muista paketeista toimiakseen oikein. Vastaavasti lodashin kaltaiset paketit voivat olla riippuvaisia myös muista paketeista, mutta lodash itsessään riippuu myös useista paketeista. Toisin sanoen sisäkkäiset riippuvuudet voivat joskus muuttua niin monimutkaisiksi, etteivät ne pysty käsittelemään riippuvuuksien hallintaa manuaalisesti.
tässä kohtaa paketinhallinta on erittäin hyödyllinen. Paketinhallinta on työkalu, joka käsittelee automaattisesti projektin riippuvuuksia.
esimerkiksi paketinhallinta voi asentaa uusia — tai päivittää olemassa olevia — paketteja yhdellä komennolla. Kaikki on automatisoitu, joten inhimillisiin virheisiin ei ole mahdollisuutta. JavaScript-kehittäjinä meillä on käytössämme useita paketinhallintaohjelmia. Mutta tässä oppaassa vertaamme kolmea suosituinta:
- npm
- Lanka
- pnpm
yleiskatsaus paketinhallinnasta
npm oli ensimmäinen paketinhallinta, joka otti käyttöön käsitteet rekisteriprotokolla ja pakkausstandardit. Se julkaistiin vuonna 2010 ja Node otti sen virallisesti käyttöön.js-joukkue vähän myöhemmin, mikä oli käännekohta npm: lle.
Node-yhtyeen massiivisen menestyksen jälkeen.js, npm sai myös vetoapua kehittäjän yhteisöltä. Se tarjoaa online-rekisterin JavaScript-paketeille sekä komentorivityökalun, joka toimii rekisterin kanssa riippuvuuksien asentamiseksi ja päivittämiseksi.
mutta npm: llä on vain vähän haittoja, jotka laukaisivat langan ja pnpm: n kehityksen. Esimerkiksi npm on huomattavasti hitaampi kuin vastineensa. Sillä on myös ollut vakavia tietoturvahaavoittuvuuksia.
joten suuret teknologiayritykset kuten Facebook ja Google epäröivät jatkaa NPM: n käyttöä. He puolestaan liittyivät pyrkimyksiin kehittää parempi versio npm: stä ja kutsuvat sitä langaksi. Samaan aikaan Ukrainalainen Kehittäjä Zoltan Kochan kehitti pnpm: n.
NPM: n, langan ja pnpm: n
kaikki nämä paketinhallintaohjelmat ovat avointa lähdekoodia, eli sinulla on täydet oikeudet tarkistaa jokaisen sisäinen toiminta. Joskus tämä on jopa vaatimus yritystason sovelluskehityksessä.
NPM: n hyödyt:
- luo automaattisesti
package-lock.json
tiedoston. Versionhallintajärjestelmään kannattaa sitoutua. Näin muut kehittäjät voivat helposti asentaa riippuvuudet paikallisille koneilleen - hallita paikallisia tai globaaleja riippuvuuksia helposti
- npm on hyvin varustettu käsittelemään useita versioita riippuvuuksista
- sillä on virallinen rekisteri, jossa on enemmän paketteja kuin pypi, rubygems tai packagist
langan edut:
- Lanka korjaa monia Monorepossa esiintyviä ongelmia. Esimerkiksi, jos säilytät useita paketteja saman arkiston alla ja niillä kaikilla on erillinen
package.json
tiedosto, voit päivittää kaikki paketit helposti langalla sen työtilojen käsitteen ansiosta, joka voi asentaa kaikkien pakettien riippuvuudet arkistoon yhdellä kertaa. NPM: n avullanpm install
– komento on suoritettava manuaalisesti kunkin pakettikansion sisällä. - lanka käyttää offline-välimuistimekanismia, eli kun asennat paketin ensimmäistä kertaa, Lanka lisää sen välimuistikansioon alle
~/.yarn-cache
. Joten seuraavan kerran kun tarvitset tätä pakettia, Lanka hakee sen paikallisesta välimuistista sen sijaan, että tekisi HTTP-pyynnön palvelimelle. Tämä pieni parannus parantaa merkittävästi langan suorituskykyä verrattuna npm - lankaan käyttää myös lukkotiedostoa nimeltä
yarn.lock
, joten projektisi toimivat oikein kaikille joukkuetovereille. Tätä konseptia kutsutaan myös deterministiseksi asennusalgoritmiksi - se on täynnä sisäänrakennettua lisenssitarkistinta, joka voi olla kätevä erilaisissa tilanteissa, kun kehität sovelluksia
- toisin kuin npm, lanka käyttää lähestymistapaa, jota kutsutaan rinnakkaislatauksiksi. Sen avulla Lanka voi käyttää enemmän resursseja nopeuttaakseen rakentamisprosessia
- , se voi automaattisesti yrittää uudelleen HTTP-pyynnön epäonnistuessa. Tämä ominaisuus on erityisen hyödyllinen, kun kohtaat tilapäisiä internet-ongelmia
Pnpm: n edut:
- se on yhteensopiva npm: n kanssa, mutta tarjoaa myös huomattavasti paremman levytilan käytön ja nopeuden
- pnpm asentaa kaikki paketit yhteen paikkaan ja käyttää sitten symlinkkejä viitatakseen niihin. Se esittelee täysin uuden konseptin, jota kutsutaan sisällölle osoitettavaksi tallennusjärjestelmäksi, jonka avulla pnpm pystyy havaitsemaan tiedostojen väliset erot. Se ei puolestaan kopioi muuttumattomia tiedostoja kahteen eri versioon paketista
- sen uusimman version, 5.8.0, esittelee uuden Lanka-Bashin kaltaisen asetuksen nimeltä shell-emulaattori, cross-platform shell-ympäristössä
- pnpm on tiukka kulunvalvontamekanismi, mikä tarkoittaa, että paketti voi käyttää vain riippuvuuksia, jotka on määritelty sen
package.json
tiedosto
paketinhallinnan vertailu
helppokäyttöisyys
npm, lanka ja pnpm tarjoavat lähes identtisiä komentoja eri toiminnot, ja ne ovat kaikki helppokäyttöisiä. Tässä on esimerkki niiden yleisesti käytetyistä komennoista:
npm | Pnpm | |
---|---|---|
npm install | langan asennus | pnpm install | npm update | lankapäivitys | pnpm update |
nopeus
ei vastaa pnpm: ää, kun on kyse näiden paketinhallinnan nopeudesta ja suorituskyvystä. Eri käyttötapausten vertailukohdan mukaan pnpm: n suorituskyky on jopa 3x nopeampi kuin npm.
langan nopeudet ja npm ovat vertailukelpoisia. Joissakin tapauksissa langalla on merkittävä etu npm: ään verrattuna, mutta on tilanteita, joissa npm on sopivampi valinta. Jos esimerkiksi suoritamme asennustoiminnon vain käyttämällä node_modules
ja skip cache
ja lock file
toiminnallisuutta, niin npm voisi tarjota 5x paremman nopeuden. Samoin, jos käytämme kaikkia kolmea toiminnallisuutta, Lanka voi parantaa sen suorituskykyä ja tulee 11x nopeammin kuin npm.
turvallisuus
langan suurin etu npm: ään nähden on se, että se varmistaa jokaisen pakkauksen eheyden tarkistussummien avulla. Varmistusprosessi tehdään ennen koodin suorittamista paketista, joten se hylkää kaikki mahdollisuudet paketin kaappaamiseen haavoittuvuus.
toisaalta npm on huonojen pakettien kanssa toimimisen suhteen hieman anteeksiantavampi. Se kehittyy edelleen parhaiden käytäntöjen tarjoamiseksi turvallisuutta varten. Mutta, npm on yleensä huono maine turvallisuuden kannalta.
aiemmin npm: ssä oli joitakin tietoturvahaavoittuvuuksia, jotka vaikuttivat suoraan moniin projekteihin. Esimerkiksi npm-versiossa 5.7.0, kun suorittaa sudo npm
komennon Linux-pohjaisella käyttöjärjestelmällä, oli mahdollisuus vaihtaa järjestelmätiedostojen omistusta, jolloin käyttöjärjestelmä oli käyttökelvoton.
samoin toinen bitcoinien varastamistapaus tapahtui vuonna 2018. Periaatteessa suosittu solmu.js package EventStream lisäsi haitallisen riippuvuuden flatmap-stream
sen versioon 3.3.6. Tämä haitallinen paketti oli täynnä salattua hyötykuormaa, joka yrittää varastaa bitcoineja kehittäjän koneelta.
pnpm yhdistää sekä NPM: n että langan positiiviset ominaisuudet entistä paremman turvallisuuden takaamiseksi. Se toteuttaa myös tiukan kulunvalvontamekanismin, joka sitoo paketin käyttämään vain omia riippuvuuksiaan, jotka on määritelty sen package.json
– tiedostossa.
Stabiilisuus
npm, lanka ja pnpm ovat käyneet läpi useita vaiheita viime vuosien aikana. Ajan myötä, niiden koodebase on kypsynyt, koska he ovat saaneet tonnia lahjoituksia avoimen lähdekoodin yhteisö.
ja ajan kuluessa ilmaantuu uusia käsitteitä ja ideoita, jotka voisivat tuoda mukanaan murtuvia muutoksia. Tätä opasta kirjoitettaessa kaikki nämä pakettijohtajat ovat hyvässä kunnossa ja voit käyttää niitä projekteissasi ongelmitta.
langalla on Facebook ja Google, npm: llä Microsoft ja Node.js, ja pnpm on enimmäkseen kehitetty yksittäisten, vaikka se on nyt 75 + avustajat — joten voit luottaa näiden pakettien johtajat luoda seuraavan projektin.
Monorepojen tuki
Monorepot ovat enimmäkseen suurten teknologiayritysten suosiossa massiivisten koodibaasien säilyttämisessä ja hallinnoinnissa. npm suunniteltiin vain yksittäisten projektien hallintaan. Kuten nyt, se ei ole mitään toimintoja tukemaan monorepos. Mutta sekä langalla että pnpm: llä on Täysi tuki monorepos: lle työtilojen konseptinsa ansiosta.
deterministinen — lukitustiedosto
kaikki kolme paketinhallintaa on pakattu lukitustiedoston toiminnallisuuteen. Sen avulla eri kehittäjät voivat asentaa täsmälleen saman kopion projektista. npm käyttää package-lock.json
tiedostoa, lanka käyttääyarn.lock
ja pnpm käyttääpnpm-lock.yaml
.
johtopäätös
Jos etsit ratkaisua, joka antaa sinulle paremman nopeuden ja tehokkaan muistin käytön, kannattaa harkita pnpm: n käyttöä.
Jos käsittelet monoreposia, voit käyttää siihen pnpm: ää tai lankaa. Muista kuitenkin, että Lanka lähettää Facebookille käyttötietoja, mikä ei välttämättä tee langasta sopivaa valintaa joissain skenaarioissa.
lanka ei myöskään tue solmun versiota 5.js. Npm on tässä suhteessa suositeltava vaihtoehto solmulle.js-pohjaiset projektit, koska solmu suosittelee sitä.js-ryhmä. Nykyään, Node.js: ssä on oletuksena npm.
NPM: n kohdalla kannattaa tarkastella sen historiaa turvallisuuskysymysten kanssa, jotka käynnistivät langan kehityksen, joka myös luotiin ratkaisemaan monia npm: ssä olleita liikkeeseenlaskijoita. Joten, jos olet huolissasi turvallisuus projekteja, harkitse langan sijasta npm.
LogRocket: debug JavaScript-virheet helpompaa ymmärtämällä asiayhteys
Virheenkorjauskoodi on aina työläs tehtävä. Mutta mitä enemmän ymmärrät virheesi, sitä helpompi ne on korjata.
Logrocketin avulla näitä virheitä voi ymmärtää uusilla ja ainutlaatuisilla tavoilla. Meidän frontend seuranta ratkaisu seuraa käyttäjän sitoutumista JavaScript frontends antaa sinulle mahdollisuuden selvittää, mitä käyttäjä teki, joka johti virhe.
LogRocket records konsolilokit, sivujen latausajat, pinotracet, hitaat verkkopyynnöt / vastaukset otsikoilla + kehoilla, selaimen metatiedot ja mukautetut lokit. Ymmärtäminen vaikutus JavaScript koodi ei koskaan ole helpompaa!
kokeile ilmaiseksi.