mirror of https://github.com/webpack/webpack.git
				
				
				
			allow to disable some deprecations
add `experiments.backCompat: false` (default in `experiments.futureDefaults`) remove unused `experiments.asset` enable `experiments.topLevelAwait` and `experiments.asyncWebAssembly` by default in `experiments.futureDefaults`
This commit is contained in:
		
							parent
							
								
									95b101fc8e
								
							
						
					
					
						commit
						7afcc5d4ff
					
				| 
						 | 
					@ -2738,14 +2738,14 @@ export interface EntryStaticNormalized {
 | 
				
			||||||
 * Enables/Disables experiments (experimental features with relax SemVer compatibility).
 | 
					 * Enables/Disables experiments (experimental features with relax SemVer compatibility).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export interface ExperimentsCommon {
 | 
					export interface ExperimentsCommon {
 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Allow module type 'asset' to generate assets.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	asset?: boolean;
 | 
					 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Support WebAssembly as asynchronous EcmaScript Module.
 | 
						 * Support WebAssembly as asynchronous EcmaScript Module.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	asyncWebAssembly?: boolean;
 | 
						asyncWebAssembly?: boolean;
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enable backward-compat layer with deprecation warnings for many webpack 4 APIs.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						backCompat?: boolean;
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.
 | 
						 * Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					@ -2755,7 +2755,7 @@ export interface ExperimentsCommon {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	futureDefaults?: boolean;
 | 
						futureDefaults?: boolean;
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enable module and chunk layers.
 | 
						 * Enable module layers.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	layers?: boolean;
 | 
						layers?: boolean;
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,8 +63,9 @@ let debugId = 1000;
 | 
				
			||||||
class Chunk {
 | 
					class Chunk {
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @param {string=} name of chunk being created, is optional (for subclasses)
 | 
						 * @param {string=} name of chunk being created, is optional (for subclasses)
 | 
				
			||||||
 | 
						 * @param {boolean} backCompat enable backward-compatibility
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	constructor(name) {
 | 
						constructor(name, backCompat = true) {
 | 
				
			||||||
		/** @type {number | string | null} */
 | 
							/** @type {number | string | null} */
 | 
				
			||||||
		this.id = null;
 | 
							this.id = null;
 | 
				
			||||||
		/** @type {(number|string)[] | null} */
 | 
							/** @type {(number|string)[] | null} */
 | 
				
			||||||
| 
						 | 
					@ -84,7 +85,7 @@ class Chunk {
 | 
				
			||||||
		/** @type {RuntimeSpec} */
 | 
							/** @type {RuntimeSpec} */
 | 
				
			||||||
		this.runtime = undefined;
 | 
							this.runtime = undefined;
 | 
				
			||||||
		/** @type {Set<string>} */
 | 
							/** @type {Set<string>} */
 | 
				
			||||||
		this.files = new ChunkFilesSet();
 | 
							this.files = backCompat ? new ChunkFilesSet() : new Set();
 | 
				
			||||||
		/** @type {Set<string>} */
 | 
							/** @type {Set<string>} */
 | 
				
			||||||
		this.auxiliaryFiles = new Set();
 | 
							this.auxiliaryFiles = new Set();
 | 
				
			||||||
		/** @type {boolean} */
 | 
							/** @type {boolean} */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -429,6 +429,8 @@ class Compilation {
 | 
				
			||||||
	 * @param {CompilationParams} params the compilation parameters
 | 
						 * @param {CompilationParams} params the compilation parameters
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	constructor(compiler, params) {
 | 
						constructor(compiler, params) {
 | 
				
			||||||
 | 
							this._backCompat = compiler._backCompat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const getNormalModuleLoader = () => deprecatedNormalModuleLoaderHook(this);
 | 
							const getNormalModuleLoader = () => deprecatedNormalModuleLoaderHook(this);
 | 
				
			||||||
		/** @typedef {{ additionalAssets?: true | Function }} ProcessAssetsAdditionalOptions */
 | 
							/** @typedef {{ additionalAssets?: true | Function }} ProcessAssetsAdditionalOptions */
 | 
				
			||||||
		/** @type {AsyncSeriesHook<[CompilationAssets], ProcessAssetsAdditionalOptions>} */
 | 
							/** @type {AsyncSeriesHook<[CompilationAssets], ProcessAssetsAdditionalOptions>} */
 | 
				
			||||||
| 
						 | 
					@ -559,6 +561,7 @@ class Compilation {
 | 
				
			||||||
		 * @returns {FakeHook<Pick<AsyncSeriesHook<T>, "tap" | "tapAsync" | "tapPromise" | "name">>} fake hook which redirects
 | 
							 * @returns {FakeHook<Pick<AsyncSeriesHook<T>, "tap" | "tapAsync" | "tapPromise" | "name">>} fake hook which redirects
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		const createProcessAssetsHook = (name, stage, getArgs, code) => {
 | 
							const createProcessAssetsHook = (name, stage, getArgs, code) => {
 | 
				
			||||||
 | 
								if (!this._backCompat && code) return undefined;
 | 
				
			||||||
			const errorMessage =
 | 
								const errorMessage =
 | 
				
			||||||
				reason => `Can't automatically convert plugin using Compilation.hooks.${name} to Compilation.hooks.processAssets because ${reason}.
 | 
									reason => `Can't automatically convert plugin using Compilation.hooks.${name} to Compilation.hooks.processAssets because ${reason}.
 | 
				
			||||||
BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a single Compilation.hooks.processAssets hook.`;
 | 
					BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a single Compilation.hooks.processAssets hook.`;
 | 
				
			||||||
| 
						 | 
					@ -983,7 +986,6 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
 | 
				
			||||||
		this.asyncEntrypoints = [];
 | 
							this.asyncEntrypoints = [];
 | 
				
			||||||
		/** @type {Set<Chunk>} */
 | 
							/** @type {Set<Chunk>} */
 | 
				
			||||||
		this.chunks = new Set();
 | 
							this.chunks = new Set();
 | 
				
			||||||
		arrayToSetDeprecation(this.chunks, "Compilation.chunks");
 | 
					 | 
				
			||||||
		/** @type {ChunkGroup[]} */
 | 
							/** @type {ChunkGroup[]} */
 | 
				
			||||||
		this.chunkGroups = [];
 | 
							this.chunkGroups = [];
 | 
				
			||||||
		/** @type {Map<string, ChunkGroup>} */
 | 
							/** @type {Map<string, ChunkGroup>} */
 | 
				
			||||||
| 
						 | 
					@ -992,7 +994,10 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
 | 
				
			||||||
		this.namedChunks = new Map();
 | 
							this.namedChunks = new Map();
 | 
				
			||||||
		/** @type {Set<Module>} */
 | 
							/** @type {Set<Module>} */
 | 
				
			||||||
		this.modules = new Set();
 | 
							this.modules = new Set();
 | 
				
			||||||
 | 
							if (this._backCompat) {
 | 
				
			||||||
 | 
								arrayToSetDeprecation(this.chunks, "Compilation.chunks");
 | 
				
			||||||
			arrayToSetDeprecation(this.modules, "Compilation.modules");
 | 
								arrayToSetDeprecation(this.modules, "Compilation.modules");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		/** @private @type {Map<string, Module>} */
 | 
							/** @private @type {Map<string, Module>} */
 | 
				
			||||||
		this._modules = new Map();
 | 
							this._modules = new Map();
 | 
				
			||||||
		this.records = null;
 | 
							this.records = null;
 | 
				
			||||||
| 
						 | 
					@ -1286,6 +1291,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			this._modules.set(identifier, module);
 | 
								this._modules.set(identifier, module);
 | 
				
			||||||
			this.modules.add(module);
 | 
								this.modules.add(module);
 | 
				
			||||||
 | 
								if (this._backCompat)
 | 
				
			||||||
				ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
									ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
				
			||||||
			if (currentProfile !== undefined) {
 | 
								if (currentProfile !== undefined) {
 | 
				
			||||||
				currentProfile.markIntegrationEnd();
 | 
									currentProfile.markIntegrationEnd();
 | 
				
			||||||
| 
						 | 
					@ -1701,6 +1707,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this._modules.set(module.identifier(), module);
 | 
							this._modules.set(module.identifier(), module);
 | 
				
			||||||
		this.modules.add(module);
 | 
							this.modules.add(module);
 | 
				
			||||||
 | 
							if (this._backCompat)
 | 
				
			||||||
			ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
								ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this._handleModuleBuildAndDependencies(
 | 
							this._handleModuleBuildAndDependencies(
 | 
				
			||||||
| 
						 | 
					@ -2777,9 +2784,11 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
 | 
				
			||||||
		);
 | 
							);
 | 
				
			||||||
		this.chunkGraph = chunkGraph;
 | 
							this.chunkGraph = chunkGraph;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this._backCompat) {
 | 
				
			||||||
			for (const module of this.modules) {
 | 
								for (const module of this.modules) {
 | 
				
			||||||
				ChunkGraph.setChunkGraphForModule(module, chunkGraph);
 | 
									ChunkGraph.setChunkGraphForModule(module, chunkGraph);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.hooks.seal.call();
 | 
							this.hooks.seal.call();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3045,14 +3054,16 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
 | 
				
			||||||
									}
 | 
														}
 | 
				
			||||||
									this.hooks.afterProcessAssets.call(this.assets);
 | 
														this.hooks.afterProcessAssets.call(this.assets);
 | 
				
			||||||
									this.logger.timeEnd("process assets");
 | 
														this.logger.timeEnd("process assets");
 | 
				
			||||||
									this.assets = soonFrozenObjectDeprecation(
 | 
														this.assets = this._backCompat
 | 
				
			||||||
 | 
															? soonFrozenObjectDeprecation(
 | 
				
			||||||
												this.assets,
 | 
																	this.assets,
 | 
				
			||||||
												"Compilation.assets",
 | 
																	"Compilation.assets",
 | 
				
			||||||
												"DEP_WEBPACK_COMPILATION_ASSETS",
 | 
																	"DEP_WEBPACK_COMPILATION_ASSETS",
 | 
				
			||||||
												`BREAKING CHANGE: No more changes should happen to Compilation.assets after sealing the Compilation.
 | 
																	`BREAKING CHANGE: No more changes should happen to Compilation.assets after sealing the Compilation.
 | 
				
			||||||
	Do changes to assets earlier, e. g. in Compilation.hooks.processAssets.
 | 
						Do changes to assets earlier, e. g. in Compilation.hooks.processAssets.
 | 
				
			||||||
	Make sure to select an appropriate stage from Compilation.PROCESS_ASSETS_STAGE_*.`
 | 
						Make sure to select an appropriate stage from Compilation.PROCESS_ASSETS_STAGE_*.`
 | 
				
			||||||
									);
 | 
															  )
 | 
				
			||||||
 | 
															: Object.freeze(this.assets);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
									this.summarizeDependencies();
 | 
														this.summarizeDependencies();
 | 
				
			||||||
									if (shouldRecord) {
 | 
														if (shouldRecord) {
 | 
				
			||||||
| 
						 | 
					@ -3453,6 +3464,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	addRuntimeModule(chunk, module, chunkGraph = this.chunkGraph) {
 | 
						addRuntimeModule(chunk, module, chunkGraph = this.chunkGraph) {
 | 
				
			||||||
		// Deprecated ModuleGraph association
 | 
							// Deprecated ModuleGraph association
 | 
				
			||||||
 | 
							if (this._backCompat)
 | 
				
			||||||
			ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
								ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// add it to the list
 | 
							// add it to the list
 | 
				
			||||||
| 
						 | 
					@ -3589,8 +3601,9 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
 | 
				
			||||||
				return chunk;
 | 
									return chunk;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		const chunk = new Chunk(name);
 | 
							const chunk = new Chunk(name, this._backCompat);
 | 
				
			||||||
		this.chunks.add(chunk);
 | 
							this.chunks.add(chunk);
 | 
				
			||||||
 | 
							if (this._backCompat)
 | 
				
			||||||
			ChunkGraph.setChunkGraphForChunk(chunk, this.chunkGraph);
 | 
								ChunkGraph.setChunkGraphForChunk(chunk, this.chunkGraph);
 | 
				
			||||||
		if (name) {
 | 
							if (name) {
 | 
				
			||||||
			this.namedChunks.set(name, chunk);
 | 
								this.namedChunks.set(name, chunk);
 | 
				
			||||||
| 
						 | 
					@ -4715,7 +4728,7 @@ This prevents using hashes of each other and should be avoided.`);
 | 
				
			||||||
					this.outputOptions;
 | 
										this.outputOptions;
 | 
				
			||||||
				const runtimeTemplate = this.runtimeTemplate;
 | 
									const runtimeTemplate = this.runtimeTemplate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				const chunk = new Chunk("build time chunk");
 | 
									const chunk = new Chunk("build time chunk", this._backCompat);
 | 
				
			||||||
				chunk.id = chunk.name;
 | 
									chunk.id = chunk.name;
 | 
				
			||||||
				chunk.ids = [chunk.id];
 | 
									chunk.ids = [chunk.id];
 | 
				
			||||||
				chunk.runtime = runtime;
 | 
									chunk.runtime = runtime;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,8 +119,9 @@ const includesHash = (filename, hashes) => {
 | 
				
			||||||
class Compiler {
 | 
					class Compiler {
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @param {string} context the compilation path
 | 
						 * @param {string} context the compilation path
 | 
				
			||||||
 | 
						 * @param {WebpackOptions} options options
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	constructor(context) {
 | 
						constructor(context, options = /** @type {WebpackOptions} */ ({})) {
 | 
				
			||||||
		this.hooks = Object.freeze({
 | 
							this.hooks = Object.freeze({
 | 
				
			||||||
			/** @type {SyncHook<[]>} */
 | 
								/** @type {SyncHook<[]>} */
 | 
				
			||||||
			initialize: new SyncHook([]),
 | 
								initialize: new SyncHook([]),
 | 
				
			||||||
| 
						 | 
					@ -240,8 +241,7 @@ class Compiler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.infrastructureLogger = undefined;
 | 
							this.infrastructureLogger = undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/** @type {WebpackOptions} */
 | 
							this.options = options;
 | 
				
			||||||
		this.options = /** @type {WebpackOptions} */ ({});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.context = context;
 | 
							this.context = context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -263,6 +263,8 @@ class Compiler {
 | 
				
			||||||
		/** @type {boolean} */
 | 
							/** @type {boolean} */
 | 
				
			||||||
		this.watchMode = false;
 | 
							this.watchMode = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							this._backCompat = this.options.experiments.backCompat !== false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/** @type {Compilation} */
 | 
							/** @type {Compilation} */
 | 
				
			||||||
		this._lastCompilation = undefined;
 | 
							this._lastCompilation = undefined;
 | 
				
			||||||
		/** @type {NormalModuleFactory} */
 | 
							/** @type {NormalModuleFactory} */
 | 
				
			||||||
| 
						 | 
					@ -963,7 +965,13 @@ ${other}`);
 | 
				
			||||||
		outputOptions,
 | 
							outputOptions,
 | 
				
			||||||
		plugins
 | 
							plugins
 | 
				
			||||||
	) {
 | 
						) {
 | 
				
			||||||
		const childCompiler = new Compiler(this.context);
 | 
							const childCompiler = new Compiler(this.context, {
 | 
				
			||||||
 | 
								...this.options,
 | 
				
			||||||
 | 
								output: {
 | 
				
			||||||
 | 
									...this.options.output,
 | 
				
			||||||
 | 
									...outputOptions
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
		childCompiler.name = compilerName;
 | 
							childCompiler.name = compilerName;
 | 
				
			||||||
		childCompiler.outputPath = this.outputPath;
 | 
							childCompiler.outputPath = this.outputPath;
 | 
				
			||||||
		childCompiler.inputFileSystem = this.inputFileSystem;
 | 
							childCompiler.inputFileSystem = this.inputFileSystem;
 | 
				
			||||||
| 
						 | 
					@ -976,6 +984,7 @@ ${other}`);
 | 
				
			||||||
		childCompiler.fsStartTime = this.fsStartTime;
 | 
							childCompiler.fsStartTime = this.fsStartTime;
 | 
				
			||||||
		childCompiler.cache = this.cache;
 | 
							childCompiler.cache = this.cache;
 | 
				
			||||||
		childCompiler.compilerPath = `${this.compilerPath}${compilerName}|${compilerIndex}|`;
 | 
							childCompiler.compilerPath = `${this.compilerPath}${compilerName}|${compilerIndex}|`;
 | 
				
			||||||
 | 
							childCompiler._backCompat = this._backCompat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const relativeCompilerName = makePathsRelative(
 | 
							const relativeCompilerName = makePathsRelative(
 | 
				
			||||||
			this.context,
 | 
								this.context,
 | 
				
			||||||
| 
						 | 
					@ -991,13 +1000,6 @@ ${other}`);
 | 
				
			||||||
			this.records[relativeCompilerName].push((childCompiler.records = {}));
 | 
								this.records[relativeCompilerName].push((childCompiler.records = {}));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		childCompiler.options = {
 | 
					 | 
				
			||||||
			...this.options,
 | 
					 | 
				
			||||||
			output: {
 | 
					 | 
				
			||||||
				...this.options.output,
 | 
					 | 
				
			||||||
				...outputOptions
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		childCompiler.parentCompilation = compilation;
 | 
							childCompiler.parentCompilation = compilation;
 | 
				
			||||||
		childCompiler.root = this.root;
 | 
							childCompiler.root = this.root;
 | 
				
			||||||
		if (Array.isArray(plugins)) {
 | 
							if (Array.isArray(plugins)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,6 +83,7 @@ class HotModuleReplacementPlugin {
 | 
				
			||||||
	 * @returns {void}
 | 
						 * @returns {void}
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	apply(compiler) {
 | 
						apply(compiler) {
 | 
				
			||||||
 | 
							const { _backCompat: backCompat } = compiler;
 | 
				
			||||||
		if (compiler.options.output.strictModuleErrorHandling === undefined)
 | 
							if (compiler.options.output.strictModuleErrorHandling === undefined)
 | 
				
			||||||
			compiler.options.output.strictModuleErrorHandling = true;
 | 
								compiler.options.output.strictModuleErrorHandling = true;
 | 
				
			||||||
		const runtimeRequirements = [RuntimeGlobals.module];
 | 
							const runtimeRequirements = [RuntimeGlobals.module];
 | 
				
			||||||
| 
						 | 
					@ -597,6 +598,7 @@ class HotModuleReplacementPlugin {
 | 
				
			||||||
								(newRuntimeModules && newRuntimeModules.length > 0)
 | 
													(newRuntimeModules && newRuntimeModules.length > 0)
 | 
				
			||||||
							) {
 | 
												) {
 | 
				
			||||||
								const hotUpdateChunk = new HotUpdateChunk();
 | 
													const hotUpdateChunk = new HotUpdateChunk();
 | 
				
			||||||
 | 
													if (backCompat)
 | 
				
			||||||
									ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
 | 
														ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
 | 
				
			||||||
								hotUpdateChunk.id = chunkId;
 | 
													hotUpdateChunk.id = chunkId;
 | 
				
			||||||
								hotUpdateChunk.runtime = newRuntime;
 | 
													hotUpdateChunk.runtime = newRuntime;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -265,15 +265,15 @@ const applyWebpackOptionsDefaults = options => {
 | 
				
			||||||
 * @returns {void}
 | 
					 * @returns {void}
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
const applyExperimentsDefaults = (experiments, { production, development }) => {
 | 
					const applyExperimentsDefaults = (experiments, { production, development }) => {
 | 
				
			||||||
	D(experiments, "topLevelAwait", false);
 | 
						D(experiments, "futureDefaults", false);
 | 
				
			||||||
 | 
						D(experiments, "backCompat", !experiments.futureDefaults);
 | 
				
			||||||
 | 
						D(experiments, "topLevelAwait", experiments.futureDefaults);
 | 
				
			||||||
	D(experiments, "syncWebAssembly", false);
 | 
						D(experiments, "syncWebAssembly", false);
 | 
				
			||||||
	D(experiments, "asyncWebAssembly", false);
 | 
						D(experiments, "asyncWebAssembly", experiments.futureDefaults);
 | 
				
			||||||
	D(experiments, "outputModule", false);
 | 
						D(experiments, "outputModule", false);
 | 
				
			||||||
	D(experiments, "asset", false);
 | 
					 | 
				
			||||||
	D(experiments, "layers", false);
 | 
						D(experiments, "layers", false);
 | 
				
			||||||
	D(experiments, "lazyCompilation", undefined);
 | 
						D(experiments, "lazyCompilation", undefined);
 | 
				
			||||||
	D(experiments, "buildHttp", undefined);
 | 
						D(experiments, "buildHttp", undefined);
 | 
				
			||||||
	D(experiments, "futureDefaults", false);
 | 
					 | 
				
			||||||
	D(experiments, "cacheUnaffected", experiments.futureDefaults);
 | 
						D(experiments, "cacheUnaffected", experiments.futureDefaults);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (typeof experiments.buildHttp === "object") {
 | 
						if (typeof experiments.buildHttp === "object") {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,6 +56,7 @@ class ModuleConcatenationPlugin {
 | 
				
			||||||
	 * @returns {void}
 | 
						 * @returns {void}
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	apply(compiler) {
 | 
						apply(compiler) {
 | 
				
			||||||
 | 
							const { _backCompat: backCompat } = compiler;
 | 
				
			||||||
		compiler.hooks.compilation.tap("ModuleConcatenationPlugin", compilation => {
 | 
							compiler.hooks.compilation.tap("ModuleConcatenationPlugin", compilation => {
 | 
				
			||||||
			const moduleGraph = compilation.moduleGraph;
 | 
								const moduleGraph = compilation.moduleGraph;
 | 
				
			||||||
			const bailoutReasonMap = new Map();
 | 
								const bailoutReasonMap = new Map();
 | 
				
			||||||
| 
						 | 
					@ -389,8 +390,10 @@ class ModuleConcatenationPlugin {
 | 
				
			||||||
							};
 | 
												};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							const integrate = () => {
 | 
												const integrate = () => {
 | 
				
			||||||
 | 
													if (backCompat) {
 | 
				
			||||||
									ChunkGraph.setChunkGraphForModule(newModule, chunkGraph);
 | 
														ChunkGraph.setChunkGraphForModule(newModule, chunkGraph);
 | 
				
			||||||
									ModuleGraph.setModuleGraphForModule(newModule, moduleGraph);
 | 
														ModuleGraph.setModuleGraphForModule(newModule, moduleGraph);
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
								for (const warning of concatConfiguration.getWarningsSorted()) {
 | 
													for (const warning of concatConfiguration.getWarningsSorted()) {
 | 
				
			||||||
									moduleGraph
 | 
														moduleGraph
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -165,8 +165,16 @@ exports.arrayToSetDeprecation = (set, name) => {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.createArrayToSetDeprecationSet = name => {
 | 
					exports.createArrayToSetDeprecationSet = name => {
 | 
				
			||||||
	class SetDeprecatedArray extends Set {}
 | 
						let initialized = false;
 | 
				
			||||||
 | 
						class SetDeprecatedArray extends Set {
 | 
				
			||||||
 | 
							constructor(items) {
 | 
				
			||||||
 | 
								super(items);
 | 
				
			||||||
 | 
								if (!initialized) {
 | 
				
			||||||
 | 
									initialized = true;
 | 
				
			||||||
				exports.arrayToSetDeprecation(SetDeprecatedArray.prototype, name);
 | 
									exports.arrayToSetDeprecation(SetDeprecatedArray.prototype, name);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return SetDeprecatedArray;
 | 
						return SetDeprecatedArray;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,8 +61,7 @@ const createMultiCompiler = (childOptions, options) => {
 | 
				
			||||||
const createCompiler = rawOptions => {
 | 
					const createCompiler = rawOptions => {
 | 
				
			||||||
	const options = getNormalizedWebpackOptions(rawOptions);
 | 
						const options = getNormalizedWebpackOptions(rawOptions);
 | 
				
			||||||
	applyWebpackOptionsBaseDefaults(options);
 | 
						applyWebpackOptionsBaseDefaults(options);
 | 
				
			||||||
	const compiler = new Compiler(options.context);
 | 
						const compiler = new Compiler(options.context, options);
 | 
				
			||||||
	compiler.options = options;
 | 
					 | 
				
			||||||
	new NodeEnvironmentPlugin({
 | 
						new NodeEnvironmentPlugin({
 | 
				
			||||||
		infrastructureLogging: options.infrastructureLogging
 | 
							infrastructureLogging: options.infrastructureLogging
 | 
				
			||||||
	}).apply(compiler);
 | 
						}).apply(compiler);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -681,14 +681,14 @@
 | 
				
			||||||
      "implements": ["#/definitions/ExperimentsCommon"],
 | 
					      "implements": ["#/definitions/ExperimentsCommon"],
 | 
				
			||||||
      "additionalProperties": false,
 | 
					      "additionalProperties": false,
 | 
				
			||||||
      "properties": {
 | 
					      "properties": {
 | 
				
			||||||
        "asset": {
 | 
					 | 
				
			||||||
          "description": "Allow module type 'asset' to generate assets.",
 | 
					 | 
				
			||||||
          "type": "boolean"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "asyncWebAssembly": {
 | 
					        "asyncWebAssembly": {
 | 
				
			||||||
          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
					          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "backCompat": {
 | 
				
			||||||
 | 
					          "description": "Enable backward-compat layer with deprecation warnings for many webpack 4 APIs.",
 | 
				
			||||||
 | 
					          "type": "boolean"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "buildHttp": {
 | 
					        "buildHttp": {
 | 
				
			||||||
          "description": "Build http(s): urls using a lockfile and resource content cache.",
 | 
					          "description": "Build http(s): urls using a lockfile and resource content cache.",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -709,7 +709,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
          "description": "Enable module and chunk layers.",
 | 
					          "description": "Enable module layers.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "lazyCompilation": {
 | 
					        "lazyCompilation": {
 | 
				
			||||||
| 
						 | 
					@ -742,14 +742,14 @@
 | 
				
			||||||
      "type": "object",
 | 
					      "type": "object",
 | 
				
			||||||
      "additionalProperties": false,
 | 
					      "additionalProperties": false,
 | 
				
			||||||
      "properties": {
 | 
					      "properties": {
 | 
				
			||||||
        "asset": {
 | 
					 | 
				
			||||||
          "description": "Allow module type 'asset' to generate assets.",
 | 
					 | 
				
			||||||
          "type": "boolean"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "asyncWebAssembly": {
 | 
					        "asyncWebAssembly": {
 | 
				
			||||||
          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
					          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "backCompat": {
 | 
				
			||||||
 | 
					          "description": "Enable backward-compat layer with deprecation warnings for many webpack 4 APIs.",
 | 
				
			||||||
 | 
					          "type": "boolean"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "cacheUnaffected": {
 | 
					        "cacheUnaffected": {
 | 
				
			||||||
          "description": "Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.",
 | 
					          "description": "Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
| 
						 | 
					@ -759,7 +759,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
          "description": "Enable module and chunk layers.",
 | 
					          "description": "Enable module layers.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "outputModule": {
 | 
					        "outputModule": {
 | 
				
			||||||
| 
						 | 
					@ -782,14 +782,14 @@
 | 
				
			||||||
      "implements": ["#/definitions/ExperimentsCommon"],
 | 
					      "implements": ["#/definitions/ExperimentsCommon"],
 | 
				
			||||||
      "additionalProperties": false,
 | 
					      "additionalProperties": false,
 | 
				
			||||||
      "properties": {
 | 
					      "properties": {
 | 
				
			||||||
        "asset": {
 | 
					 | 
				
			||||||
          "description": "Allow module type 'asset' to generate assets.",
 | 
					 | 
				
			||||||
          "type": "boolean"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "asyncWebAssembly": {
 | 
					        "asyncWebAssembly": {
 | 
				
			||||||
          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
					          "description": "Support WebAssembly as asynchronous EcmaScript Module.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "backCompat": {
 | 
				
			||||||
 | 
					          "description": "Enable backward-compat layer with deprecation warnings for many webpack 4 APIs.",
 | 
				
			||||||
 | 
					          "type": "boolean"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "buildHttp": {
 | 
					        "buildHttp": {
 | 
				
			||||||
          "description": "Build http(s): urls using a lockfile and resource content cache.",
 | 
					          "description": "Build http(s): urls using a lockfile and resource content cache.",
 | 
				
			||||||
          "oneOf": [
 | 
					          "oneOf": [
 | 
				
			||||||
| 
						 | 
					@ -807,7 +807,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
          "description": "Enable module and chunk layers.",
 | 
					          "description": "Enable module layers.",
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "lazyCompilation": {
 | 
					        "lazyCompilation": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,6 +185,7 @@ const describeCases = config => {
 | 
				
			||||||
								experiments: {
 | 
													experiments: {
 | 
				
			||||||
									asyncWebAssembly: true,
 | 
														asyncWebAssembly: true,
 | 
				
			||||||
									topLevelAwait: true,
 | 
														topLevelAwait: true,
 | 
				
			||||||
 | 
														backCompat: false,
 | 
				
			||||||
									...(config.module ? { outputModule: true } : {})
 | 
														...(config.module ? { outputModule: true } : {})
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
							};
 | 
												};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -691,7 +691,7 @@ declare interface CallbackWebpack<T> {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
type Cell<T> = undefined | T;
 | 
					type Cell<T> = undefined | T;
 | 
				
			||||||
declare class Chunk {
 | 
					declare class Chunk {
 | 
				
			||||||
	constructor(name?: string);
 | 
						constructor(name?: string, backCompat?: boolean);
 | 
				
			||||||
	id: null | string | number;
 | 
						id: null | string | number;
 | 
				
			||||||
	ids: null | (string | number)[];
 | 
						ids: null | (string | number)[];
 | 
				
			||||||
	debugId: number;
 | 
						debugId: number;
 | 
				
			||||||
| 
						 | 
					@ -1857,7 +1857,7 @@ declare interface CompilationParams {
 | 
				
			||||||
	contextModuleFactory: ContextModuleFactory;
 | 
						contextModuleFactory: ContextModuleFactory;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
declare class Compiler {
 | 
					declare class Compiler {
 | 
				
			||||||
	constructor(context: string);
 | 
						constructor(context: string, options?: WebpackOptionsNormalized);
 | 
				
			||||||
	hooks: Readonly<{
 | 
						hooks: Readonly<{
 | 
				
			||||||
		initialize: SyncHook<[]>;
 | 
							initialize: SyncHook<[]>;
 | 
				
			||||||
		shouldEmit: SyncBailHook<[Compilation], boolean>;
 | 
							shouldEmit: SyncBailHook<[Compilation], boolean>;
 | 
				
			||||||
| 
						 | 
					@ -3303,16 +3303,16 @@ type Experiments = ExperimentsCommon & ExperimentsExtra;
 | 
				
			||||||
 * Enables/Disables experiments (experimental features with relax SemVer compatibility).
 | 
					 * Enables/Disables experiments (experimental features with relax SemVer compatibility).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
declare interface ExperimentsCommon {
 | 
					declare interface ExperimentsCommon {
 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Allow module type 'asset' to generate assets.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	asset?: boolean;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Support WebAssembly as asynchronous EcmaScript Module.
 | 
						 * Support WebAssembly as asynchronous EcmaScript Module.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	asyncWebAssembly?: boolean;
 | 
						asyncWebAssembly?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enable backward-compat layer with deprecation warnings for many webpack 4 APIs.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						backCompat?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.
 | 
						 * Enable additional in memory caching of modules that are unchanged and reference only unchanged modules.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					@ -3324,7 +3324,7 @@ declare interface ExperimentsCommon {
 | 
				
			||||||
	futureDefaults?: boolean;
 | 
						futureDefaults?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enable module and chunk layers.
 | 
						 * Enable module layers.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	layers?: boolean;
 | 
						layers?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue