Я пытаюсь написать плагин Webpack, который находит и полностью удаляет зависимости (все, что импортировано с require
или import
), которые следуют определенному шаблону.
Отказ от ответственности, я знаю, что есть IgnorePlugin
но есть две причины, по которым я не использую это:
- Я не просто удаляю импорт, я запоминаю то, что я удалил, и создам отдельный пакет с этими зависимости
- Что еще более важно, я попытался клонировать этот плагин и запомнить то, что я удалил, но это приводит к ошибкам. Позвольте мне объяснить
Если я посмотрю на исходный код IgnorePlugin
, он удалит их, вернув null в хуках beforeResolve
. Но это, похоже, не означает, что Webpack действительно игнорирует его, а не возвращает нулевую ссылку sh. Потому что я работаю внутри Next. js, и это приводит к ошибке, когда Next не может найти ссылки на то, что я удалил.
Итак, это мой код:
class NextCriticalWebpackPlugin {
pluginName = this.constructor.name;
requests = [];
apply(compiler) {
compiler.hooks.normalModuleFactory.tap(this.pluginName, factory => {
factory.hooks.beforeResolve.tap(this.pluginName, result => this.checkIgnore(result));
});
}
checkIgnore(result) {
if (result && result.request && result.request.startsWith('next-critical/loader')) {
this.requests.push(result.request);
return null;
}
return result;
}
}
module.exports = NextCriticalWebpackPlugin;
Если я запускаю Webpack, все кажется нормальным, но когда я запускаю свою сборку, он выдает ошибки, что не может найти модули, которые я удалил:
Cannot find module 'next-critical/loader!/Users/luke/Arbeit/Stroeer/Projekte/paper/apps/web/src/critrical/ads.ts'
Поэтому мне интересно, как я могу сказать Webpack удалить зависимости и импортировать их из пакета.