Подтвердить что ты не робот

Проверка зависимости npm от npm

$ npm install
[email protected] /Users/antpaw/my_module
├── [email protected] 
└── UNMET PEER DEPENDENCY [email protected]^2.74.0

npm WARN [email protected] requires a peer of [email protected]^2.74.0 but none was installed.

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

Как я могу сделать npm install exit с 1, если одноранговая зависимость неудовлетворена или есть что-то вроде команды npm do-i-have-everything-i-need-installed, которая выйдет с помощью 1?

4b9b3361

Ответ 1

Похоже, я нашел способ выйти с 1, после/раньше (я думаю, что порядок не имеет значения), выполняющего общий npm install Мне нужно запустить npm install my_module, который выйдет с 1. Это означает, что я могу определить список модулей, в которых я хочу убедиться, что они имеют именно то, что им нужно (определенное в peerDependencies) в моем CI script, не очень, но это лучше, чем ничего.

Итак, npm install не ломается, независимо от того, какую зависимость бессмысленна в вашем package.json. npm install module_name сломается, если у вас есть ерунда в вашем package.json.

Ответ 2

Скорее всего, вы используете npm @3 (версия 3).

Как указано в документации, npm версии 1 и 2 используются для установки peerDependencies в большинстве случаев. Версия Npm версии 3 изменяет это поведение и больше не устанавливает peerDependencies, но вместо этого выдает предупреждение, когда peerDependencies не установлен.

npm версии 1 и 2 будут автоматически устанавливать peerDependencies, если они явно не зависят от более высоких в дереве зависимостей. В следующей крупной версии npm (npm @3) это больше не будет. Вы получите предупреждение о том, что peerDependency не установлена.

Причины изменений были в основном для избежания адданий зависимостей при использовании peerDependencies или большей части времени peerDependencies, используемого неправильно. Существует ряд проблем в npm Github относительно peerDependencies как this один, объясняющий некоторые проблемы, и что привело к решению не устанавливать peerDependencies больше.

Если ваше приложение выходит из строя, если request не установлен, вы в основном требуете его. На данный момент, в среде npm, dependencies являются пакетами, которые вы require(), devDependencies являются пакетами require() только для разработки, тестов и т.д.

peerDependencies изначально были предназначены для решения проблем с пакетами, которые в основном были "плагинами" для других фреймворков или библиотек, предназначенных для использования с другим пакетом "хост", даже если они не используют непосредственно или требуют "хоста", пакет.

Например, плагины Grunt предназначены для использования с Grunt, но никогда require('grunt');. Добавление grunt в качестве dependencies приведет к новой загруженной копии пакета, который никогда не будет использоваться. Даже если некоторые плагины имеют прямую зависимость от пакета "host" и указывают пакет "host" в dependencies, что приведет к нескольким копиям пакета "host".

A peerDependencies - это способ сказать, что пакет работает при подключении к версии пакета "host", поэтому, если вы устанавливаете этот пакет, вы также должны установить этот другой пакет вручную.

В этом поведении, которое вы сейчас используете, вы устанавливаете приложение, перечисляя request как peerDependencies, поэтому вы должны установить его для его работы и удалить предупреждение, иначе вы будете нужно перейти к классическому dependencies.