У меня есть очень простое приложение, доступное по https://github.com/sbwrege2z/webpack-test.
Вот код для основного приложения:
const UrlPattern = require('url-pattern');
const serviceWorkerRouter = require('service-worker-router');
const router = new serviceWorkerRouter.Router();
// THIS METHOD OF ROUTING DOES NOT CAUSE A PROBLEM:
router.get('/api/*', null);
// CAUSES BUNDLE TO BREAK:
router.get(new UrlPattern(/^\/api\/(.*)$/), null);
console.log('Hello world!');
Когда вы запускаете этот файл с "node src / index.js""Вы получите ожидаемый" Привет, мир! "output.
Когда вы запускаете созданный Webpack пакет с "node dist / bundle.js", вы получаете ошибку:
TypeError: argument must be a regex or a string
Если вы закомментируете строку с помощью "new UrlPattern (...) "комплект будет работать без проблем. Что-то в методе регулярных выражений для определения шаблона url приводит к его поломке.
Кто-нибудь знает, почему это может происходить?
Обновление
Я знаю, в чем причина проблемы. Я просто еще не нашел решение.
Конструктор UrlPattern ожидает строку или RegEx в качестве первого аргумента.
Метод get Router ожидает, что первым аргументом будет строка или URLPattern. Если первый аргумент НЕ является экземпляром UrlPattern, он создает новый UrlPattern с первым аргументом. Я уверен, что предполагается, что это строка или RegEx, но он не проверяет.
Во время минимизации что-то происходит с тем, что маршрутизатор не распознает первый параметр, переданный методу get, как UrlPattern,поэтому он пытается создать новый UrlPattern с первым аргументом (который является UrlPattern). Так как первый аргумент конструктора UrlPattern не является ни строкой, ни RegEx, выдается ошибка.
Возможное решение:
Узнайте, как настроить процесс минимизации WebPack, чтобы UrlPattern распознавалсякак экземпляр UrlPattern.
Есть идеи?