Проверка зависимости 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
?
Ответы
Ответ 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
.