Різниця між Grunt, NPM та Bower (package.json vs bower.json)


612

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

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

З того, що я збираю,
біг bower installотримає пакет і помістить його в /vendorкаталог,
запустивши npm installйого, він отримає його і помістить у /node_modulesкаталог.

Ця відповідь ТА говорить, що бауер призначений для переднього та npm - для допоміжного матеріалу.
Ember-app-kit, здається, дотримується цього розрізнення з першого погляду ... Але інструкції в gruntfile для включення певної функціональності дають дві явні команди, тому я тут абсолютно заплутаний.

Інтуїтивно я б це здогадався

  1. npm install --save-dev ім'я пакета було б еквівалентно додаванню імені пакета до мого пакета.json

  2. bower install - зберегти ім'я пакета, можливо, те саме, що додавання пакета до мого bower.json та запуску установки bower ?

Якщо це так, коли мені коли-небудь явно встановлювати такі пакети, не додаючи їх у файл, який управляє залежностями (крім встановлення інструментів командного рядка в усьому світі)?



14
@SindreSorhus Це не точний дублікат. У цій публікації також пов’язане додаткове питання. BTW Ви не проти пояснити пояснення?
sachinjain024

1
Ви змінили прийняту відповідь? Здається, що висококваліфікований з 2014 року розповідає щось зовсім інше, ніж прийняте з 2016 року. Це також пояснює, чому він пропонує інший підхід, тому я з ним крутий. Просто трохи здивований, що це прийнято (або знову прийнято).

1
Так, я змінив прийняту відповідь, бо вважаю, що пізніша є набагато актуальнішою. Я гадаю, що в цьому передньому джунглях багато людей так само розгублені, як і я, тому це питання набуло популярності набагато вище моїх очікувань ... І все-таки отримує думку 2 роки потому. Завдяки Pawel, тепер є більш актуальна відповідь, на яку люди звертаються (fwiw, я використовую webpack на своїй теперішній роботі).
ученьДев

Відповіді:


154

Оновлення на середину 2016 року :

Все змінюється настільки швидко, що якщо пізній 2017 рік, ця відповідь може вже не бути актуальною!

Початківці можуть швидко загубитися у виборі інструментів збирання та робочих процесів, але найновіше в 2016 році - це взагалі не використовувати Bower, Grunt або Gulp! За допомогою Webpack ви можете зробити все безпосередньо в NPM!

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

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

  • Вебпак
  • NPM як інструмент збирання (без затоку, грунту чи бауера)
  • Реагуйте з Redux
  • ESLint
  • список довгий. Ідіть і досліджуйте!

Ваші запитання:

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

  • Зараз все належить у package.json

  • Залежності, необхідні для складання, знаходяться у "devDependpendes", тобто npm install require-dir --save-dev(--save-dev оновлює ваш package.json, додаючи запис до devDependitions)

  • Залежності, необхідні для вашої програми під час виконання, знаходяться в "залежностях", тобто npm install lodash --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


6
Ваша відповідь дуже впевнено:> With help of Webpack you can do everything directly in NPM! Це неправда, навіть не потрібен веб-пакет у його робочому процесі
Августин Рідінгер

26
Ця відповідь, здається, робить багато припущень. Питання полягає в тому, щоб задати різницю між npm та bower, і ця відповідь чомусь згадує webpack. Так, вебпакет - це один із способів зробити це, але ця відповідь робить таке, що здається, це єдиний і правильний спосіб зробити це. Наприклад, якщо хтось працює з Polymer 1.x, стандартний робочий процес буде використовувати bower, а для веб-пакету не так багато підтримки.
Джон Пауерс

1
Відповідь насправді є актуальною, але аргумент наводиться не зовсім так: "але це так, як це робиться" - ну, нічого не слід робити тільки тому, що це повинно бути, здавалося б, зроблено (тобто це робиться іншими). Гроші не мають нічого спільного з аргументацією робочого процесу.
форсберг

3
Дивлячись на цю відповідь у 2017 році. Переходимо до документації: "webpack v1 застарілий. Ми радимо всім розробникам перейти на webpack 2. Дотримуйтесь нашої інструкції з міграції або зверніться до документації webpack 2 для отримання додаткової інформації." Ха-ха класична веб-розробка.
user643011

1
@ user643011 Переглядаючи посібник з міграції, ви помітите, що більшість конфігурацій залишаються однаковими, а решта - це лише косметичні зміни в структурі конфігурацій. Я зробив міграцію в один день, включаючи PR
Pawel

576

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

Факт, який робить це більш заплутаним, полягає в тому, що npm надає деякі пакети, які також можуть бути використані в розробці, як gruntі jshint.

Ці рядки додають більше значення

Bower, на відміну від npm, може мати декілька файлів (наприклад, .js, .css, .html, .png, .ttf), які вважаються основним файлом. Bower семантично розглядає ці основні файли, коли вони упаковані разом, компонентом.

Правка : Grunt сильно відрізняється від Npm та Bower. Grunt - це інструмент для запуску завдань Javascript. Ви можете зробити багато речей, використовуючи грунт, який вам довелося робити вручну в іншому випадку. Виділення деяких видів використання Grunt:

  1. Стягування деяких файлів (наприклад, плагін zipup)
  2. Посилання на js-файли (jshint)
  3. Компілювання менше файлів (без грунту на внесок)

Існують плагіни для компіляції sass, знищення вашого javascript, копіювання файлів / папок, мінімізація javascript тощо.

Зверніть увагу, що плагін grunt також є пакетом npm.

Питання 1

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

Це дійсно залежить, куди належить цей пакет. Якщо це модуль вузла (наприклад, grunt, request), він перейде в package.json інакше в bower json.

Питання-2

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

Не має значення, ви встановлюєте пакети явно або згадуєте залежність у файлі .json. Припустимо, ви працюєте над проектом вузла і вам потрібен інший проект, скажімо request, тоді у вас є два варіанти:

  • Відредагуйте файл package.json та додайте залежність від "запиту"
  • npm встановити

АБО

  • Використовувати командний рядок: npm install --save request

--saveПараметри додає залежність і до файлу package.json. Якщо ви не вказуєте--save варіант, він завантажить лише пакет, але файл json не вплине.

Зробити це можна будь-яким способом, істотної різниці не буде.


3
Дякуємо за роз’яснення та за статтю! Проникливий і роз'яснює різницю (яка повинна допомогти вирішити, куди поставити залежності). Я зачекаю, якщо, можливо, хтось задзвенить на останнє запитання (re: коли я коли-небудь хотів би встановити пакунки індивідуально), і прийму вашу відповідь пізніше :)
apprenticeDev

1
Що стосується npm, він може бути менеджером пакетів для модулів NodeJS, але ми втрачаємо вигляд, що це не виключно лише для NodeJS. npm - це так само ефективне управління залежностями клієнта. Наприклад: dontkry.com/posts/code/using-npm-on-the-client-side.html
Метт Сміт

15
Що може прихильниця зробити, що npm не може?
Адам Соффер

1
Зауважте, що сховище плагінів jQuery ( plugins.jquery.com ) було замінено npm.
thoan

2
останній підручник з швидким стартовим кутом 2 (RC) та насіння git використовуються npmлише на відміну від підручника v1, який використовував і npm, і bower. Я дуже, дуже люблю факти, що (a) package.json- це єдине, що слід підтвердити, (b) що він обчислює залежності рекурсивно в одному вкладиші npm install, і (c) коли є проблема, вам просто потрібно видалити node_modulesпапку і запустити npm install знову.
Себас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.