Avatar ·

Ошибка "requires a peer of ... but none is installed" в npm при установке пакетов Angular

Всем привет! Я новичок в TypeScript и Angular, и столкнулся с проблемой при установке зависимостей через npm. У меня есть проект Angular 14, и я хочу добавить библиотеку для работы с формами — `@angular/forms`. Я выполнил команду: ```bash npm install @angular/forms ``` После этого в консоли появилось предупреждение: ``` npm WARN @angular/forms@14.2.0 requires a peer of @angular/core@14.2.0 but none is installed. You must install peer dependencies yourself. npm WARN @angular/forms@14.2.0 requires a peer of @angular/common@14.2.0 but none is installed. You must install peer dependencies yourself. ``` Я не понимаю, что это значит. Вроде бы пакет установился, но npm ругается. Мой файл `package.json` выглядит так: ```json { "name": "my-angular-app", "version": "0.0.1", "dependencies": { "@angular/forms": "^14.2.0" } } ``` Я пробовал запустить `npm install` снова, но ошибка не исчезла. Подскажите, что такое peer dependencies? Почему они не установились автоматически? Нужно ли их устанавливать вручную? И как это правильно сделать? Заранее спасибо за помощь! <<>>

Что такое 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 — это быстрое и эффективное решение для новичков.