Ошибка "requires a peer of ... but none is installed" в npm при установке пакетов Angular
Что такое peer dependencies и почему возникает ошибка?
Peer dependencies (равноправные зависимости) — это механизм npm, который указывает, что ваш пакет совместим с определённой версией другого пакета, но не включает его в свои зависимости. Вместо этого предполагается, что этот пакет уже установлен в проекте потребителя.
В вашем случае @angular/forms требует, чтобы в проекте были установлены @angular/core и @angular/common той же версии (14.2.0). Это логично: формы Angular не могут работать без самого ядра Angular и общих модулей.
npm выводит предупреждение, потому что эти пакеты отсутствуют в вашем проекте. Ошибка не блокирует установку, но указывает на потенциальную проблему: если вы попытаетесь использовать @angular/forms без @angular/core, приложение просто не запустится.
Почему npm не устанавливает peer dependencies автоматически?
Начиная с npm v7, peer dependencies устанавливаются автоматически. Однако в более старых версиях (npm v3–v6) это не происходит, и вы видите предупреждение. Проверьте версию npm командой:
npm --version
Если у вас версия ниже 7, вам нужно устанавливать их вручную.
Как правильно исправить ситуацию?
Самый надёжный способ — установить все необходимые peer dependencies вручную, следуя рекомендациям из предупреждения. Для вашего случая выполните:
npm install @angular/core@14.2.0 @angular/common@14.2.0
После этого ваш package.json должен выглядеть так:
{
"name": "my-angular-app",
"version": "0.0.1",
"dependencies": {
"@angular/core": "^14.2.0",
"@angular/common": "^14.2.0",
"@angular/forms": "^14.2.0"
}
}
Автоматизация с помощью npm-check-updates
Чтобы упростить процесс, можно использовать утилиту npm-check-updates:
npm install -g npm-check-updates
ncu -u
npm install
Это обновит все зависимости до последних совместимых версий и автоматически установит недостающие peer dependencies.
Проверка всех peer dependencies в проекте
Если вы хотите увидеть все неудовлетворённые peer dependencies в вашем проекте, выполните:
npm list --depth=0
Или используйте специальную команду для их отображения:
npm install --legacy-peer-deps
Флаг --legacy-peer-deps заставляет npm игнорировать несоответствия peer dependencies (не рекомендуется в продакшене, но может помочь при разработке).
Краткий чек-лист для новичков
- Всегда читайте предупреждения npm — они указывают на реальные проблемы.
- Устанавливайте все пакеты Angular одной версии (например, все 14.2.0).
- Для Angular проектов используйте Angular CLI (
ng new), который сам создаёт правильную структуру зависимостей. - Обновите npm до версии 7+ (
npm install -g npm@latest), чтобы peer dependencies устанавливались автоматически.
После выполнения всех шагов проверьте, что ошибка исчезла:
npm install
npm list @angular/core @angular/common @angular/forms
Если всё корректно, вы увидите установленные пакеты без предупреждений.
<<Альтернативный подход: использование npm v7+ и флага --install-peers
Если вы не хотите вручную разбираться с каждой зависимостью, самый простой способ — обновить npm до версии 7 или выше. В этой версии peer dependencies устанавливаются автоматически при выполнении npm install.
Выполните:
npm install -g npm@latest
npm install
После обновления npm сам подтянет все недостающие пакеты. Если по каким-то причинам автоустановка не сработала, используйте флаг --install-peers:
npm install @angular/forms --install-peers
Это явно указывает npm установить все peer dependencies вместе с запрашиваемым пакетом.
Когда этот метод не подходит?
- Если вы работаете в команде и все используют npm v6 — лучше устанавливать вручную, чтобы избежать путаницы.
- Если в проекте есть конфликтующие версии peer dependencies (например, один пакет требует Angular 14, другой — Angular 15).
В остальных случаях обновление npm — это быстрое и эффективное решение для новичков.
Ответов пока нет.
Войдите чтобы оставить ответ