Как заставить Webpack создавать несколько экспортеров конфигурации последовательно, а не параллельно?

#webpack

Вопрос:

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

 const { merge } = require('webpack-merge');
const bundleProcessor = require("./webpack.bundleProcessor.config.js")
const serviceWorkerConfig = require("./webpack.serviceWorker.config.js")

module.exports = (env, argv) => {
    return [
        merge(bundleProcessor,
            { mode: "development", }
        ),
        merge(serviceWorkerConfig, // requires file emitted from first configuration
            { mode: "development" }
        ),
    ];
};
 

Я попытался добавить module.exports.parallelism = 1; , как в примере, приведенном в документах, но это, похоже, не работает для меня.

Есть ли способ заставить Webpack создавать несколько экспортеров конфигурации последовательно, а не параллельно?

Ответ №1:

Исходя из моего опыта, я сделал то же самое, запустив Webpack последовательно с помощью

  1. аналогично с вашей конфигурацией Webpack, но возвращает дикт, подобный
 {
   a: {configForA}, b: {configForB}
}
 
  1. вызовите webpack дважды, как
 webpack NODE_ENV=a amp;amp; webpack NODE_ENV=b
 

Хотя это не какие-то настройки из Webpack, это сработало. Не уверен, пробовали ли вы это или оно вам подходит.

Комментарии:

1. Это похоже на то, что мы делаем в настоящее время. При первом запуске создается файл JSON со всеми активами, которые мне нужно предварительно кэшировать в service worker, который обрабатывается при втором запуске. Спасибо.

Ответ №2:

parallelism это количество используемых процессоров (для этого вам понадобится однопоточный процессор). Хотя maxConcurrentWorkers это звучит довольно многообещающе, но это доступно только через API NodeJS. Кроме того webpack-chain , это, кажется, близко к тому, о чем вы просите… давайте посмотрим правде в глаза, нельзя объединить один элемент (как показано в примере выше — для сравнения, документы). И если это должно быть слияние, это должна быть объединенная конфигурация, состоящая из конфигурации для этого одного файла, который должен быть объединен с тем serviceWorkerConfig , который зависит от него.

Я думаю, что плагин, который объединяет конфигурации, может даже не соответствовать заданию…. но один модуль должен зависеть от другого. Если определено как library amp; externals , это скорее будет представлять зависимость, которая, по-видимому, существует, но никогда не объявлялась.

Простой скрипт (как предложил @Wenbo) действительно может быть наименьшим усилием… и в промежутках он может также проверять / копировать один файл, о котором идет речь.