mirror of https://github.com/webpack/webpack.git
				
				
				
			upgrade tapable for Compilation
This commit is contained in:
		
							parent
							
								
									3f453a4f3c
								
							
						
					
					
						commit
						7787b4ad13
					
				|  | @ -6,7 +6,11 @@ | |||
| 
 | ||||
| const asyncLib = require("async"); | ||||
| const util = require("util"); | ||||
| const Tapable = require("tapable-old"); | ||||
| const Tapable = require("tapable").Tapable; | ||||
| const SyncHook = require("tapable").SyncHook; | ||||
| const SyncBailHook = require("tapable").SyncBailHook; | ||||
| const SyncWaterfallHook = require("tapable").SyncWaterfallHook; | ||||
| const AsyncSeriesHook = require("tapable").AsyncSeriesHook; | ||||
| const EntryModuleNotFoundError = require("./EntryModuleNotFoundError"); | ||||
| const ModuleNotFoundError = require("./ModuleNotFoundError"); | ||||
| const ModuleDependencyWarning = require("./ModuleDependencyWarning"); | ||||
|  | @ -58,6 +62,111 @@ function addAllToSet(set, otherSet) { | |||
| class Compilation extends Tapable { | ||||
| 	constructor(compiler) { | ||||
| 		super(); | ||||
| 		this.hooks = { | ||||
| 			buildModule: new SyncHook(["module"]), | ||||
| 			failedModule: new SyncHook(["module", "error"]), | ||||
| 			succeedModule: new SyncHook(["module"]), | ||||
| 
 | ||||
| 			finishModules: new SyncHook(["modules"]), | ||||
| 
 | ||||
| 			unseal: new SyncHook([]), | ||||
| 			seal: new SyncHook([]), | ||||
| 
 | ||||
| 			optimizeDependenciesBasic: new SyncBailHook(["modules"]), | ||||
| 			optimizeDependencies: new SyncBailHook(["modules"]), | ||||
| 			optimizeDependenciesAdvanced: new SyncBailHook(["modules"]), | ||||
| 			afterOptimizeDependencies: new SyncHook(["modules"]), | ||||
| 
 | ||||
| 			optimize: new SyncHook([]), | ||||
| 
 | ||||
| 			optimizeModulesBasic: new SyncBailHook(["modules"]), | ||||
| 			optimizeModules: new SyncBailHook(["modules"]), | ||||
| 			optimizeModulesAdvanced: new SyncBailHook(["modules"]), | ||||
| 			afterOptimizeModules: new SyncHook(["modules"]), | ||||
| 
 | ||||
| 			optimizeChunksBasic: new SyncBailHook(["chunks"]), | ||||
| 			optimizeChunks: new SyncBailHook(["chunks"]), | ||||
| 			optimizeChunksAdvanced: new SyncBailHook(["chunks"]), | ||||
| 			afterOptimizeChunks: new SyncHook(["chunks"]), | ||||
| 
 | ||||
| 			optimizeTree: new AsyncSeriesHook(["chunks", "modules"]), | ||||
| 			afterOptimizeTree: new SyncHook(["chunks", "modules"]), | ||||
| 
 | ||||
| 			optimizeChunkModulesBasic: new SyncBailHook(["chunks", "modules"]), | ||||
| 			optimizeChunkModules: new SyncBailHook(["chunks", "modules"]), | ||||
| 			optimizeChunkModulesAdvanced: new SyncBailHook(["chunks", "modules"]), | ||||
| 			afterOptimizeChunkModules: new SyncHook(["chunks", "modules"]), | ||||
| 			shouldRecord: new SyncBailHook([]), | ||||
| 
 | ||||
| 			reviveModules: new SyncHook(["modules", "records"]), | ||||
| 			optimizeModuleOrder: new SyncHook(["modules"]), | ||||
| 			advancedOptimizeModuleOrder: new SyncHook(["modules"]), | ||||
| 			beforeModuleIds: new SyncHook(["modules"]), | ||||
| 			moduleIds: new SyncHook(["modules"]), | ||||
| 			optimizeModuleIds: new SyncHook(["modules"]), | ||||
| 			afterOptimizeModuleIds: new SyncHook(["modules"]), | ||||
| 
 | ||||
| 			reviveChunks: new SyncHook(["chunks", "records"]), | ||||
| 			optimizeChunkOrder: new SyncHook(["chunks"]), | ||||
| 			beforeChunkIds: new SyncHook(["chunks"]), | ||||
| 			optimizeChunkIds: new SyncHook(["chunks"]), | ||||
| 			afterOptimizeChunkIds: new SyncHook(["chunks"]), | ||||
| 
 | ||||
| 			recordModules: new SyncHook(["modules", "records"]), | ||||
| 			recordChunks: new SyncHook(["chunks", "records"]), | ||||
| 
 | ||||
| 			beforeHash: new SyncHook([]), | ||||
| 			afterHash: new SyncHook([]), | ||||
| 
 | ||||
| 			recordHash: new SyncHook(["records"]), | ||||
| 
 | ||||
| 			record: new SyncHook(["compilation", "records"]), | ||||
| 
 | ||||
| 			beforeModuleAssets: new SyncHook([]), | ||||
| 			shouldGenerateChunkAssets: new SyncBailHook([]), | ||||
| 			beforeChunkAssets: new SyncHook([]), | ||||
| 			additionalChunkAssets: new SyncHook(["chunks"]), | ||||
| 
 | ||||
| 			records: new SyncHook(["compilation", "records"]), | ||||
| 
 | ||||
| 			additionalAssets: new AsyncSeriesHook([]), | ||||
| 			optimizeChunkAssets: new AsyncSeriesHook(["chunks"]), | ||||
| 			afterOptimizeChunkAssets: new SyncHook(["chunks"]), | ||||
| 			optimizeAssets: new AsyncSeriesHook(["assets"]), | ||||
| 			afterOptimizeAssets: new SyncHook(["assets"]), | ||||
| 
 | ||||
| 			needAdditionalSeal: new SyncBailHook([]), | ||||
| 			afterSeal: new AsyncSeriesHook([]), | ||||
| 
 | ||||
| 			chunkHash: new SyncHook(["chunk", "chunkHash"]), | ||||
| 			moduleAsset: new SyncHook(["module", "filename"]), | ||||
| 			chunkAsset: new SyncHook(["chunk", "filename"]), | ||||
| 
 | ||||
| 			assetPath: new SyncWaterfallHook(["filename", "data"]), // TODO MainTemplate
 | ||||
| 
 | ||||
| 			needAdditionalPass: new SyncBailHook([]), | ||||
| 			childCompiler: new SyncHook(["childCompiler", "compilerName", "compilerIndex"]), | ||||
| 
 | ||||
| 			// TODO the following hooks are weirdly located here
 | ||||
| 			// TODO move them for webpack 5
 | ||||
| 			normalModuleLoader: new SyncHook(["loaderContext", "module"]), | ||||
| 
 | ||||
| 			optimizeExtractedChunksBasic: new SyncBailHook(["chunks"]), | ||||
| 			optimizeExtractedChunks: new SyncBailHook(["chunks"]), | ||||
| 			optimizeExtractedChunksAdvanced: new SyncBailHook(["chunks"]), | ||||
| 			afterOptimizeExtractedChunks: new SyncHook(["chunks"]), | ||||
| 		}; | ||||
| 		this._pluginCompat.tap("Compilation", options => { | ||||
| 			switch(options.name) { | ||||
| 				case "optimize-tree": | ||||
| 				case "additional-assets": | ||||
| 				case "optimize-chunk-assets": | ||||
| 				case "optimize-assets": | ||||
| 				case "after-seal": | ||||
| 					options.async = true; | ||||
| 					break; | ||||
| 			} | ||||
| 		}); | ||||
| 		this.compiler = compiler; | ||||
| 		this.resolverFactory = compiler.resolverFactory; | ||||
| 		this.inputFileSystem = compiler.inputFileSystem; | ||||
|  | @ -163,7 +272,7 @@ class Compilation extends Tapable { | |||
| 	} | ||||
| 
 | ||||
| 	buildModule(module, optional, origin, dependencies, thisCallback) { | ||||
| 		this.applyPlugins1("build-module", module); | ||||
| 		this.hooks.buildModule.call(module); | ||||
| 		let callbackList = this._buildingModules.get(module); | ||||
| 		if(callbackList) { | ||||
| 			callbackList.push(thisCallback); | ||||
|  | @ -197,10 +306,10 @@ class Compilation extends Tapable { | |||
| 			} | ||||
| 			module.dependencies.sort(Dependency.compare); | ||||
| 			if(error) { | ||||
| 				this.applyPlugins2("failed-module", module, error); | ||||
| 				this.hooks.failedModule.call(module, error); | ||||
| 				return callback(error); | ||||
| 			} | ||||
| 			this.applyPlugins1("succeed-module", module); | ||||
| 			this.hooks.succeedModule.call(module); | ||||
| 			return callback(); | ||||
| 		}); | ||||
| 	} | ||||
|  | @ -601,7 +710,7 @@ class Compilation extends Tapable { | |||
| 
 | ||||
| 	finish() { | ||||
| 		const modules = this.modules; | ||||
| 		this.applyPlugins1("finish-modules", modules); | ||||
| 		this.hooks.finishModules.call(modules); | ||||
| 
 | ||||
| 		for(let index = 0; index < modules.length; index++) { | ||||
| 			const module = modules[index]; | ||||
|  | @ -610,7 +719,7 @@ class Compilation extends Tapable { | |||
| 	} | ||||
| 
 | ||||
| 	unseal() { | ||||
| 		this.applyPlugins0("unseal"); | ||||
| 		this.hooks.unseal.call(); | ||||
| 		this.chunks.length = 0; | ||||
| 		this.namedChunks = {}; | ||||
| 		this.additionalChunkAssets.length = 0; | ||||
|  | @ -619,12 +728,12 @@ class Compilation extends Tapable { | |||
| 	} | ||||
| 
 | ||||
| 	seal(callback) { | ||||
| 		this.applyPlugins0("seal"); | ||||
| 		this.hooks.seal.call(); | ||||
| 
 | ||||
| 		while(this.applyPluginsBailResult1("optimize-dependencies-basic", this.modules) || | ||||
| 			this.applyPluginsBailResult1("optimize-dependencies", this.modules) || | ||||
| 			this.applyPluginsBailResult1("optimize-dependencies-advanced", this.modules)) { /* empty */ } | ||||
| 		this.applyPlugins1("after-optimize-dependencies", this.modules); | ||||
| 		while(this.hooks.optimizeDependenciesBasic.call(this.modules) || | ||||
| 			this.hooks.optimizeDependencies.call(this.modules) || | ||||
| 			this.hooks.optimizeDependenciesAdvanced.call(this.modules)) { /* empty */ } | ||||
| 		this.hooks.afterOptimizeDependencies.call(this.modules); | ||||
| 
 | ||||
| 		this.nextFreeModuleIndex = 0; | ||||
| 		this.nextFreeModuleIndex2 = 0; | ||||
|  | @ -642,94 +751,94 @@ class Compilation extends Tapable { | |||
| 		}); | ||||
| 		this.processDependenciesBlocksForChunks(this.chunks.slice()); | ||||
| 		this.sortModules(this.modules); | ||||
| 		this.applyPlugins0("optimize"); | ||||
| 		this.hooks.optimize.call(); | ||||
| 
 | ||||
| 		while(this.applyPluginsBailResult1("optimize-modules-basic", this.modules) || | ||||
| 			this.applyPluginsBailResult1("optimize-modules", this.modules) || | ||||
| 			this.applyPluginsBailResult1("optimize-modules-advanced", this.modules)) { /* empty */ } | ||||
| 		this.applyPlugins1("after-optimize-modules", this.modules); | ||||
| 		while(this.hooks.optimizeModulesBasic.call(this.modules) || | ||||
| 			this.hooks.optimizeModules.call(this.modules) || | ||||
| 			this.hooks.optimizeModulesAdvanced.call(this.modules)) { /* empty */ } | ||||
| 		this.hooks.afterOptimizeModules.call(this.modules); | ||||
| 
 | ||||
| 		while(this.applyPluginsBailResult1("optimize-chunks-basic", this.chunks) || | ||||
| 			this.applyPluginsBailResult1("optimize-chunks", this.chunks) || | ||||
| 			this.applyPluginsBailResult1("optimize-chunks-advanced", this.chunks)) { /* empty */ } | ||||
| 		this.applyPlugins1("after-optimize-chunks", this.chunks); | ||||
| 		while(this.hooks.optimizeChunksBasic.call(this.chunks) || | ||||
| 			this.hooks.optimizeChunks.call(this.chunks) || | ||||
| 			this.hooks.optimizeChunksAdvanced.call(this.chunks)) { /* empty */ } | ||||
| 		this.hooks.afterOptimizeChunks.call(this.chunks); | ||||
| 
 | ||||
| 		this.applyPluginsAsyncSeries("optimize-tree", this.chunks, this.modules, err => { | ||||
| 		this.hooks.optimizeTree.callAsync(this.chunks, this.modules, err => { | ||||
| 			if(err) { | ||||
| 				return callback(err); | ||||
| 			} | ||||
| 
 | ||||
| 			this.applyPlugins2("after-optimize-tree", this.chunks, this.modules); | ||||
| 			this.hooks.afterOptimizeTree.call(this.chunks, this.modules); | ||||
| 
 | ||||
| 			while(this.applyPluginsBailResult("optimize-chunk-modules-basic", this.chunks, this.modules) || | ||||
| 				this.applyPluginsBailResult("optimize-chunk-modules", this.chunks, this.modules) || | ||||
| 				this.applyPluginsBailResult("optimize-chunk-modules-advanced", this.chunks, this.modules)) { /* empty */ } | ||||
| 			this.applyPlugins2("after-optimize-chunk-modules", this.chunks, this.modules); | ||||
| 			while(this.hooks.optimizeChunkModulesBasic.call(this.chunks, this.modules) || | ||||
| 				this.hooks.optimizeChunkModules.call(this.chunks, this.modules) || | ||||
| 				this.hooks.optimizeChunkModulesAdvanced.call(this.chunks, this.modules)) { /* empty */ } | ||||
| 			this.hooks.afterOptimizeChunkModules.call(this.chunks, this.modules); | ||||
| 
 | ||||
| 			const shouldRecord = this.applyPluginsBailResult("should-record") !== false; | ||||
| 			const shouldRecord = this.hooks.shouldRecord.call() !== false; | ||||
| 
 | ||||
| 			this.applyPlugins2("revive-modules", this.modules, this.records); | ||||
| 			this.applyPlugins1("optimize-module-order", this.modules); | ||||
| 			this.applyPlugins1("advanced-optimize-module-order", this.modules); | ||||
| 			this.applyPlugins1("before-module-ids", this.modules); | ||||
| 			this.applyPlugins1("module-ids", this.modules); | ||||
| 			this.hooks.reviveModules.call(this.modules, this.records); | ||||
| 			this.hooks.optimizeModuleOrder.call(this.modules); | ||||
| 			this.hooks.advancedOptimizeModuleOrder.call(this.modules); | ||||
| 			this.hooks.beforeModuleIds.call(this.modules); | ||||
| 			this.hooks.moduleIds.call(this.modules); | ||||
| 			this.applyModuleIds(); | ||||
| 			this.applyPlugins1("optimize-module-ids", this.modules); | ||||
| 			this.applyPlugins1("after-optimize-module-ids", this.modules); | ||||
| 			this.hooks.optimizeModuleIds.call(this.modules); | ||||
| 			this.hooks.afterOptimizeModuleIds.call(this.modules); | ||||
| 
 | ||||
| 			this.sortItemsWithModuleIds(); | ||||
| 
 | ||||
| 			this.applyPlugins2("revive-chunks", this.chunks, this.records); | ||||
| 			this.applyPlugins1("optimize-chunk-order", this.chunks); | ||||
| 			this.applyPlugins1("before-chunk-ids", this.chunks); | ||||
| 			this.hooks.reviveChunks.call(this.chunks, this.records); | ||||
| 			this.hooks.optimizeChunkOrder.call(this.chunks); | ||||
| 			this.hooks.beforeChunkIds.call(this.chunks); | ||||
| 			this.applyChunkIds(); | ||||
| 			this.applyPlugins1("optimize-chunk-ids", this.chunks); | ||||
| 			this.applyPlugins1("after-optimize-chunk-ids", this.chunks); | ||||
| 			this.hooks.optimizeChunkIds.call(this.chunks); | ||||
| 			this.hooks.afterOptimizeChunkIds.call(this.chunks); | ||||
| 
 | ||||
| 			this.sortItemsWithChunkIds(); | ||||
| 
 | ||||
| 			if(shouldRecord) | ||||
| 				this.applyPlugins2("record-modules", this.modules, this.records); | ||||
| 				this.hooks.recordModules.call(this.modules, this.records); | ||||
| 			if(shouldRecord) | ||||
| 				this.applyPlugins2("record-chunks", this.chunks, this.records); | ||||
| 				this.hooks.recordChunks.call(this.chunks, this.records); | ||||
| 
 | ||||
| 			this.applyPlugins0("before-hash"); | ||||
| 			this.hooks.beforeHash.call(); | ||||
| 			this.createHash(); | ||||
| 			this.applyPlugins0("after-hash"); | ||||
| 			this.hooks.afterHash.call(); | ||||
| 
 | ||||
| 			if(shouldRecord) | ||||
| 				this.applyPlugins1("record-hash", this.records); | ||||
| 				this.hooks.recordHash.call(this.records); | ||||
| 
 | ||||
| 			this.applyPlugins0("before-module-assets"); | ||||
| 			this.hooks.beforeModuleAssets.call(); | ||||
| 			this.createModuleAssets(); | ||||
| 			if(this.applyPluginsBailResult("should-generate-chunk-assets") !== false) { | ||||
| 				this.applyPlugins0("before-chunk-assets"); | ||||
| 			if(this.hooks.shouldGenerateChunkAssets.call() !== false) { | ||||
| 				this.hooks.beforeChunkAssets.call(); | ||||
| 				this.createChunkAssets(); | ||||
| 			} | ||||
| 			this.applyPlugins1("additional-chunk-assets", this.chunks); | ||||
| 			this.hooks.additionalChunkAssets.call(this.chunks); | ||||
| 			this.summarizeDependencies(); | ||||
| 			if(shouldRecord) | ||||
| 				this.applyPlugins2("record", this, this.records); | ||||
| 				this.hooks.record.call(this, this.records); | ||||
| 
 | ||||
| 			this.applyPluginsAsync("additional-assets", err => { | ||||
| 			this.hooks.additionalAssets.callAsync(err => { | ||||
| 				if(err) { | ||||
| 					return callback(err); | ||||
| 				} | ||||
| 				this.applyPluginsAsync("optimize-chunk-assets", this.chunks, err => { | ||||
| 				this.hooks.optimizeChunkAssets.callAsync(this.chunks, err => { | ||||
| 					if(err) { | ||||
| 						return callback(err); | ||||
| 					} | ||||
| 					this.applyPlugins1("after-optimize-chunk-assets", this.chunks); | ||||
| 					this.applyPluginsAsync("optimize-assets", this.assets, err => { | ||||
| 					this.hooks.afterOptimizeChunkAssets.call(this.chunks); | ||||
| 					this.hooks.optimizeAssets.callAsync(this.assets, err => { | ||||
| 						if(err) { | ||||
| 							return callback(err); | ||||
| 						} | ||||
| 						this.applyPlugins1("after-optimize-assets", this.assets); | ||||
| 						if(this.applyPluginsBailResult("need-additional-seal")) { | ||||
| 						this.hooks.afterOptimizeAssets.call(this.assets); | ||||
| 						if(this.hooks.needAdditionalSeal.call()) { | ||||
| 							this.unseal(); | ||||
| 							return this.seal(callback); | ||||
| 						} | ||||
| 						return this.applyPluginsAsync("after-seal", callback); | ||||
| 						return this.hooks.afterSeal.callAsync(callback); | ||||
| 					}); | ||||
| 				}); | ||||
| 			}); | ||||
|  | @ -1399,7 +1508,7 @@ class Compilation extends Tapable { | |||
| 			} else { | ||||
| 				this.chunkTemplate.updateHashForChunk(chunkHash, chunk); | ||||
| 			} | ||||
| 			this.applyPlugins2("chunk-hash", chunk, chunkHash); | ||||
| 			this.hooks.chunkHash.call(chunk, chunkHash); | ||||
| 			chunk.hash = chunkHash.digest(hashDigest); | ||||
| 			hash.update(chunk.hash); | ||||
| 			chunk.renderedHash = chunk.hash.substr(0, hashDigestLength); | ||||
|  | @ -1427,7 +1536,7 @@ class Compilation extends Tapable { | |||
| 				Object.keys(module.assets).forEach((assetName) => { | ||||
| 					const fileName = this.getPath(assetName); | ||||
| 					this.assets[fileName] = module.assets[assetName]; | ||||
| 					this.applyPlugins2("module-asset", module, fileName); | ||||
| 					this.hooks.moduleAsset.call(module, fileName); | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
|  | @ -1471,7 +1580,7 @@ class Compilation extends Tapable { | |||
| 						throw new Error(`Conflict: Multiple assets emit to the same filename ${file}`); | ||||
| 					this.assets[file] = source; | ||||
| 					chunk.files.push(file); | ||||
| 					this.applyPlugins2("chunk-asset", chunk, file); | ||||
| 					this.hooks.chunkAsset.call(chunk, file); | ||||
| 				} | ||||
| 			} catch(err) { | ||||
| 				this.errors.push(new ChunkRenderError(chunk, file || filenameTemplate, err)); | ||||
|  | @ -1511,6 +1620,10 @@ class Compilation extends Tapable { | |||
| 			chunk.checkConstraints(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	applyPlugins(name, ...args) { | ||||
| 		this.hooks[name.replace(/[- ]([a-z])/g, match => match[1].toUpperCase())].call(...args); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| Object.defineProperty(Compilation.prototype, "moduleTemplate", { | ||||
|  |  | |||
|  | @ -63,7 +63,7 @@ class Watching { | |||
| 					this.compiler.emitRecords(err => { | ||||
| 						if(err) return this._done(err); | ||||
| 
 | ||||
| 						if(compilation.applyPluginsBailResult("need-additional-pass")) { | ||||
| 						if(compilation.hooks.needAdditionalPass.call()) { | ||||
| 							compilation.needAdditionalPass = true; | ||||
| 
 | ||||
| 							const stats = new Stats(compilation); | ||||
|  | @ -298,7 +298,7 @@ class Compiler extends Tapable { | |||
| 			this.emitAssets(compilation, err => { | ||||
| 				if(err) return callback(err); | ||||
| 
 | ||||
| 				if(compilation.applyPluginsBailResult("need-additional-pass")) { | ||||
| 				if(compilation.hooks.needAdditionalPass.call()) { | ||||
| 					compilation.needAdditionalPass = true; | ||||
| 
 | ||||
| 					const stats = new Stats(compilation); | ||||
|  | @ -496,7 +496,7 @@ class Compiler extends Tapable { | |||
| 		} | ||||
| 		childCompiler.parentCompilation = compilation; | ||||
| 
 | ||||
| 		compilation.applyPlugins("child-compiler", childCompiler, compilerName, compilerIndex); | ||||
| 		compilation.hooks.childCompiler.call(childCompiler, compilerName, compilerIndex); | ||||
| 
 | ||||
| 		return childCompiler; | ||||
| 	} | ||||
|  |  | |||
|  | @ -162,7 +162,7 @@ class NormalModule extends Module { | |||
| 			fs: fs, | ||||
| 		}; | ||||
| 
 | ||||
| 		compilation.applyPlugins("normal-module-loader", loaderContext, this); | ||||
| 		compilation.hooks.normalModuleLoader.call(loaderContext, this); | ||||
| 		if(options.loader) | ||||
| 			Object.assign(loaderContext, options.loader); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue