webpack- отложенные модули dev-сервера, загруженные с неправильного URL

#webpack #webpack-dev-server

#webpack #webpack-dev-server

Вопрос:

У меня есть приложение для визуализации на стороне сервера (Java), которое я хочу интегрировать с webpack-dev-server для быстрой разработки.

Мое java-приложение работает на порту 8080 .

Я использую следующий скрипт для запуска прослушивания webpack-dev-server 31337 .

 "use strict";
const webpack = require("webpack");
const WebpackDevServer = require("webpack-dev-server");

function startServer() {
    const configFactory = require("../config/webpack.config");
    const config = configFactory("development");
    const compiler = webpack(config);

    const devServer = new WebpackDevServer(compiler, {
        port: 31337,
        public: "localhost:31337",
    });
    devServer.listen(31337);
}

startServer();
  

В моем серверном приложении я изменил все теги скрипта на src=http://localhost:31337/<bundle> . Это отлично работает для основного модуля и модуля времени выполнения.

Но приложение использует сборку системы проектирования с помощью stenciljs. При импорте трафарета, похоже, интенсивно используются отложенные модули / отложенный импорт / разделение кода. Эти фрагменты добавляются в head документ в виде script тегов после начальной загрузки страницы.

Проблема в том, что эти сгенерированные теги скрипта не используются localhost:31337 в качестве хоста, вместо этого они используют относительные пути (без протокола / хоста / порта).

Есть ли способ это исправить? Я уже пытался использовать LimitChunkCountPlugin , но это генерирует ошибку времени выполнения при загрузке страницы.

Любая помощь будет оценена.

Результирующий HTML:

 <base href="/" />
<script
  type="text/javascript"
  src="http://localhost:31337/js/runtime.js"
></script>
<script type="text/javascript" src="http://localhost:31337/js/main.js"></script>
<script charset="utf-8" src="/js/11.js"></script>
<script charset="utf-8" src="/js/22.js"></script>
<script charset="utf-8" src="/js/16.js"></script>
<script charset="utf-8" src="/js/1.js"></script>
<script charset="utf-8" src="/js/5.js"></script>
<script charset="utf-8" src="/js/21.js"></script>
<script charset="utf-8" src="/js/2.js"></script>
<script charset="utf-8" src="/js/18.js"></script>
<script charset="utf-8" src="/js/13.js"></script>
<script charset="utf-8" src="/js/15.js"></script>
<script charset="utf-8" src="/js/8.js"></script>
<script charset="utf-8" src="/js/24.js"></script>
<script charset="utf-8" src="/js/3.js"></script>
  

Ответ №1:

Правильный способ сделать это — установить output.publicPath полный URL-адрес.

Я изменил свой сценарий на следующий, и это, похоже, выполняет свою работу:

 "use strict";
const webpack = require("webpack");
const WebpackDevServer = require("webpack-dev-server");

function startServer() {
    const configFactory = require("../config/webpack.config");
    const config = configFactory("development");
    config.output.publicPath = "http://localhost:31337/";
    const compiler = webpack(config);

    const devServer = new WebpackDevServer(compiler, {
        port: 31337,
        public: "localhost:31337",
        publicPath: "http://localhost:31337/",
    });
    devServer.listen(31337);
}

startServer();