2014-01-18 4 views
545

Я новичок в использовании npm и bower, создавая свое первое приложение в emberjs :).
У меня есть немного опыта с рельсами, так что я знаком с идеей файлов для перечисления зависимостей (например, Bundler Gemfile)Разница между Grunt, NPM и Bower (package.json vs bower.json)

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

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

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

Наглядно Я предположил бы, что

  1. НПМ установить имя пакета --save-DEV будет эквивалентно добавлению к имени пакета к моему package.json

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

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

+1

возможно дубликат [Разница между Бауэра и НПМ?] (Http://stackoverflow.com/questions/18641899/difference-between-bower-and-npm) –

+10

@ SindreSorhus Это не точный дубликат. В этом посте также есть дополнительный вопрос. Кстати, не возражаете ли вы объяснить, что такое downvote? – sachinjain024

+0

Вы изменили принятый ответ? Похоже, что высокопоставленный из 2014 года говорит о чем-то совершенно отличном от принятого с 2016 года.Это также объясняет, почему это предполагает другой подход, поэтому я с ним крутой. Просто немного удивил, что он принят (или повторно принят). –

ответ

128

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

Вещи меняются так быстро, что, если это поздно 2017 г. этот ответ не может быть в курсе больше!

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

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

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

  • Webpack
  • НПЕ как инструмент для сборки (без Глоток, Grunt или Бауэр)
  • React с Redux
  • ESLint
  • список длинный. Иди и исследуй!

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

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

  • Все принадлежит package.json Теперь

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

  • Зависимости, необходимые для вашего приложения во время выполнения, находятся в «зависимостях», т.е. npm install lodash --save (--save обновляет package.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

+0

О, так запутано ... Если я пытаюсь начать с Angular 2, мне нужен пакет sling-shot? Это листинг React, который, как я понимаю, является альтернативой угловому, не так ли? Могу ли я по-прежнему пропускать беседу и т. Д., Даже если я иду с Angular 2 и вместо этого использую ваше предложение об использовании NPM для всего (как для внутреннего, так и для внешнего)? –

+0

@ user6944170 React and Angular - две разные вещи. Угловой - это все-в-одном передний двигатель, а React - это механизм рендеринга, который позволяет вам скомпилировать собственный набор инструментов. Вот почему это экономит много времени, чтобы начать с хорошего кода шаблона, который содержит хороший набор инструментов и библиотек. Угловой 2 следовал за преимуществами Реагента по сравнению с угловым 1 и является альтернативой Реагированию. Вы можете начать с проекта Angular 2 здесь https://github.com/AngularClass/angular2-webpack-starter – Pawel

+4

Ваш ответ очень упрямый: > 'С помощью Webpack вы можете делать все непосредственно в NPM!' Это не правда , в его рабочем потоке даже не требуется webpack –

542

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

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

Эти строки добавляют больше смысла

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

Edit: Grunt довольно сильно отличается от НОГО и Бауэра. Grunt - это инструмент для запуска задач javascript. Вы можете делать много вещей, используя хрюканье, которые вам приходилось делать в противном случае.Обратив внимание на некоторые из применений Грунта:

  1. проносясь некоторые файлы (например ZipUp плагин)
  2. пылеобразования на JS-файлов (jshint)
  3. Компиляция меньше файлов (пехотинец-вно-менее)

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

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

Вопрос-1

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

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

Вопрос-2

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

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

  • Отредактируйте файл package.json и добавить зависимость от «запроса»
  • НПМ установки

ИЛИ

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

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

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

+3

Спасибо за разъяснение и за статью! Проницательный и разъясняет разницу (которая должна помочь решить, где поставить зависимости). Я подожду, если, возможно, кто-то перезвонит последнему вопросу (re: когда я когда-нибудь захочу устанавливать пакеты по отдельности), и примите свой ответ позже :) – apprenticeDev

+0

К сожалению, я пропустил ваш вопрос2. Не понимаю, что это было там , Я просто догадался, что вы просто просили разницу между обоими. Заплатив мой ответ – sachinjain024

+0

Спасибо! Это именно то, для чего нужен флаг -save, huh :) – apprenticeDev

Смежные вопросы