Ошибка при запуске приложения Nodejs, связанного с Webpack - PullRequest
0 голосов
/ 31 октября 2019

У меня есть очень простое приложение, доступное по 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.

Есть идеи?

1 Ответ

0 голосов
/ 01 ноября 2019

Изменение импорта устраняет проблему:

const UrlPattern = require('service-worker-router').UrlPattern;

Никаких изменений в конфигурации Webpack не требуется.

...