Исправление зависимости NPM с помощью yarn

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

Вы можете напрямую изменить локальный код зависимости и сделать новую сборку. Это работает, если это критическая ошибка и ее нужно исправить как можно скорее. Но это не лучший вариант, потому что вы потеряете исправление при следующей установке yarn или npm. Кроме того, вы не сможете поделиться исправлением со своей командой.

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

"dependencies": {
  "buggy-package": "your_user/buggy-package#bugfix"
}
Вход в полноэкранный режим Выйти из полноэкранного режима

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

Есть ли у нас лучший вариант? Да, есть. Мы можем использовать команду yarn patch, которая была введена в yarn v2.0.0. Она позволяет мгновенно вносить и поддерживать исправления в зависимостях без необходимости форка пакетов.

Возьмем в качестве примера пакет remix-run. Во время разработки я обнаружил проблему с хранением сессий. Я открыл запрос на исправление, а затем исправил пакет прямо в проекте с помощью команды:

  yarn patch @remix-run/node@npm:1.5.1

➤ YN0000: Package @remix-run/node@npm:1.5.1 got extracted with success!
➤ YN0000: You can now edit the following folder: /private/var/folders/xm/qntd4h_97zn6w88tc95bsvxc0000gp/T/xfs-bfc9a229/user
➤ YN0000: Once you are done run yarn patch-commit -s /private/var/folders/xm/qntd4h_97zn6w88tc95bsvxc0000gp/T/xfs-bfc9a229/user and Yarn will store a patchfile based on your changes.
➤ YN0000: Done in 0s 68ms
Войти в полноэкранный режим Выйти из полноэкранного режима

После извлечения пакета мы можем открыть созданную папку и внести туда наши изменения. Один недостаток заключается в том, что вам придется изменять производственный код, который может быть минифицирован и сложен для отладки. В моем случае это было простое изменение модуля fileStorage.

Следующим шагом будет фиксация патча с помощью команды, отображаемой ранее в консоли

yarn patch-commit -s /private/var/folders/xm/qntd4h_97zn6w88tc95bsvxc0000gp/T/xfs-bfc9a229/user
Войти в полноэкранный режим Выйти из полноэкранного режима

На этом этапе мы должны увидеть следующее изменение в package.json

"resolutions": {
    "@remix-run/node@1.5.1": "patch:@remix-run/node@npm:1.5.1#.yarn/patches/@remix-run-node-npm-1.5.1-51061cf212.patch"
  }
Войти в полноэкранный режим Выйти из полноэкранного режима

и в .yarn/patches вы найдете файл патча.

Преимущества использования этого подхода в том, что патч может быть рассмотрен вашей командой, и его применение не требует дополнительной работы по сравнению с форком. Это следует использовать для критических исправлений, если вам нужна новая функция, я бы предложил использовать форк вместо этого. Также не забудьте открыть проблему и создать запрос на исправление в фактическом пакете.

Оцените статью
Procodings.ru
Добавить комментарий