Підсумок важливих відмінностей у поведінці:
Тут не обговорюються пов'язані варіанти:
devЗалежності
dependencies
їх потрібно запускати, devDependencies
лише для розробки, наприклад: тести для модулів, перетворення кава-скрипту в JavaScript, мінімізація, ...
Якщо ви збираєтесь розробляти пакет, ви завантажуєте його (наприклад, через git clone
), переходите до його кореня, який містить package.json
, і запускаєте:
npm install
Оскільки у вас є власне джерело, зрозуміло, що ви хочете його розробити, тому за замовчуванням встановлюються і обидва dependencies
(оскільки, звичайно, потрібно працювати), і devDependency
залежності.
Якщо ви лише кінцевий користувач, який просто хоче встановити пакет для його використання, ви зробите це з будь-якого каталогу:
npm install "$package"
У цьому випадку, ви , як правило , не хочуть залежності розвитку, так що ви просто отримати те , що потрібно використовувати пакет: dependencies
.
Якщо ви дійсно хочете встановити пакети розробки в цьому випадку, ви можете встановити параметр dev
конфігурації true
, можливо, з командного рядка як:
npm install "$package" --dev
Цей параметр false
за замовчуванням, оскільки це набагато рідший випадок.
peerDependitions
(Протестовано до 3.0)
Джерело: https://nodejs.org/en/blog/npm/peer-dependitions/
За допомогою регулярних залежностей ви можете мати кілька версій залежності: вона просто встановлюється всередині node_modules
залежності.
Наприклад, якщо dependency1
і dependency2
обидва залежать від dependency3
різних версій, дерево проекту буде виглядати так:
root/node_modules/
|
+- dependency1/node_modules/
| |
| +- dependency3 v1.0/
|
|
+- dependency2/node_modules/
|
+- dependency3 v2.0/
Однак плагіни - це пакунки, які зазвичай не потребують іншого пакету, який у цьому контексті називається хостом . Замість цього:
- хост вимагає плагіни
- плагіни пропонують стандартний інтерфейс, який хостин хотів знайти
- тільки хост буде викликаний користувачем безпосередньо, тому повинна бути єдина його версія.
Напр., Якщо залежать dependency1
і dependency2
однорангові dependency3
, дерево проекту буде виглядати так:
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
Це трапляється, навіть якщо ви ніколи не згадуєте dependency3
у своєму package.json
файлі.
Я думаю, що це зразок схеми дизайну Інверсія управління .
Прототипним прикладом рівних залежностей є Grunt, хост і його плагіни.
Наприклад, на плагіні Grunt типу https://github.com/gruntjs/grunt-contrib-uglify ви побачите, що:
grunt
є peer-dependency
- єдине
require('grunt')
- під tests/
: воно фактично не використовується програмою.
Тоді, коли користувач буде використовувати плагін, він неявно вимагатиме від цього модуля Gruntfile
додавання grunt.loadNpmTasks('grunt-contrib-uglify')
рядка, але це так, grunt
що користувач буде телефонувати безпосередньо.
Це не працює, якщо для кожного плагіна потрібна інша версія Grunt.
Посібник
Я думаю, що документація відповідає на питання досить добре, можливо, ви не просто знайомі з адміністраторами вузлів / інших пакетів. Я, мабуть, це розумію лише тому, що я знаю трохи про розмножувач Ruby.
Ключовий рядок:
Ці речі будуть встановлені під час встановлення npm-посилання або npm-установки з кореня пакета і ними можна керувати, як і будь-який інший параметр конфігурації npm. Див. Npm-config (7) для отримання додаткової інформації з цієї теми.
А потім під npm-config (7) знайдіть dev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.
optionalDependencies
зараз.