Мы используем 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
, поэтому он должен наследовать поведение по умолчанию)
Спасибо!
Вам необходимо включить строгие одноранговые зависимости . Причина в том, похоже, что эта ошибка выдается только тогда, когда 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
и не видел ссылки на нее в документации по кодам ошибок. Это отлично работает!