Управління залежністю від JavaScript: npm vs. bower vs. volo [закрито]


160

Як ви порівнюєте npm, bowerі volo?

Усі три можна використовувати для встановлення залежностей JavaScript для проекту інтерфейсу. Я розумію npm, більш конкретний вузол.

Отже, коли використовувати що?

npmдо сих пір стоїть на відстані, але bowerі , як voloвидається, рішення точно така ж проблема, хоча я не можу намалювати лінію між npmі bower-volo.



1
Якщо ви тут читаєте це питання і хочете відповісти з 2015 року, дивіться мою оновлену відповідь.
gustavohenke

Відповіді:


104

Опис, який найкраще описує різницю між npm та bower, це: npm управляє модулями JavaScript, які називаються пакетами, а Bower управляє компонентами переднього кінця (тобто css, html та JavaScript), що називаються компонентами. npm також використовується для установки bower. Ось велика стаття про npm та bower (не охоплює volo), вона детально описується.


88
Це не дуже вдалий опис. Npm, безумовно, може бути використаний для установки передніх компонентів.
BT

Хоча я помічав, що деякі бібліотеки "frontend" на npm стають покинутими на користь своїх аналогів. Візьмемо для прикладу Ембер , який не був опублікований за рік.
бриангонзалес

4
@Nate Назва просто там, де воно почалося. NPM зараз є системою управління пакетами загального призначення. Я регулярно використовую npm для установки фронтальних модулів. Немає різниці у використанні NPM для модулів commonjs, vs amd, vs нічого іншого. Ви можете використовувати npm так само добре, як і для модулів без JavaScript. Отже, це просто не різниця між npm та bower. Незалежно від того, чи називаєте ви їх пакетами чи компонентами, вони однакові тим, що вони обидва колекції довільних файлів.
BT

2
Це дуже оманливий відповідь, враховуючи, що бауер не має політики щодо роботи з html, css та, javascript. npm також не має політики, за винятком того, що майже все на npm написано принаймні для підтримки commonjs, а іноді й інших форматів. Ви можете розміщувати html та css в npm-пакети так само, як можна з bower. У npm існує багато пакетів, що містять лише інтерфейс, включаючи пакети, що містять css та html.
субстандарт

3
Якщо ви використовуєте перегляд веб-сторінок , npm - це ідеальний менеджер пакунків. Я не думаю, що має значення, який менеджер пакунків ви використовуєте, але я особисто дотримувався б лише одного за проект.
Еруант

72

бауер

Він все ще користується великою популярністю серед розробників, хоча він має дуже мало функцій. Використовується кожен передній пакет. Існує також ініціатива об'єднання бауера в npm .

Bower оптимізовано для клієнта і підтримує лише плоскі дерева залежностей, тобто кожна бібліотека повинна використовуватися лише один раз (оскільки дорого надсилати клієнту різні версії однієї бібліотеки), а обмеження залежності повинні бути вирішені користувачем .

Ви можете очікувати, що ви знайдете все, що пов'язане з фронтальним реєстром в реєстрі bower search <some keyword>прихильників ( ) - на мою думку, це найбільша перевага bower по відношенню до інших менеджерів пакетів.

воло

Я досі не користувався ним більше 5 хвилин у роках. Не знаю про це, але, як я бачу, він включає в себе інструмент збирання, який добре знайомий користувачам Grunt.

п / хв

Так, npm означає Node Package Manager. Але сьогодні ви можете використовувати його для всього; люди вже не лише npm installрозбирають речі і очікують, що вони працюватимуть лише в середовищі Вузла. Наприклад, існує багато пакетів npm для Twitter Bootstrap .

Npm оптимізовано для використання на сервері з вкладеним деревом залежності. Кожна залежність може мати свої залежності, які можуть мати свою, і так далі. Це усуває конфлікти версій залежності, оскільки кожна залежність може використовувати свою власну версію, наприклад, Підкреслення. Однак майбутня версія npm 3 вирівняє дерево залежності :

З npm @ 3, ваш каталог node_modules буде набагато більш рівним. Усі ваші залежності та більшість ваших залежностей (і (суб) + залежностей) будуть сидіти поруч один з одним на найвищому рівні. Тільки при виникненні конфліктів модулі будуть встановлені на більш глибоких рівнях. Це повинно значно полегшити роботу користувачів Windows.

Деякі переваги, які я бачу при використанні npm:

  • Його використовують усі інші менеджери пакунків (компонент, bower, volo, JSPM тощо);
  • Дозволяє використовувати сценарії побудови;
  • Доступно багато інструментів для введення в дію пакетів на основі npm

npm - менеджер пакунків для JavaScript.

Скріншот npmjs.com


Станом на лютий 2013 року, моя думка була такою. Будь ласка, більше не враховуйте це.

п / хв

Краще дотримуватися цього, коли ви працюєте з проектом Node, є дуже мало проектів, які також доступні для браузерів ...

бауер

Бауер зараз - поп-хлопець. У них дуже багато проектів, і керівники проектів люблять постійно оновлювати їх у реєстрі пайок ...

Прикро, що він часом трохи баггі.

воло

З цього часу я не пробував воло більше 5 хвилин, але, як я міг бачити, він виглядає більш гнучким, ніж бауер.

Негативним моментом для volo є те, що їхні проекти дуже застаріли.


19
У npm є тисячі модулів, які працюють або в браузерах, або в вузлах і в браузерах. У багатьох з них навіть є значки ci, які точно вказують, у яких браузерах вони працюють. Більшість всього на bower et all, мабуть, на npm.
субстандарт

Я не розумію необхідності такого проекту, як ngBoilerplate, щоб використовувати bower, поки це вже залежить від npm для встановлення
lolski

5
Що таке "поп-хлопець"? "Pop" абревіатура. для "популярного"?
Брайан Оуклі

4
На вашому знімку npm означає посібник з ядерного планування;)
Джим Джонс

24

Здається, вони вирішують ту саму проблему, але для різних середовищ / світів. NPM для nodejs та volo, bower для браузера.

Правда полягає в тому, що ви можете використовувати NPM також для управління javascript та css для браузера. Ніщо не заважає вам це зробити. У цьому сенсі використання NPM мені здається більш природним, ніж керувати двома різними інструментами для однієї і тієї ж мети.

Здається, що на баунер є більше пакетів, принаймні для більш популярних. Але незабаром jQuery також буде доступний безпосередньо в NPM, і, ймовірно, всі інші бібліотеки будуть слідувати тій самій тенденції.

На мою думку, оскільки існують такі інструменти, як перегляд веб-сторінок та веб-створення , які допомагають використовувати модулі вузлів у браузері, більше немає реальної потреби в bower або volo , якщо вони не пропонують щось інше для вас (конкретний модуль, який існує лише у їхні реєстри).

І Volo, і Bower теж хороші, але, з моєї точки зору, якщо ви вже використовуєте NPM, можливо, буде краще дотримуватися цього.

Зверніть увагу, що ви можете використовувати NPM для управління залежностями свого клієнта, навіть не використовуючи перегляд веб-сторінок або веб-створення . У більшості проектів, над якими я працюю, після встановлення модулів npm я запускаю сценарій, щоб розгорнути їх у тому місці, де їх використовує мій клієнтський додаток. Іноді я використовую грунт, щоб з'єднати цей файл з іншими js-файлами, а іноді посилаюсь на нього безпосередньо з файлів шаблонів моїх веб-додатків. У будь-якому випадку це особисті переваги. Інші могли знайти Bower або Volo простішими у використанні, оскільки вони підходять більш природними у своїх робочих процесах.


1
Добре мати конкурентні рішення для тієї ж проблеми. Будь-яка ідея, чому yeomanпроект вирішив придумати нового менеджера пакунків, коли у нас вже був npm? (Це було зрілим, знаменитим та багатим на особливості) Ця думка змушує мене відчувати, що я все ще пропускаю фактичну точку.
Югал Джіндл

1
Насправді, але, як ви вже говорили, смішно винаходити колесо лише тому, що ви можете, а іноді, роблячи це, можна зробити деякі вдосконалення, намагаючись вирішити ту саму проблему. Насправді, чому вони вирішують зробити новий, крім того, щоб полегшити розробникам фронтенд пошук пакетів. Не всі розробники інтерфейсів мають досвід роботи з вузлами, я думаю, що це головна причина таких проектів, як Bower. Спробуйте полегшити користувачам, які не є вузлами, я тут просто здогадуюсь.
roy riojas

Я думаю, вони хотіли розділити клопоти npmна користь простоти фронту. Отже, для розвитку інтерфейсу.
Yugal Jindle

15

Велика перевага Bower перед NPM полягає в тому, що його управління залежністю застосовується за допомогою однієї версії компонента (тоді як NPM працює, маючи різні копії / версії як недолежності різних модулів). Це ДУЖЕ ДОБРО, що запобігає розмиванню JavaScript на вашому клієнті через необхідність включення декількох копій компонента в різних версіях. Включення декількох копій модуля є центральним у тому, як працює управління залежністю NPM, і тому NPM повністю не підходить для управління пакетами на стороні клієнта.

Наслідком вищесказаного є те, що утримувачам пакетів для пайок та споживачам слід бути більш уважними до збереження номерів версій залежності, щоб уникнути конфліктів, але це ціна, яку варто заплатити. І я вважаю, що модулі NPM часто неохайні у випуску основних, другорядних та патч-релізів, тому управління залежністю NPM теж не є ліжком троянд.


3
Це справедливо лише в тому випадку, якщо ви подаєте код фронтеду безпосередньо з папки, до якої менеджер пакунків розміщував ці файли. У моєму випадку у мене є або сценарій збірки для обробки файлів менше / js, або перегляд підтвердження для створення пакету з цих файлів. Тож це насправді не велике питання в моєму випадку. Код, який поширюється, завжди має правильні версії, навіть коли інші підкомпоненти можуть мати дублікати під час розробки, вони ніколи не потрапляють до виробництва.
roy riojas

навіть якщо ви ненавмисно вимагаєте (як підзалежності) дві різні версії тієї ж залежності? Я думаю, що в цьому випадку ви помиляєтесь
wheresrhys

Зазвичай мені не потрібні модулі, якими я не керую, тому вони завжди будуть правильними ... якщо ненароком модуль намагатиметься вимагати заданий модуль зі збитих, збірка вийде з ладу. Немає сенсу користуватися бауером у моєму випадку ніякої пільги не додано
roy riojas

Тож npm можна сміливо сказати, щоб уникнути дублювання модулів у вашому клієнтському коді, якщо ви контролюєте все своє дерево залежності. Це, звичайно, не так, як і переважна більшість речей, над якими я працюю, і, мабуть, не для більшості проектів, які використовують менеджер залежностей, щоб включити модулі на стороні клієнта.
wheresrhys

1
Якщо ви не працюєте над машами, ваше дерево залежності не буде таким складним, принаймні для коду третьої сторони. Більшість бібліотек js експортує один глобальний, тому, використовуючи Browserify-shim, ви можете переконатися, що ви можете використовувати їх із загальної області, отже, завжди це версія, яку ви контролюєте. Моя думка полягає в тому, що ви можете досягти того ж, не потребуючи іншого менеджера пакунків поверх того, який у вас уже є. Зрештою, це може бути питанням уподобань. Завжди потрібно робити компроміси.
roy riojas

5

Я знаю, що це не стосується питання, але є й інша альтернатива. Варення JS - http://jamjs.org/ Цікавим є те, що він має можливості бурчання в джемі:

jam compile output.js

Хтось повинен зробити ще одного менеджера пакунків і назвати його: yapm :)


5
Ваше бажання надано: github.com/rlidwka/yapm : P
alex

1
добре, я думав про менеджера залежності браузерної залежності, але я думаю, що це працює для обох: p Ось чому я не можу робити стартапи, всі мої ідеї вже були продумані.
Брюс Лім

@BruceLim Так, кожного разу, коли ми думаємо, що у нас є гарна ідея, завжди є інші люди, які вже це отримали.
Еван Ху
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.