предисловие
иногда используетсяnpm
на упаковке обнаружил, что естьbug
, мы знаем, как изменить его, но другие могут не иметь возможности обновлять его какое-то время или из-за наших особых потребностей другие не хотят его изменять. В настоящее время мы можем сделать это только сами. Так как же нам модифицировать чужой исходный код? Во-первых, непосредственно изменитьnode_modules
Файлы внутри не очень, а зависимости пропадут после переустановки. Есть два широко используемых метода:
- Скачай чужой код на локалку, вставь
src
Каталог, импортированный вручную после модификации. -
fork
Чужой код на свой склад, после модификации установить этот плагин со своего склада.
Недостаток этих двух способов в том, что обновлять хлопотно, нам нужно каждый раз вручную обновлять код, и нельзя обновляться синхронно с плагином. Если код, который мы хотим изменить, является лишь небольшим модулем кого-то другого, а большая часть остального кода не перемещается, в настоящее время существует очень спекулятивная операция: использоватьwebpack alias
для покрытия чужого кода.
Роль псевдонима webpack
webpack alias
Обычно используется для настройки псевдонимов пути, чтобы мы могли написать меньше кода пути:
chainWebpack: config => {
config.resolve.alias
.set('@', resolve('src'))
.set('#', resolve('src/views/page1'))
.set('&', resolve('src/views/page2'));
},
То есть,webpack alias
заменит "сокращенный путь", который мы написали, и будетnode_modules
Файлы внутри также действительны. В настоящее время мы можем заменить путь модуля, на который указывает ссылка, в исходном коде других на наш собственный файл.
Конкретные операции заключаются в следующем:
- Найдите модуль, который нужно изменить в чужом исходном коде, скопируйте код в
src
содержание - изменить
bug
, обратите внимание, что другие файлы, на которые он ссылается, должны быть записаны как абсолютные пути - Найдите путь, по которому импортируется этот модуль (Путь, который нам нужно перехватить)
- настроить
webpack alias
Сделайте это на практике
кqiankun
обрамленныйpatchers
Пример модуля:
Путь, на который ссылается файл:./patchers
(путь, который мы хотим перехватить)
Содержимое файла:
скопировать содержимое вsrc/assets/patchers.js
, изменить егоimport
Путь абсолютный и добавляем наш код:
настроитьwebpack alias
(Я используюvue-cli4
, файл конфигурацииvue.config.js
):
const path = require('path');
module.exports = {
chainWebpack: config => {
config.resolve.alias
.set('./patchers', path.resolve(__dirname, 'src/assets/patchers.js'))
}
};
Запускаем код, консоль печатает успешно, указывая, что мы успешно покрыли чужой код, а когда чужой код обновится, мы тоже можем обновить его синхронно, но код этого модуля использует наш кастомный. Также возможно после упаковки.
Дополнение: использоватьpatch-package
модифицировать
По совету копающего друга @Leemagination, используйтеpatch-package
модифицироватьnode_modules
Файлы внутри удобнее
Шаги также очень просты:
- Установить
patch-package
:npm i patch-package --save-dev
- Исправлять
package.json
, новая командаpostinstall
:
"scripts": {
+ "postinstall": "patch-package"
}
- Исправлять
node_modules
код внутри - Выполнение заказа:
npx patch-package qiankun
.
первое использованиеpatch-package
будет сгенерирован в корневом каталоге проектаpatches
папка с измененными файлами в нейdiff
Записывать.
Когда версия пакета обновится, выполните команду:git apply --ignore-whitespace patches/qiankun+2.0.11.patch
Вот и все. вqiankun+2.0.11.patch
это имя файла, который он генерирует.
конец
Хотя этот метод умозрительный и имеет много ограничений, это также очень полезно. Технология нуждается в постоянном разведке. Если есть какие-либо проблемы или ошибки, пожалуйста, укажите их!