Wie vergleichen Sie npm
, bower
und volo
?
Alle drei können verwendet werden, um JavaScript-Abhängigkeiten für ein UI-Projekt zu installieren. Ich verstehe npm
ist knotenspezifischer.
Also, wann was verwenden?
npm
steht immer noch weit entfernt, aber bower
und volo
scheint genau das gleiche Problem zu lösen, auch wenn ich nicht in der Lage bin eine Linie zu ziehen zwischen der npm
und bower-volo
.
Antworten:
Eine Beschreibung, die den Unterschied zwischen npm und bower am besten beschreibt, lautet: npm verwaltet JavaScript-Module, die als Pakete bezeichnet werden, und Bower verwaltet Front-End-Komponenten (dh CSS, HTML und JavaScript), die als Komponenten bezeichnet werden. npm wird auch zum Installieren der Laube verwendet. Hier ist ein ausführlicher Artikel über npm und bower (deckt nicht volo ab), der ausführlich behandelt wird.
quelle
Laube
Es ist immer noch sehr beliebt bei Front-End-Entwicklern, obwohl es nur sehr wenige Funktionen hat. Jedes Front-End-Paket verwendet es. Es gibt auch eine Initiative, um Laube in npm zusammenzuführen .
Bower ist clientseitig optimiert und unterstützt nur flache Abhängigkeitsbäume, dh jede Bibliothek darf nur einmal verwendet werden (da es teuer ist, verschiedene Versionen derselben Bibliothek an den Client zu senden), und die Abhängigkeitsbeschränkungen müssen vom Benutzer gelöst werden .
Sie können erwarten, dass in der Bower-Registrierung (
bower search <some keyword>
) alles gefunden wird, was mit dem Front-End zu tun hat - meiner Meinung nach ist dies der größte Vorteil von Bower im Vergleich zu anderen Paketmanagern.volo
Ich habe es seit Jahren immer noch nicht länger als 5 Minuten benutzt. Ich weiß nichts darüber, aber soweit ich sehen kann , enthält es ein Build-Tool, das Grunt-Benutzern sehr vertraut ist.
npm
Ja, npm steht für Node Package Manager. Aber heutzutage kann man es für alles verwenden; Menschen tun nicht mehr nur
npm install
Dinge und erwarten, dass sie nur in der Knotenumgebung funktionieren . Zum Beispiel gibt es viele npm-Pakete für Twitter Bootstrap .Npm ist für die serverseitige Verwendung mit einem verschachtelten Abhängigkeitsbaum optimiert. Jede Abhängigkeit kann ihre eigenen Abhängigkeiten haben, die ihre eigenen haben können, und so weiter. Dadurch wurden Konflikte mit Abhängigkeitsversionen beseitigt, da jede Abhängigkeit ihre eigene Version von z. B. Unterstrich verwenden kann. Die kommende npm-Version 3 wird jedoch den Abhängigkeitsbaum reduzieren :
Einige Vorteile, die ich bei der Verwendung von npm sehe:
npm ist der Paketmanager für JavaScript.
Ab Februar 2013 war meine Meinung die folgende. Bitte berücksichtigen Sie es nicht mehr.
npm
Es ist besser, sich daran zu halten, wenn Sie mit einem Node-Projekt arbeiten. Es gibt nur sehr wenige Projekte, die auch Browsern zur Verfügung stehen ...
Laube
Bower ist gerade der Pop-Typ. Sie haben viele Projekte unter der Haube, und die Projektbetreuer halten sie gerne im Bower-Register auf dem Laufenden ...
Es ist eine Schande, dass er manchmal ein kleiner Buggy ist.
volo
Ich habe Volo seitdem nicht mehr als 5 Minuten lang ausprobiert, aber soweit ich sehen konnte, scheint es flexibler zu sein als Laube.
Ein negativer Punkt für volo ist, dass ihre Projekte sehr veraltet sind.
quelle
Sie scheinen das gleiche Problem zu lösen, jedoch für verschiedene Umgebungen / Welten. NPM für NodeJS und Volo, Laube für den Browser.
Die Wahrheit ist, dass Sie NPM auch zum Verwalten von Javascript und CSS für den Browser verwenden können. Nichts hindert Sie daran. In diesem Sinne ist es für mich natürlicher, NPM zu verwenden, als zwei verschiedene Tools für denselben Zweck verwalten zu müssen.
Es scheint, dass Bower mehr Pakete zur Verfügung hat, zumindest für die populäreren. Aber bald wird jQuery auch direkt in NPM verfügbar sein und wahrscheinlich werden alle anderen Bibliotheken dem gleichen Trend folgen.
Da es Tools wie browserify und webmake gibt, die bei der Verwendung von Knotenmodulen im Browser helfen, besteht meiner Meinung nach kein wirklicher Bedarf an Bower oder Volo mehr , es sei denn, sie bieten etwas anderes für Sie (ein bestimmtes Modul, das nur in vorhanden ist ihre Register).
Sowohl Volo als auch Bower sind ebenfalls gut, aber aus meiner Sicht ist es möglicherweise besser, sich daran zu halten, wenn Sie bereits NPM verwenden.
Bitte beachten Sie, dass Sie NPM verwenden können, um Ihre Client-Abhängigkeiten zu verwalten, auch ohne browserify oder webmake zu verwenden . In den meisten Projekten, an denen ich arbeite, führe ich nach der Installation der npm-Module ein Skript aus, um sie an dem Ort bereitzustellen, an dem meine Client-App sie verwendet. Manchmal verwende ich grunt, um diese Datei mit anderen js-Dateien zu verketten, und manchmal verweise ich direkt auf die Vorlagendateien meiner Webanwendungen. In jedem Fall ist dies eine persönliche Präferenz. Andere finden Bower oder Volo möglicherweise einfacher zu verwenden, da sie natürlicher in ihre Arbeitsabläufe passen.
quelle
yeoman
Projekt einen neuen Paketmanager entwickelt hat, als wir es bereits hattennpm
? (Es war ausgereift, berühmt und reich an Funktionen) Dieser Gedanke gibt mir das Gefühl, dass mir immer noch der eigentliche Punkt fehlt.npm
zugunsten der Einfachheit des Frontends trennen . Daher für die Frontend-Entwicklung.Bowers großer Vorteil gegenüber NPM besteht darin, dass das Abhängigkeitsmanagement die Verwendung einer einzelnen Version einer Komponente erzwingt (während NPM unterschiedliche Kopien / Versionen als Unterabhängigkeiten verschiedener Module verwendet). Dies ist SEHR GUT, da es verhindert, dass Ihr clientseitiges Javascript aufgebläht wird, da mehrere Kopien einer Komponente in verschiedenen Versionen enthalten sein müssen. Das Einfügen mehrerer Kopien eines Moduls ist für die Funktionsweise des Abhängigkeitsmanagements von NPM von zentraler Bedeutung. Daher ist NPM für die clientseitige Paketverwaltung völlig ungeeignet.
Eine Konsequenz aus dem oben Gesagten ist, dass Bower-Paketbetreuer und Verbraucher ihre Abhängigkeitsversionsnummern besser beachten müssen, um Konflikte zu vermeiden, aber es ist ein Preis, den es sich zu zahlen lohnt. Und ich finde, dass NPM-Module bei der Herausgabe von Major-, Minor- und Patch-Releases oft schlampig sind, sodass das NPM-Abhängigkeitsmanagement auch nicht gerade ein Rosenbeet ist.
quelle
Ich weiß, dass dies nicht im Rahmen der Frage liegt, aber es gibt auch eine andere Alternative. Jam JS - http://jamjs.org/ Eine interessante Sache ist, dass es Grunzfähigkeiten in Jam hat:
Jemand sollte noch einen Paketmanager erstellen und ihn nennen: yapm :)
quelle