Можно ли обнаружить в сценариях ошибки установки pnpm из-за отсутствия одноранговых зависимостей?

Мы используем pnpm в монорепозитории с несколькими разработчиками. Часто люди вносят изменения, которые вызывают проблемы с одноранговыми зависимостями для pnpm (например, отсутствие или конфликт одноранговых зависимостей). Часто эти проблемы остаются незамеченными, за исключением периодического появления этих проблем при запуске pnpm install.

Я хотел бы поместить команду/скрипт в наш конвейер CI, чтобы он прерывался, если кто-то регистрирует изменение, которое вызывает проявление одной из этих проблем с зависимостью от однорангового узла.

Из этого вопроса в репозитории pnpm GitHub я понимаю, почему ошибки одноранговых зависимостей отображаются только иногда и как заставить их отображаться, запустив pnpm install --resolution-only. Теперь я знаю, какую команду запустить.

Однако я не уверен, как определить, действительно ли pnpm install --resolution-only обнаружил какие-либо проблемы в сценарии.

На этой странице в документации pnpm предполагается, что проблемы с одноранговыми зависимостями вызывают появление кода ошибки ERR_PNPM_PEER_DEP_ISSUES, но я не уверен, как это заметить. В таких ситуациях я нигде не вижу этого текста, выводимого на консоль (pnpm печатает « WARN  Обнаружены проблемы с одноранговыми зависимостями» вместе с подробностями о конкретных проблемах).

Я ожидал, что смогу проверить код завершения запуска pnpm install --resolution-only, чтобы определить, удалось ли оно, но кажется, что он всегда возвращает 0 (я пробовал проверить %errorlevel% equ 0 из пакетного файла Windows и $LASTEXITCODE -eq 0 из сценария PowerShell, и в обоих случаях это было ноль, что указывает на успех).

Есть ли лучший способ обнаружить подобную ошибку в сценарии, чем просто анализ вывода текста и сопоставление строк? Или лучший подход к обнаружению/решению этой общей проблемы?

(Кстати, у меня вообще нет установленного pnpm.peerDependencyRules в package.json, поэтому он должен наследовать поведение по умолчанию)

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Форсирование ошибки

Вам необходимо включить строгие одноранговые зависимости . Причина в том, похоже, что эта ошибка выдается только тогда, когда strict-peer-dependencies истинно.

Кажется, это работает, поскольку завершается с помощью 1 и содержит код на выходе:

ERR_PNPM_PEER_DEP_ISSUES  Неудовлетворенные одноранговые зависимости

Вариант первый

Добавьте в свой .npmrc следующее (создайте его, если его не существует):

strict-peer-dependencies=true

Тогда бегите pnpm install --resolution-only.

Вариант второй

Альтернативно, вы можете передать его в командной строке и выполнить один раз без изменения .npmrc:

pnpm install --resolution-only --config.strict-peer-dependencies=true

Фиксация ошибки

Этого уже может быть достаточно, но если вам нужно отличить эту ошибку от других, вы можете сделать это проще, передав репортер ndjson.

Это выводит поток JSON, что упрощает извлечение любого кода ошибки:

pnpm i --resolution-only --config.strict-peer-dependencies=true --reporter ndjson | tail -n1 | jq '.code'

Спасибо! Я не знал о настройке strict-peer-dependencies и не видел ссылки на нее в документации по кодам ошибок. Это отлично работает!

Auth Infant 20.06.2024 04:26

Другие вопросы по теме