В итоге я решил эту проблему, потребовав вместо этого функцию конструктора для конфигурации веб-пакета.
Пример:
webpack.config.js
const path = require("path");
const entryPath = path.resolve( __dirname, 'source/scripts/app.js' );
const outputPath = path.resolve( __dirname, 'dist/js' )
const constructConfig = function ( entryPath, outputPath ) {
const config = {
entry: ["@babel/polyfill", entryPath],
output: {
path: outputPath,
filename: "scripts.js"
},
module: {
rules: [
{
test: /\.js$/,
use: "babel-loader",
exclude: /node_modules/
}
]
},
plugins: [],
devtool: 'source-map',
externals: {
jquery: 'jQuery'
}
}
return config
}
module.exports = {
constructor: constructConfig,
entry: entryPath,
output: outputPath
}
Затем я преобразовал конструкторфункции в строку, так как дочерние процессы узла не позволяют передавать функции, только объекты, насколько я могу сказать.
scripts.js
:
let configConstructor = require( webpackConfigDir ).constructor
let entry = require( webpackConfigDir ).entry
let output = require( webpackConfigDir ).output
let processOptions = {
constructor: configConstructor.toString(),
entry: entry,
output: output
}
process.send( processOptions )
В пределахЗапустив дочерний процесс, я преобразовал строку обратно в функцию, которая вызывается после возврата.
build.js
:
const webpack = require("webpack");
const chalk = require('chalk');
async function build(config) {
await webpack( config, (err, stats) => {
if ( stats.hasErrors() ) {
const errors = stats.toJson().errors
errors.forEach( (error, i) => {
console.log( chalk.white.bgRed.bold(`Error #${i + 1}: `) + chalk.white.bgRed(`${error}`) )
})
}
})
}
process.on("message", async options => {
const constructor = new Function( 'return ' + options.constructor )();
const config = await constructor( options.entry, options.output )
await build(config);
});
Это решение сработало для рассматриваемой проблемы, подумал, чтоподелиться в случае, если кто-нибудь сталкивается с подобной проблемой.В этом случае я пытался поделиться зависимостями проекта, но разрешил другую конфигурацию веб-пакета для каждого каталога.