Как использовать горячее промежуточное программное обеспечение Webpack / горячую перезагрузку Webpack с перезаписью IIS / относительным базовым URL? - PullRequest
1 голос
/ 24 февраля 2020

Мы разрабатываем приложение, которое использует hapi в качестве веб-сервера и web-hot-middleware для замены горячего модуля.

Сервер приложений работает на http://hostname:8080.

Приложение обычно доступный через http://hostname/my/module/ Чтобы http://hostname/my/module/ обслуживал приложение, работающее под hostname:8080, мы используем перезапись IIS, которая переписывает все с http://hostname/my/module/(...) до http://hostname:8080/(...).

Теперь проблема возникает при разработке с использованием webpack-hot-middleware. Кажется, горячая замена модуля webpack всегда пытается сделать его hmr конечной точкой (я думаю, что веб-сокет для обнаружения / обслуживания изменений) жестко закодирован в /__webpack_hmr который - если root страница http://hostname/my/module/ открыта - преобразуется в http://hostname/__webpack_hmr. Конечно, это не может быть найдено и поэтому возвращает 404, так как IIS, работающий на http://hostname/, ничего не знает о webpack hmr.

Теперь, для разработки, было бы также хорошо получить доступ к приложению, используя его собственный адрес http://hostname:8080/, но затем возникает ошибка CORS:

Доступ к ресурсу в 'http://hostname/__webpack_hmr' из источника 'http://hostname: 8080 'был заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

Так что, хотя я и обращаюсь к приложению с помощью http://hostname:8080 webpack-hmr все еще пытается открыть сокет на http://hostname/__webpack_hmr, который затем дополнительно завершается с ошибкой CORS.

Есть ли возможность сообщить webpack.HotModuleReplacementPlugin, что он должен обслуживать конечную точку __webpack_hmr как относительный путь, поэтому он заканчивается как http://hostname/my/module/__webpack_hmr (который переписывается на http://hostname:8080/__webpack_hmr, который будет правильным адресом)?

Или, если это невозможно, есть ли способ, по крайней мере, заставить его работать, когда доступ к приложению с помощью http://hostname:8080/(...)?

В документах я ничего не нашел. Только в некоторых проблемах с Github упоминается конфигурация Webpack publicPath, но я не вижу, как она мне может помочь.

Обновление Я подошел немного дальше и обнаружил, что настройка webpack-hot-middleware точка входа в конфигурации веб-пакета на "webpack-hot-middleware/client?path=http://hostname/my/module/__webpack_hmr" делает конечную точку __webpack_hmr доступной в правильном месте.

Но теперь возникает следующая проблема: файлы HRM

  • dist.XYZ.hot-update.json
  • distbundle.XYZ.hot-update.js также пытаются найти непосредственно в каталоге root (/dist.XYZ.hot-update.json, /distbundle.XYZ.hot-update.js). Есть ли возможность сделать эти места относительными / задать для них поддиректорию c?

Добавление еще одного перезаписи IIS для переписывания этих путей к чему-то вроде http://localhost:8080/dist.XYZ.hot-update.json делает его работающим, но я бы предпочел решение без необходимости конфигурировать IIS для этого.

...