Разработчики JavaScript извлекают выгоду из богатой экосистемы библиотек с открытым исходным кодом. Однако один недостаток программного обеспечения, поддерживаемого добровольцами, - это нерегулярные обновления. Нередко можно найти библиотеку с желаемой функциональностью, но также с хорошо задокументированной ошибкой. Несмотря на - иногда многочисленные - pull-запросы, направленные на устранение ошибки, специалисту по сопровождению может потребоваться много времени, чтобы интегрировать исправление (или, в случае брошенных пакетов, исправление никогда не объединяется).

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

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

Рекомендуется обновлять зависимости (особенно при обновлении патчей), поэтому использование патчей для зависимостей не должно быть причиной для отказа от обновления. К счастью, экосистема JavaScript также предлагает простой в использовании инструмент для управления патчами зависимостей: библиотеку patch-package.

Настройка проста. В большинстве случаев достаточно просто установить пакет и добавить

«Postinstall»: «патч-пакет»

к скриптам в файле package.json.

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

npx patch-package имя-пакета

для зависимостей, которые мы изменили. Это создает файл сравнения для исходной версии пакета и версии для разработчика.

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

Для применения патчей (после обновления зависимостей) запускаем:

патч-пакет npx

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

NPM_CONFIG_PRODUCTION = ложь

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

В целом patch-package - это простой, но удобный инструмент, о котором должны знать все разработчики JavaScript.