Можете ли вы импортировать `devDependency` в свой код? - PullRequest
2 голосов
/ 08 марта 2019

README Mobx DevTool поможет вам установить его как dev dev, а затем импортировать в ваш код.Это кажется мне проблемой, потому что devDependencies, как объяснено этим SO-ответом , используются:

... используются для процесса сборки, инструменты, которые помогают вам управлять тем, какконечный код закончится, сторонние тестовые модули (напр., материал веб-пакета)

Если это правда, то является ли правильным выводом, что вы не должны импортировать devDependency в свой код?

1 Ответ

2 голосов
/ 08 марта 2019

Это зависит от того, как будет использоваться код, который будет импортировать зависимость. Если он будет использоваться только в контексте разработки, то да, это должно быть devDependency, и код может его использовать.

Если код, который его использует, будет использоваться потребителем вашего пакета / модуля / библиотеки, то это прямая зависимость, и ее следует аннотировать как таковую.

Это своего рода способ просмотра намерений исходного файла, который потребляет зависимость. Если я устанавливаю с npm install your-cool-package, я не хочу и не должен устанавливать devDependencies, потому что, скорее всего, я не собираюсь собирать ваш модуль из исходного кода, бенчмаркинга или тестирования. Я просто собираюсь съесть его.

Если мне нужна зависимость для использования вашего модуля, то это не devDependencies, это просто dependencies (или, может быть, peerDependencies).


Задайте себе вопрос: когда я использую ваш модуль, чтобы он функционировал, должна ли быть зависимость для его функционирования? Если это так, это зависимость. Если нет, то это зависимость от разработчика.

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

Звучит так, как будто вы пишете плагин (назовем его cool-plugin ) для модуля ( Mobx ). Я не использую Mobx , но это звучит как инструмент разработки. Поскольку это звучит как крутой плагин необходимо Mobx для того, чтобы что-либо сделать Mobx является зависимостью из cool-plugin , но потребитель мог бы рассмотреть cool-plugin a devDependencies их собственного гипотетического потребительского модуля , потому что он не нуждается в нем в производстве.

Из-за этого вы должны рассмотреть Mobx a dependencies, потому что ваш модуль не имеет смысла без него.


Есть довод, что вы должны считать его peerDependencies, потому что потребительский модуль , вероятно, не хочет, чтобы вы устанавливали собственную версию * 1055. * Mobx , но вместо этого хочет, чтобы вы взаимодействовали с тем, который они уже должны использовать.

...