В некоторых файлах package.json вы можете увидеть несколько строк, подобных этой:
{
//...
"peerDependencies": {
"libraryName": "1.x"
}
}Возможно, вы уже видели зависимости и Зависимости от разработчиков , но не Зависимости от сверстников .
зависимости – это пакеты, от которых зависит ваш проект.
devDependencies – это пакеты, которые необходимы на этапе разработки. Скажем, фреймворк для тестирования, такой как Jest или другие утилиты, такие как Babel или ESLint .
В обоих случаях при установке пакета его зависимости и зависимости от разработчиков автоматически устанавливаются npm.
Зависимости от сверстников разные. Они не устанавливаются автоматически.
Когда зависимость указана в пакете как одноранговая зависимость, она не устанавливается автоматически . Вместо этого код, включающий пакет, должен включать его в качестве своей зависимости.
npm предупредит вас, если вы запустите установку npm и он не находит этой зависимости.
Пример: допустим, пакет a включает зависимость б :
a/пакет.json
{
//...
"dependencies": {
"b": "1.x"
}
}Пакет b в свою очередь хочет пакет c в качестве одноранговой зависимости:
б/пакет.json
{
//...
"peerDependencies": {
"c": "1.x"
}
}Поэтому в пакете A мы должны добавить c в качестве зависимости, иначе при установке пакета b npm выдаст вам предупреждение (и код, скорее всего, завершится ошибкой во время выполнения):
a/пакет.json
{
//...
"dependencies": {
"b": "1.x",
"c": "1.x"
}
}Версии должны быть совместимы, поэтому, если одноранговая зависимость указана как 2.x , вы не можете установить 1.x или другую версию. Все это следует семантическое управление версиями .
Оригинал: “https://flaviocopes.com/npm-peer-dependencies/”