npm: зависимости против devDependencies со связанными зависимостями
Используя поиск, я уже нашел несколько отличных ответов на подобные вопросы, но все же я не уверен, правильно ли я понял.
Из этих ответов я узнал, что dependencies
необходимо запустить приложение, пока devDependencies
требуются только при разработке (например, юнит-тесты).
Но как насчет этого: мое приложение зависит от jQuery, но на этапе сборки (с помощью моего devDependencies
) все упаковано в один файл. В этом случае я должен перечислить JQuery как dependency
или как devDependency
?
Чтобы сделать мою точку зрения более понятной, возьмите такой модуль:
define(['jquery'], function($) {
// use jQuery in this module
})
Позже этот модуль будет скомпилирован в нечто вроде application.build.js
который затем содержит этот модуль и зависимость jQuery.
1 ответ
Поскольку конечный результат один и тот же, здесь, похоже, нет определенного правила, но я нашел пару дискуссий по этому вопросу:
Если вы создаете приложение
https://github.com/webpack/webpack/issues/520
Браузерное приложение, созданное с помощью [insert build tool / bundler], не имеет зависимостей узла времени выполнения, и поэтому все зависимости внешнего интерфейса должны быть перечислены как devDependencies.
dependencies
противdevDependencies
Соглашение об именах исторически проистекает из того, что узел является диспетчером пакетов на стороне сервера (...) Насколько я могу сказать, безвредно перечислять зависимости внешнего интерфейса в разделеdependencies
, но это неправильно.
(...) в качестве общей рекомендации для всех, переместите все в
devDependencies
пока это на самом деле не нужно подdependencies
,
Если вы строите библиотеку:
https://github.com/inuitcss/inuitcss/issues/225
Во многих веб-проектах весь код, передаваемый в браузер, компилируется, нет никаких зависимостей времени выполнения. Это будет означать, что нет
dependencies
, толькоdevDependencies
- все зависимости включены в сборку, выполненную во время разработки.Можно также утверждать, что зависимости необходимы и для разработки, поэтому было бы хорошо перечислить все
dependencies
,
Я думаю, что тот факт, что у нас есть факультативное различие, указывает на разумный способ их использования. Это имеет смысл (для меня), что
dependencies
Обозначение будет представлять "минимально жизнеспособный" код для использования и в качестве индикатора того, что не обязательно для того, чтобы что-то работало.
На мой взгляд, все, что становится частью производственного кода, является
dependency
,
эпилог
Лично я больше согласен с последней цитатой. Это имеет смысл, что dependencies
говорит нам, что код приложения должен работать, и devDependencies
что разработчик должен собрать / развернуть / независимо от приложения / библиотеки.
Одно предостережение заключается в том, что если кто-то npm install
Если ваша библиотека будет использовать пакет в качестве модуля в своем приложении, они будут загружать много dependencies
они на самом деле не нужны.