validate compiler options in multicompiler mode

This commit is contained in:
Ivan Kopeykin 2022-03-02 20:06:07 +03:00
parent bb0fdc9191
commit 076bc4af7f
5 changed files with 76 additions and 0 deletions

View File

@ -11,6 +11,7 @@ const { SyncHook, MultiHook } = require("tapable");
const ConcurrentCompilationError = require("./ConcurrentCompilationError");
const MultiStats = require("./MultiStats");
const MultiWatching = require("./MultiWatching");
const WebpackError = require("./WebpackError");
const ArrayQueue = require("./util/ArrayQueue");
/** @template T @typedef {import("tapable").AsyncSeriesHook<T>} AsyncSeriesHook<T> */
@ -104,6 +105,34 @@ module.exports = class MultiCompiler {
}
});
}
this._validateCompilersOptions();
}
_validateCompilersOptions() {
if (this.compilers.length < 2) return;
const cacheNames = new Set();
const addWarning = (compiler, warning) => {
compiler.hooks.thisCompilation.tap("MultiCompiler", compilation => {
compilation.warnings.push(warning);
});
};
for (const compiler of this.compilers) {
if (compiler.options.cache && "name" in compiler.options.cache) {
const cacheName = compiler.options.cache && compiler.options.cache.name;
if (cacheNames.has(cacheName)) {
addWarning(
compiler,
new WebpackError(
`Compiler cache with name ${JSON.stringify(
cacheName
)} is already defined. Please set unique "cache.name" option.`
)
);
} else {
cacheNames.add(cacheName);
}
}
}
}
get options() {

View File

@ -78,6 +78,17 @@ describe("StatsTestCases", () => {
if (!options.optimization) options.optimization = {};
if (options.optimization.minimize === undefined)
options.optimization.minimize = false;
if (
options.cache &&
options.cache !== true &&
options.cache.type === "filesystem"
) {
options.cache.cacheLocation = path.resolve(
outputBase,
".cache",
testName
);
}
});
const c = webpack(options);
const compilers = c.compilers ? c.compilers : [c];

View File

@ -1620,6 +1620,19 @@ You may need an appropriate loader to handle this file type, currently no loader
webpack x.x.x compiled with 2 errors in X ms"
`;
exports[`StatsTestCases should print correct stats for multicompiler-mode-cache 1`] = `
"1 asset
1 module
webpack x.x.x compiled successfully in X ms
1 asset
1 module
WARNING in Compiler cache with name \\"name1\\" is already defined. Please set unique \\"cache.name\\" option.
webpack x.x.x compiled with 1 warning in X ms"
`;
exports[`StatsTestCases should print correct stats for named-chunk-groups 1`] = `
"Chunk Group main 11.7 KiB = a-main.js
Chunk Group async-a 1.07 KiB = a-52.js 257 bytes a-async-a.js 836 bytes

View File

@ -0,0 +1,23 @@
"use strict";
/** @type {import("../../../").Configuration} */
module.exports = [
{
mode: "production",
entry: "./index",
cache: {
type: "filesystem",
name: "name1"
},
stats: { preset: "minimal" }
},
{
mode: "production",
entry: "./index",
cache: {
type: "filesystem",
name: "name1"
},
stats: { preset: "minimal" }
}
];