Разница между Grunt, NPM и Bower (package.json vs bower.json)

Я новичок в использовании npm и bower, создаю свое первое приложение в emberjs:).
У меня есть некоторый опыт работы с рельсами, поэтому я знаком с идеей файлов для перечисления зависимостей (таких как bundler Gemfile)

Вопрос: когда я хочу добавить пакет (и проверить зависимость в git), где он принадлежит - в package.json или в bower.json?

Из того, что я собираю,
запуск bower install приведет к загрузке пакета и поместите его в каталог /vendor,
npm install он запустит его и поместит в каталог /node_modules.

Этот ответ SO говорит, что bower для front-end и npm для бэкэнда.
Ember-app-kit, похоже, придерживается этого различия с первого взгляда... Но инструкции в файле grunt для позволяющий использовать некоторые функции, дает две явные команды, поэтому я полностью запутался здесь.

Интуитивно я бы предположил, что

  • npm install --save-dev package-name будет эквивалентно добавлению имени пакета в мой пакет package.json

  • bower install --save package-name может быть таким же, как добавление пакета в мой bower.json и запуск установки bower?

Если это так, когда я должен устанавливать пакеты явно так, не добавляя их в файл, который управляет зависимостями (кроме установки инструментов командной строки по всему миру)?

Ответ 1

Обновление для середины 2016 года:

Все меняется так быстро, что если он в конце 2017 года, этот ответ может быть не самым актуальным!

Начинающие могут быстро потеряться в выборе инструментов сборки и рабочих процессов, но то, что в самом современном состоянии в 2016 году не использует Bower, Grunt или Gulp вообще! С помощью Webpack вы можете делать все непосредственно в NPM!

Не заставляйте меня ошибочно использовать другие рабочие процессы, и я по-прежнему использую Gulp в своем проекте с наследием (но медленно перемещаясь из него), но так оно и делается в лучших компаниях и разработчиках, работающих в этом рабочем процессе. много денег!

Посмотрите на этот шаблон, это очень современная установка, состоящая из смеси лучших и новейших технологий: https://github.com/coryhouse/react-slingshot

  • Webpack
  • NPM как инструмент построения (no Gulp, Grunt или Bower)
  • Реагировать с Redux
  • ESLint
  • список длинный. Пойдите и исследуйте!

Ваши вопросы:

Когда я хочу добавить пакет (и проверить зависимость в git), где он принадлежит - в package.json или в bower.json

  • Все принадлежит к package.json сейчас

  • Зависимости, необходимые для сборки, находятся в "devDependencies", т.е. npm install require-dir --save-dev (--save-dev обновляет ваш пакет .json, добавляя запись в devDependencies)

  • Зависимости, необходимые для вашего приложения во время выполнения, находятся в "зависимостях", т.е. npm install lodash --save (--save обновляет ваш пакет .json, добавляя запись к зависимостям)

Если это так, когда я должен устанавливать пакеты явно так, не добавляя их в файл, который управляет зависимостями (кроме установки инструментов командной строки по всему миру)?

Всегда. Просто из-за комфорта. Когда вы добавляете флаг (--save-dev или --save), файл, который управляет deps (package.json), автоматически обновляется. Не тратьте время, редактируя его вручную. Ярлык для npm install --save-dev package-name - npm i -D package-name, а ярлык для npm install --save package-name - npm i -S package-name

Ответ 2

Npm и Bower - оба средства управления зависимостями. Но основное различие между ними - npm используется для установки модулей Node js, но bower js используется для управления компонентами переднего конца, такими как html, css, js и т.д..

Тот факт, что делает это более запутанным, это то, что npm предоставляет некоторые пакеты, которые также могут использоваться в интерфейсной разработке, например grunt и jshint.

Эти строки добавляют больше значения

Bower, в отличие от npm, может иметь несколько файлов (например..js,.css,.html,.png,.ttf), которые считаются основным файлом. Бауер семантически рассматривает эти основные файлы, упакованные вместе, компонент.

Изменить: Grunt сильно отличается от Npm и Bower. Grunt - это инструмент для запуска задач javascript. Вы можете делать много вещей, используя хрюканье, которые вам приходилось делать в противном случае. Выделение некоторых видов использования Grunt:

  • Замена некоторых файлов (например, плагин zipup)
  • Наведение на js файлы (jshint)
  • Скомпилировать меньше файлов (без привлечения ресурсов)

Есть плагины grunt для компиляции sass, угасание вашего javascript, копирование файлов/папок, мини-javascript и т.д.

Обратите внимание, что плагин grunt также является пакетом npm.

Вопрос-1

Когда я хочу добавить пакет (и проверить зависимость в git), где он принадлежит - в package.json или в bower.json

Это действительно зависит от того, где этот пакет принадлежит. Если это модуль Node (например, grunt, request), то он будет идти в package.json в противном случае в bower json.

Вопрос-2

Когда я должен устанавливать пакеты явно так, не добавляя их в файл, который управляет зависимостями

Не имеет значения, явно ли вы устанавливаете пакеты или указываете зависимость в файле .json. Предположим, вы находитесь в середине работы над проектом Node, и вам нужен другой проект, скажем request, тогда у вас есть два варианта:

  • Отредактируйте файл package.json и добавьте зависимость от 'request'
  • npm install

ИЛИ

  • Использовать командную строку: npm install --save request

--save добавляет зависимость к файлу package.json. Если вы не укажете опцию --save, она будет загружать только пакет, но json файл не будет затронут.

Вы можете сделать это в любом случае, существенной разницы не будет.