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

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

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

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

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

Ответы

Ответ 1

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

Ответ 2

Беседки

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

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

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

вол

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

NPM

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

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

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

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

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

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

npmjs.com screenshot


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

NPM

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

Беседки

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

Это позор, что он иногда немного глючит.

вол

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

jam compile output.js

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