Управление зависимостями 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.
По состоянию на февраль 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:)