node.js - JavaScript-avhengighetsstyring: npm vs. bower vs. volo


Hvordan sammenligner man npm, bower og volo?

Alle tre kan brukes til å installere JavaScript-avhengigheter for et UI-prosjekt. Jeg forstår at npm er mer node-spesifikk.

Så, når skal man bruke hva?

npm står fortsatt fjernt, men bower og volo ser ut til å løse akkurat det samme problemet, selv om jeg ikke er i stand til å trekke en linje mellom npm og bower-volo.

Svar #1

En beskrivelse som best beskriver forskjellen mellom npm og bower er: npm håndterer JavaScript-moduler kalt pakker, og Bower håndterer frontend-komponenter (dvs. css, html og JavaScript) kalt komponenter. npm brukes også til å installere bower. Her er en omfattende artikkel om npm og bower (dekker ikke volo) som går i detalj.

Svar #2

lindrehytte

Det er fortsatt veldig populært blant front-end-utviklere, selv om det har svært få funksjoner. Hver front-end-pakke bruker det. Det er også et initiativ for å slå sammen Bower med npm.

Bower er optimalisert for klient-siden og støtter kun flate avhengighetstrær, det vil si at hvert bibliotek kun må brukes én gang (siden det er kostbart å sende forskjellige versjoner av det samme biblioteket til klienten), og avhengighetsbegrensningene må løses av brukeren.

Du kan forvente å finne alt som er frontend-relatert i bower-registeret (bower search <et søkeord>) -- etter min mening er det den største fordelen med bower i forhold til andre pakkebehandlere.

jeg vil

Jeg har fortsatt ikke brukt det i mer enn 5 minutter på flere år. Vet ikke om det, men ut fra det jeg kan se inkluderer det noen byggverktøy, som er veldig kjent for Grunt-brukere.

npm

Ja, npm står for Node Package Manager. Men i dag kan du bruke det til alt; folk bruker ikke lenger bare npm install for ting og forventer at de skal fungere bare i Node-miljøet. For eksempel finnes det mange npm-pakker for Twitter Bootstrap.

Npm er optimalisert for bruk på serversiden, med et innviklet avhengighetstre. Hver avhengighet kan ha sine egne avhengigheter som igjen kan ha sine egne, og så videre. Dette eliminerte konflikter mellom avhengighetsversjoner ettersom hver avhengighet kan bruke sin egen versjon av for eksempel Underscore. Imidlertid vil den kommende npm-versjon 3 flate ut avhengighetstreet:

Med npm@3 vil din node_modules-katalog være mye flatere. Alle dine avhengigheter og de fleste av dine underavhengigheter (og (under)+avhengigheter) vil ligge ved siden av hverandre på øverste nivå. Bare når det oppstår konflikter vil moduler bli installert på dypere nivåer. Dette bør gjøre ting mye enklere for Windows-brukere.

Noen fordeler jeg ser ved å bruke npm:

  • Den brukes av alle de andre pakkebehandlerne (component, bower, volo, JSPM, osv);
  • Tillater bruk av byggeskript;
  • Mange verktøy er tilgjengelige for å inspisere npm-baserte pakker

npm er pakkebehandleren for JavaScript.

Fra februar 2013 var min mening følgende. Vennligst ta den ikke i betraktning lenger.

npm

Det er bedre å holde seg til det når du arbeider med et Node-prosjekt, det er veldig få prosjekter som også er tilgjengelige for nettlesere...

lugar

Bower er pop-gutten akkurat nå. De har mange prosjekter under beltet, og prosjektvedlikeholderne liker å holde dem oppdatert i Bower-registeret...

Det er synd at han noen ganger er litt feilaktig.

jeg vil

Jeg har ikke prøvd volo i mer enn 5 minutter siden da, men ut fra det jeg kunne se ser det ut til å være mer fleksibelt enn bower.

Et negativt poeng for volo er at prosjektene deres er veldig utdaterte.

Svar #3

De ser ut til å løse det samme problemet, men for forskjellige miljøer/verden. NPM for nodejs og volo, bower for nettleseren.

Sannheten er at du også kan bruke NPM for å administrere JavaScript og CSS for nettleseren. Det er ingenting som hindrer deg i å gjøre det. På den måten føles det mer naturlig for meg å bruke NPM enn å måtte administrere to forskjellige verktøy for samme formål.

Det ser ut til at Bower har flere pakker tilgjengelig, i det minste for de mest populære. Men snart vil også jQuery være tilgjengelig direkte i NPM, og sannsynligvis vil alle de andre bibliotekene følge den samme trenden.

Etter min mening, siden det finnes verktøy som browserify og webmake der ute, som hjelper til med å bruke node-moduler i nettleseren, er det ikke lenger et reelt behov for bower eller volo, med mindre de tilbyr noe annet for deg (en bestemt modul som kun finnes i deres registre).

Både Volo og Bower er også gode, men fra mitt synspunkt, hvis du allerede bruker NPM, kan det være bedre å holde seg til det.

Vennligst merk at du kan bruke NPM til å administrere klientavhengighetene dine selv uten å bruke browserify eller webmake. I de fleste av prosjektene jeg har jobbet på, etter at npm-modulene er installert, kjører jeg et skript for å distribuere dem til stedet hvor klientappen min bruker dem. Noen ganger bruker jeg grunt for å slå sammen den filen med andre js-filer, og noen ganger refererer jeg til den direkte fra malfilene til webappene mine. Uansett er dette en personlig preferanse. Andre kan synes at Bower eller Volo er lettere å bruke da de passer mer naturlig inn i arbeidsflytene deres.

Svar #4

Bowers store fordel over NPM er at dens avhengighetsstyring håndhever bruk av én enkelt versjon av en komponent (mens NPM fungerer ved å ha forskjellige kopier/versjoner som underavhengigheter av forskjellige moduler). Dette er EN VELDIG GOD TING fordi det forhindrer at klient-side JavaScript blir oppblåst gjennom å måtte inkludere flere kopier av en komponent i forskjellige versjoner. Å inkludere flere kopier av en modul er sentralt for hvordan NPMs avhengighetsstyring fungerer, og NPM er derfor helt uegnet for klient-side pakkehåndtering.

En konsekvens av det ovennevnte er at Bower-pakkebevarere og brukere må være mer oppmerksomme på å opprettholde versjonsnumrene på avhengighetene sine for å unngå konflikter, men det er en pris verdt å betale. Og jeg synes NPM-moduler ofte er slappaktige når det gjelder å utgi store, små og patch-oppdateringer, så NPM-avhengighetsstyring er heller ikke akkurat en dans på roser.

Relaterte artikler