web-dev-qa-db-fra.com

Gestion des dépendances JavaScript: npm vs. bower vs. volo

Comment comparez-vous npm, bower et volo?

Tous les trois peuvent être utilisés pour installer des dépendances JavaScript pour un projet d'interface utilisateur. Je comprends que npm est plus spécifique à un nœud.

Alors, quand utiliser quoi?

npm est toujours distant, mais bower et volo semblent résoudre exactement le même problème, bien que je ne sois pas en mesure de tracer une ligne entre npm et bower-volo.

160
Yugal Jindle

Voici une description qui décrit le mieux la différence entre npm et bower: npm gère les modules JavaScript appelés packages, et Bower gère les composants frontaux (c.-à-d. Css, html et JavaScript) appelés composants. NPM est également utilisé pour installer Bower. Voici un article expansif sur npm et bower (ne couvre pas volo) il entre dans beaucoup de détails.

104
strangeloops

tonnelle

Il est toujours très populaire parmi les développeurs front-end, même s'il a très peu de fonctionnalités. Tous les paquets frontaux l'utilisent. Il y a aussi un initiative pour fusionner bower en npm .

Bower est optimisé pour le côté client et ne prend en charge que les arbres de dépendance plats, c'est-à-dire chaque bibliothèque ne doit être utilisée qu'une seule fois (car il est coûteux d'expédier différentes versions de la même bibliothèque au client), ainsi que la dépendance. les contraintes doivent être résolues par l'utilisateur.

Vous pouvez vous attendre à trouver tout ce qui est lié à l’interface frontale dans le registre bower (bower search <some keyword>) - À mon avis, c’est le principal avantage de Bower par rapport aux autres gestionnaires de packages.

volo

Je ne l'ai toujours pas utilisé pendant plus de 5 minutes depuis des années. Je ne sais pas, d'après ce que je peux voir il inclut un outil de construction, qui est très familier aux utilisateurs de Grunt.

npm

Oui, npm signifie Node Gestionnaire de paquets. Mais aujourd'hui, vous pouvez l'utiliser pour tout; les gens ne sont plus seulement npm installdes choses et s’attendant à ce qu’elles fonctionnent seulement dans l’environnement Node. Par exemple, il existe de nombreux paquets npm pour Twitter Bootstrap .

Npm est optimisé pour une utilisation côté serveur, avec une arborescence de dépendances imbriquée. Chaque dépendance peut avoir ses propres dépendances, qui peuvent avoir les siennes, etc. Cela élimine les conflits de version de dépendance car chaque dépendance peut utiliser sa propre version de, par exemple. Souligner. Cependant, le prochain la version 3 de npm va aplatir l’arbre de dépendance :

Avec npm @ 3, votre répertoire node_modules sera beaucoup plus plat. Toutes vos dépendances et la plupart de vos sous-dépendances (et (sous-)) + dépendances se trouveront côte à côte au niveau supérieur. Ce n’est qu’en cas de conflit que les modules seront installés à des niveaux plus profonds. Cela devrait rendre les choses beaucoup plus faciles pour les utilisateurs de Windows.

Quelques avantages que je vois sur l’utilisation de npm:

  • Il est utilisé par tous les autres gestionnaires de paquets (composant, bower, volo, JSPM, etc.);
  • Permet d'utiliser des scripts de construction.
  • De nombreux outils sont disponibles pour l'introspection de paquets basés sur npm

npm est le gestionnaire de paquets pour JavaScript.

npmjs.com screenshot


En février 2013, mon opinion était la suivante. Merci de ne plus en tenir compte.

npm

Il vaut mieux rester avec cela quand vous êtes avec un projet Node, il y a très peu de projets disponibles pour les navigateurs aussi ...

tonnelle

Bower est le gars pop en ce moment. Ils ont beaucoup de projets à leur actif, et les responsables du projet aiment les tenir à jour dans le registre Bower ...

C'est dommage qu'il soit parfois un peu buggy.

volo

Cela fait plus de 5 minutes que je n'ai pas essayé de volo, mais d'après ce que j'ai pu voir, cela semble plus souple que Bower.

Un point négatif pour Volo est que leurs projets sont très dépassés.

72
gustavohenke

Ils semblent résoudre le même problème mais pour des environnements/mondes différents. NPM pour nodejs et volo, bower pour le navigateur.

La vérité est que vous pouvez également utiliser NPM pour gérer javascript et css pour le navigateur. Il n'y a rien qui vous empêche de le faire. En ce sens, utiliser NPM me semble plus naturel que de devoir gérer deux outils différents dans le même but.

Il semble que Bower ait plus de forfaits disponibles, du moins pour les plus populaires. Mais bientôt jQuery sera également disponible directement dans NPM et probablement toutes les autres bibliothèques suivront la même tendance.

À mon avis, puisqu'il existe des outils tels que browserify et webmake qui aide à utiliser les modules de noeuds dans le navigateur, il n’ya plus vraiment besoin de bower ou volo , à moins qu’ils ne vous proposent autre chose (un module particulier n’existant que dans leurs registres).

Volo et Bower sont également bons, mais de mon point de vue , si vous utilisez déjà NPM, il serait peut-être préférable de vous y tenir.

Veuillez noter que , vous pouvez utiliser NPM pour gérer vos dépendances client même sans utiliser browserify ou webmake . Dans la plupart des projets sur lesquels je travaille, une fois les modules npm installés, j'exécute un script pour les déployer à l'emplacement où mon application client les utilise. Parfois, j'utilise grunt pour concaténer ce fichier avec d'autres fichiers js et parfois je le référence directement à partir des fichiers de modèle de mes applications Web. En tout cas, c'est une préférence personnelle. D'autres pourraient trouver que Bower ou Volo sont plus faciles à utiliser car leur flux de travail est plus naturel.

24
roy riojas

Le gros avantage de Bower par rapport au NPM réside dans le fait que sa gestion des dépendances s’applique à l’aide d’une version unique d’un composant (alors que le NPM fonctionne en ayant différentes copies/versions en tant que sous-dépendances de différents modules). C’est TRÈS BONNE CHOSE car cela évite que votre javascript côté client ne soit trop gonflé car vous devez inclure plusieurs copies d’un composant dans différentes versions. L'inclusion de plusieurs copies d'un module est essentielle au fonctionnement de la gestion des dépendances par NPM. NPM est donc totalement inadapté à la gestion des packages côté client.

L'une des conséquences de ce qui précède est que les responsables de la maintenance et les consommateurs de paquets Bower doivent être plus attentifs au maintien des numéros de version de dépendance afin d'éviter les conflits, mais c'est un prix qui vaut la peine d'être payé. Et je trouve que les modules NPM sont souvent bâclés lors de la publication de versions majeures, mineures et de correctifs, de sorte que la gestion des dépendances par NPM n’est pas non plus une pure folie.

15
wheresrhys

Je sais que cela ne fait pas partie de la question, mais il existe une autre alternative. Jam JS - http://jamjs.org/ Une chose intéressante est qu'il a des capacités de grognement dans jam:

jam compile output.js

Quelqu'un devrait créer un autre gestionnaire de paquets et le nommer: yapm :)

5
Bruce Lim