Управление зависимостями JavaScript: npm против bower против volo

Как вы сравниваете npm, bower а также volo?

Все три могут быть использованы для установки зависимостей JavaScript для проекта пользовательского интерфейса. я понимаю npm более специфичен для узла.

Итак, когда использовать что?

npm до сих пор стоит далеко, но bower а также volo похоже, решают точно такую ​​же проблему, хотя я не могу провести черту между npm а также bower-volo,

5 ответов

Решение

Описание, которое лучше всего описывает разницу между npm и bower: npm управляет модулями JavaScript, называемыми пакетами, а Bower управляет внешними компонентами (например, css, html и JavaScript), называемыми компонентами. Npm также используется для установки беседки. Вот обширная статья о npm и bower (не распространяется на volo), в ней много деталей.

беседка

Он по-прежнему очень популярен среди разработчиков переднего плана, хотя у него очень мало функций. Каждый интерфейсный пакет использует его. Также существует инициатива по слиянию беседок с npm.

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

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

вол

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

НПМ

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

Npm оптимизирован для использования на стороне сервера с вложенным деревом зависимостей. Каждая зависимость может иметь свои собственные зависимости, которые могут иметь свои собственные, и так далее. Это устраняет конфликты версий зависимостей, так как каждая зависимость может использовать свою собственную версию, например Underscore. Тем не менее, следующая версия npm 3 сгладит дерево зависимостей:

С npm@3 ваша директория node_modules будет намного более плоской. Все ваши зависимости и большинство ваших зависимостей (и (sub)+ зависимости) будут находиться рядом друг с другом на верхнем уровне. Только при наличии конфликтов модули будут установлены на более глубоких уровнях. Это должно облегчить жизнь пользователям Windows.

Некоторые преимущества использования npm:

  • Он используется всеми остальными менеджерами пакетов (компонент, bower, volo, JSPM и т. Д.);
  • Позволяет использовать скрипты сборки;
  • Для анализа пакетов на основе npm доступно множество инструментов

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

скриншот npmjs.com


По состоянию на февраль 2013 года мое мнение было следующим. Пожалуйста, не принимайте это во внимание больше.

НПМ

Лучше придерживаться этого, когда вы работаете с Node-проектом, очень мало проектов, которые также доступны для браузеров...

беседка

Бауэр сейчас попсовый парень. У них под капотом много проектов, и разработчики проектов хотели бы держать их в актуальном состоянии в реестре Bower...

Обидно, что он иногда немного глючит.

вол

С тех пор я не пробовал volo более 5 минут, но, насколько я вижу, он выглядит более гибким, чем беседка.

Отрицательный момент для воло в том, что их проекты сильно устарели.

Кажется, они решают одну и ту же проблему, но для разных сред / миров. NPM для nodejs и volo, беседка для браузера.

Правда в том, что вы можете использовать NPM также для управления javascript и css для браузера. Ничто не мешает вам сделать это. В этом смысле использование NPM кажется мне более естественным, чем управление двумя разными инструментами для одной и той же цели.

Кажется, что у bower есть больше доступных пакетов, по крайней мере, для более популярных. Но вскоре jQuery также будет доступен в NPM напрямую, и, вероятно, все остальные библиотеки будут следовать той же тенденции.

По моему мнению, поскольку существуют такие инструменты, как http://browserify.org/ и webmake, которые помогают использовать модули узлов в браузере, больше нет реальной необходимости в bower или volo, если они не предлагают что-то другое для вас (конкретный модуль существует только в их реестры).

И Воло, и Бауэр тоже хороши, но, с моей точки зрения, если вы уже используете NPM, лучше придерживаться его.

Обратите внимание, что вы можете использовать NPM для управления клиентскими зависимостями даже без использования browserify или webmake. В большинстве проектов, над которыми я работаю, после установки модулей npm я запускаю сценарий, чтобы развернуть их в том месте, где их использует мое клиентское приложение. Иногда я использую grunt для объединения этого файла с другими js-файлами, а иногда я ссылаюсь на него непосредственно из файлов шаблонов моих веб-приложений. В любом случае это личное предпочтение. Другие могут найти Bower или Volo более простыми в использовании, поскольку они более естественны в своих рабочих процессах.

Большое преимущество Bower перед NPM состоит в том, что его управление зависимостями обеспечивает использование одной версии компонента (тогда как NPM работает с наличием разных копий / версий в качестве подзависимостей разных модулей). Это ОЧЕНЬ ХОРОШО, потому что это предотвращает раздутость JavaScript на стороне клиента из-за необходимости включать несколько копий компонента в разных версиях. Включение нескольких копий модуля является основным в том, как работает управление зависимостями NPM, и поэтому NPM совершенно не подходит для управления пакетами на стороне клиента.

Следствием вышесказанного является то, что сопровождающие и покупатели пакетов bower должны быть внимательнее при сохранении номеров версий зависимостей, чтобы избежать конфликтов, но это стоит того. И я нахожу, что модули NPM часто выпускают мажорные, второстепенные и патч-релизы, поэтому управление зависимостями NPM тоже не является ложью роз.

Я знаю, что это не входит в суть вопроса, но есть и другая альтернатива. Jam JS - http://jamjs.org/ Одна интересная вещь состоит в том, что у него есть grunt возможности в варенье:

jam compile output.js

Кто-то должен сделать еще один менеджер пакетов и назвать его: yapm:)

Другие вопросы по тегам