Разница между 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 файл не будет затронут.
Вы можете сделать это в любом случае, существенной разницы не будет.