Артефакт исправления исходного кода — patch-package

1. История

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

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

Проблема найдена.Код для изменения электронной подписи находится в пакете зависимостей node_modules.

Как решить эту проблему?

2. Часто используемые методы

1. Сообщите о проблеме для зависимого пакета и подождите, пока другие исправят ее и опубликуют.

2. Отправьте PR на зависимый пакет, исправьте его самостоятельно и дождитесь релиза

3. Метод общего копирования проекта

прямая цитата

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

Публикация Закона о частном казначействе

Подходит для сценариев, в которых один и тот же пакет зависимостей используется в нескольких проектах. Измененный исходный код можно опубликовать в частном хранилище.

4. Измените метод цитирования

Настройте псевдоним веб-пакета , например «путь к исходному файлу»: «путь к измененному файлу» , чтобы ссылка была на окончательный измененный файл, например:

resolve: {  
    alias: {  
        'pdfjs': path.resolve(__dirname, './patched/pdfjs/*'), 
    }
}

Все вышеперечисленные методы имеют недостатки:

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

Последние способы более сложны и приведут к раздутию проекта.Легче забыть, какую часть исходного кода вы модифицировали.К тому же обновление хлопотно.Вам нужно каждый раз вручную обновлять код и не получается обновлять его синхронно с плагин.

Есть ли способ изящно изменить исходный код node_modules?

3. патч-пакет

patch-package позволяет разработчикам программ мгновенно исправлять и сохранять зависимости npm. Идеальное решение для исправления зависимостей.

# fix a bug in one of your dependencies
vim node_modules/some-package/brokenFile.js

# run patch-package to create a .patch file
npx patch-package some-package

# commit the patch file to share the fix with your team
git add patches/some-package+3.14.15.patch
git commit -m "fix brokenFile.js in some-package"

Инструкции:

1.Установка _
npm i patch-package

Если вам не нужно запускать в производство

npm i patch-package --save-dev

Команды установки Yarn, pnpm и docker можно найти на их официальном сайте git.

2. Измените пакет npm.

Измените файлы в папке node_modules, чтобы изменить зависимые пакеты.

3. Генерация патчей

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

4. Добавьте команду автоматического выполнения.

В package.json

 "scripts": {
    +  "postinstall": "patch-package"
 }

В примере этой статьи найдите зависимый пакет pdfjs-dist, который нужно изменить в node_modules, и измените код следующим образом:





 

Для создания исправлений выполните npx patch-package pdfjs-dist. В каталоге файлов будет создана папка patches следующим образом:





 

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

Добавьте следующую самовыполняющуюся команду, которая будет выполняться после установки npm.





 

Что такое файл патча?

По сути, это описание записи различий в git.

Принцип : patch-package будет git сравнивать исходный код текущего node_modules и исходный исходный код и генерировать файл исправления в корневом каталоге проекта.

Как самостоятельно проверить, эффективен ли патч?

Вручную удалите node_modules в проекте и повторно выполните команду npm install, чтобы установить зависимые пакеты. После успешной установки проверьте файлы в ранее измененном пакете зависимостей node_modules, чтобы увидеть, существует ли еще измененный код. Если ранее измененный код все еще существует, это означает, что файл исправления вступил в силу. Если код, который вы изменили ранее, не существует , это означает, что файл исправления не вступил в силу.

4. Преимущества патч-пакета

Предпечатная версия версии

При изменении зависимости вы получаете уведомление красными заглавными буквами о том, что вам необходимо проверить, действительны ли внесенные вами исправления. npx patch-package напрямую сообщит об ошибке **ERROR** Не удалось применить исправление для пакета xxxx по пути . Это приглашение может облегчить поиск проблемы.

экономить место

Нет необходимости копировать исходный код, использование git diff для записи патчей экономит место, безопасно и удобно.

проверяемый

Исправления можно просматривать в рамках обычного процесса проверки.

5. На что следует обратить внимание

◦Непосредственное изменение кода в node_modules не рекомендуется и должно рассматриваться только в экстренных ситуациях.
◦В перспективе все равно необходимо полностью исправлять дефекты сторонних пакетов и постепенно удалять .patch-файлы в проекте.

 

Автор: JD Insurance Чжан Цзе

Источник: Сообщество разработчиков JD Cloud. При перепечатке указывайте источник.



Broadcom объявляет о прекращении существующего обновления версии Deepin-IDE партнерской программы VMware, заменяя старый внешний вид новым. Чжоу Хунъи: уроженец Хунмэна определенно добьется успеха. WAVE SUMMIT приветствует свою десятую сессию, Вэнь Синьиян будет иметь последнее раскрытие! Компания Yakult подтверждает утечку данных 95 G Самая популярная лицензия среди языков программирования в 2023 году «2023 China Open Source Developer Report» официально выпущена Julia 1.10 официально выпущена Fedora 40 планирует унифицировать /usr/bin и /usr/sbin Rust 1.75 .0 выпуск
{{o.name}}
{{м.имя}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10443540
Recomendado
Clasificación