Ссылочный работник относительно файла JavaScript - PullRequest
0 голосов
/ 28 августа 2018

Я использую webpack, чтобы собрать проект, который использует Web Workers. Для этого я использую загрузчик worker-loader.

Я сделал минимальный план , чтобы продемонстрировать свою среду (я также вставлю код ниже для потомков).

Проблема в том, что разрешение рабочего файла не работает должным образом. Если я запускаю index.html (я обслуживаю корневую папку с HTTP-сервером), он, естественно, может разрешить ../dist/TestMain.js, но пытается разрешить TestWorker.js из ./ относительно index.html. Я хотел бы, чтобы он разрешил от ./ относительно TestMain.js.

Я пытался добавить output.publicPath = "./", но это не помогло. Я искал документацию (и документацию worker-loader) на предмет схожих опций, но не нашел ничего, что, как я могу сказать, уместно (я могу ошибаться).

Обычно я бы все использовал resolve.alias, но выходные данные должны быть в состоянии перенаправить в любую папку (основной файл JS и рабочий файл JS останутся вместе в одной папке), на которую ссылается страница HTML .

Я также видел, что могу встроить работника, но я бы хотел этого избежать, так как это приводит к потере работника (может вызвать другие виды проблем со ссылками).

Есть ли варианты, которые мне не хватает, чтобы включить относительные ссылки, или обходной путь, который я пропустил?

Вот структура:

Project
 |- dist
 |   |- TestMain.js
 |   |- TestWorker.js
 |- src
 |   |- workers
 |   |   |- TestWorker.js
 |   |- index.js
 |- test
 |   |- index.html
 |- webpack.config.js

Вот мой webpack.config.js:

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  mode: "development",
  output: {
    filename: "TestMain.js",
    path: path.resolve(__dirname, "dist"),
    library: "MyLib",
    libraryTarget: "umd"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        include: [
          path.resolve(__dirname, "src/workers"),
        ],
        use: {
          loader: "worker-loader",
          options: {
            name: "[name].js"
          }
        }
      }
    ]
  }
};

Я поделюсь другими моими файлами, если хотите, но это действительно работает , если рабочий файл находится в той же папке, что и index.html.

...