Webpack - отдельный пакет для рабочих importScripts - PullRequest
0 голосов
/ 15 мая 2018

Чтобы использовать importScripts для загрузки конкретного рабочего пакета в веб-работнике, мне нужно сказать Webpack, чтобы он помещал весь специфический для Webpack клиентский код в этот рабочий комплект (webpackJsonp, _webpack_require__ и т. д.).

Вот конфигурация входного комплекта:

entry: {
    app: [
        'lodash',
        'jquery',
        'index',
    ],
    worker_bundle: [
        "parlib/atomics-shim.js",
        "parlib/message.js",
        "parlib/master-barrier.js",
        "parlib/worker-barrier.js",
        "parlib/marshaler.js",
        "parlib/worker-par.js"
    ]
}

А вот мой конфиг плагинов:

plugins: [
    new webpack.optimize.CommonsChunkPlugin({
        name: 'app', 
        filename: 'app.js'
    }),
],

Рабочий код:

importScripts(location.origin + "/worker_bundle.js");
new WorkerPar();

Я пытался добавить

new webpack.optimize.CommonsChunkPlugin({
    name: 'worker_bundle', 
    filename: 'worker_bundle.js'
}),

но получил While running in normal mode it's not allowed to use a non-entry chunk (worker_bundle)

Как сказать webpack, что я хочу два полностью независимых самозагружающихся пакета?

1 Ответ

0 голосов
/ 16 мая 2018

Я нашел ответ сам.

Сначала создайте так называемый «манифестный» пакет, который будет содержать сценарии начальной загрузки веб-пакета и сценарии, которые являются общими для пакетов.

Я не нашел способа создания только сценария начальной загрузки и дублирования общих сценариев в независимых пакетах, но в моем случае это не проблема.

plugins: [
    new webpack.optimize.CommonsChunkPlugin({name: "manifest", minChunks:0})
]

Во-вторых, загрузите «manifest» перед загрузкой других пакетов.

<script type="application/javascript" src="manifest.js"></script>
<script type="application/javascript" src="app.js"></script>

и для работника:

importScripts(location.origin + "/manifest.js");
importScripts(location.origin + "/worker_bundle.js");
...