Выборочное определение зависимостей

Yarn поддерживает выборочное указание необходимых версий, что позволяет установить пользователем версии пакетов в зависимостях с помощью поля resolutions в файле package.json. Обычно для этого требуется вручную отредактировать файл yarn.lock.

Зачем это делать?

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

  • Зависимость второго уровня в Вашем проекте получила важное обновление системы безопасности, и вы не хотите ждать, пока ваша прямая зависимость выпустит минимальное обновление версии.

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

  • Ваша зависимость определяет широкий спектр версий, а также зависимостей второго уровня, просто есть проблемное обновление, которое вы хотите закрепить на более ранней версии.

Как это использовать?

Добавьте поле resolution в файл package.json и определите своё переопределение версий:

package.json

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "1.1.2"
  }
}

Затем выполните, yarn install.

Советы и трюки

  • При определении недопустимого разрешения (например, с недопустимым именем пакета появится предупреждение)
  • Если версия или диапазон разрешенных версий недопустим, появится предупреждение.
  • Если версия или диапазон разрешённых версий несовместим с исходным диапазоном, появится предупреждение.

Ограничения и предостережения

  • Вложенные пакеты могут работать неправильно.
  • В некоторых случаях может работать неправильно, так как это довольно новая функция.