| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const OptionsApply = require("./OptionsApply"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-10 18:02:24 +08:00
										 |  |  | const JavascriptModulesPlugin = require("./JavascriptModulesPlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | const JsonModulesPlugin = require("./JsonModulesPlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-10 18:02:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin"); | 
					
						
							|  |  |  | const EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const FunctionModulePlugin = require("./FunctionModulePlugin"); | 
					
						
							|  |  |  | const LoaderTargetPlugin = require("./LoaderTargetPlugin"); | 
					
						
							|  |  |  | const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const EntryOptionPlugin = require("./EntryOptionPlugin"); | 
					
						
							|  |  |  | const RecordIdsPlugin = require("./RecordIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | const RuntimePlugin = require("./RuntimePlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const APIPlugin = require("./APIPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-22 14:03:44 +08:00
										 |  |  | const CommonJsStuffPlugin = require("./CommonJsStuffPlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const CompatibilityPlugin = require("./CompatibilityPlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const ConstPlugin = require("./ConstPlugin"); | 
					
						
							| 
									
										
										
										
											2013-12-18 06:21:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const TemplatedPathPlugin = require("./TemplatedPathPlugin"); | 
					
						
							|  |  |  | const UseStrictPlugin = require("./UseStrictPlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 13:22:44 +08:00
										 |  |  | const ResolverCachePlugin = require("./cache/ResolverCachePlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const CommonJsPlugin = require("./dependencies/CommonJsPlugin"); | 
					
						
							|  |  |  | const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin"); | 
					
						
							|  |  |  | const ImportPlugin = require("./dependencies/ImportPlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const LoaderPlugin = require("./dependencies/LoaderPlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const RequireContextPlugin = require("./dependencies/RequireContextPlugin"); | 
					
						
							|  |  |  | const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin"); | 
					
						
							|  |  |  | const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const SystemPlugin = require("./dependencies/SystemPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 20:22:10 +08:00
										 |  |  | const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-09-04 01:23:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 01:29:12 +08:00
										 |  |  | const DefaultStatsFactoryPlugin = require("./stats/DefaultStatsFactoryPlugin"); | 
					
						
							|  |  |  | const DefaultStatsPresetPlugin = require("./stats/DefaultStatsPresetPlugin"); | 
					
						
							|  |  |  | const DefaultStatsPrinterPlugin = require("./stats/DefaultStatsPrinterPlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-13 21:16:23 +08:00
										 |  |  | const { cachedCleverMerge } = require("./util/cleverMerge"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 19:05:22 +08:00
										 |  |  | /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */ | 
					
						
							|  |  |  | /** @typedef {import("./Compiler")} Compiler */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | class WebpackOptionsApply extends OptionsApply { | 
					
						
							|  |  |  | 	constructor() { | 
					
						
							|  |  |  | 		super(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-20 13:39:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 19:05:22 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {WebpackOptions} options options object | 
					
						
							|  |  |  | 	 * @param {Compiler} compiler compiler object | 
					
						
							|  |  |  | 	 * @returns {WebpackOptions} options object | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 	process(options, compiler) { | 
					
						
							|  |  |  | 		compiler.outputPath = options.output.path; | 
					
						
							|  |  |  | 		compiler.recordsInputPath = options.recordsInputPath || options.recordsPath; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.recordsOutputPath = | 
					
						
							|  |  |  | 			options.recordsOutputPath || options.recordsPath; | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		compiler.name = options.name; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (typeof options.target === "string") { | 
					
						
							|  |  |  | 			switch (options.target) { | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				case "web": { | 
					
						
							|  |  |  | 					const JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							|  |  |  | 					const FetchCompileWasmPlugin = require("./web/FetchCompileWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					const FetchCompileAsyncWasmPlugin = require("./web/FetchCompileAsyncWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const NodeSourcePlugin = require("./node/NodeSourcePlugin"); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new JsonpTemplatePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-11-23 16:37:33 +08:00
										 |  |  | 					new FetchCompileWasmPlugin({ | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 						mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					new FetchCompileAsyncWasmPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeSourcePlugin(options.node).apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				case "webworker": { | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const WebWorkerTemplatePlugin = require("./webworker/WebWorkerTemplatePlugin"); | 
					
						
							|  |  |  | 					const FetchCompileWasmPlugin = require("./web/FetchCompileWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					const FetchCompileAsyncWasmPlugin = require("./web/FetchCompileAsyncWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const NodeSourcePlugin = require("./node/NodeSourcePlugin"); | 
					
						
							|  |  |  | 					const StartupChunkDependenciesPlugin = require("./runtime/StartupChunkDependenciesPlugin"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					new WebWorkerTemplatePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-11-23 16:37:33 +08:00
										 |  |  | 					new FetchCompileWasmPlugin({ | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 						mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					new FetchCompileAsyncWasmPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					new NodeSourcePlugin(options.node).apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-21 04:53:58 +08:00
										 |  |  | 					new StartupChunkDependenciesPlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				case "node": | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				case "async-node": { | 
					
						
							|  |  |  | 					const NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); | 
					
						
							|  |  |  | 					const ReadFileCompileWasmPlugin = require("./node/ReadFileCompileWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					const ReadFileCompileAsyncWasmPlugin = require("./node/ReadFileCompileAsyncWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					const StartupChunkDependenciesPlugin = require("./runtime/StartupChunkDependenciesPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTemplatePlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: options.target === "async-node" | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-11-23 16:37:33 +08:00
										 |  |  | 					new ReadFileCompileWasmPlugin({ | 
					
						
							| 
									
										
										
										
											2018-06-06 05:38:29 +08:00
										 |  |  | 						mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					new ReadFileCompileAsyncWasmPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTargetPlugin().apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin("node").apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-21 04:53:58 +08:00
										 |  |  | 					new StartupChunkDependenciesPlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: options.target === "async-node" | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "node-webkit": { | 
					
						
							|  |  |  | 					const JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							|  |  |  | 					const NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					const ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							|  |  |  | 					const StartupChunkDependenciesPlugin = require("./runtime/StartupChunkDependenciesPlugin"); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new JsonpTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTargetPlugin().apply(compiler); | 
					
						
							|  |  |  | 					new ExternalsPlugin("commonjs", "nw.gui").apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-21 04:53:58 +08:00
										 |  |  | 					new StartupChunkDependenciesPlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "electron-main": { | 
					
						
							|  |  |  | 					const NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); | 
					
						
							|  |  |  | 					const NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					const ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							|  |  |  | 					const StartupChunkDependenciesPlugin = require("./runtime/StartupChunkDependenciesPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTemplatePlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTargetPlugin().apply(compiler); | 
					
						
							|  |  |  | 					new ExternalsPlugin("commonjs", [ | 
					
						
							|  |  |  | 						"app", | 
					
						
							|  |  |  | 						"auto-updater", | 
					
						
							|  |  |  | 						"browser-window", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"clipboard", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"content-tracing", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"crash-reporter", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"dialog", | 
					
						
							|  |  |  | 						"electron", | 
					
						
							|  |  |  | 						"global-shortcut", | 
					
						
							|  |  |  | 						"ipc", | 
					
						
							|  |  |  | 						"ipc-main", | 
					
						
							|  |  |  | 						"menu", | 
					
						
							|  |  |  | 						"menu-item", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"native-image", | 
					
						
							|  |  |  | 						"original-fs", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"power-monitor", | 
					
						
							|  |  |  | 						"power-save-blocker", | 
					
						
							|  |  |  | 						"protocol", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"screen", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"session", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"shell", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"tray", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"web-contents" | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					]).apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-21 04:53:58 +08:00
										 |  |  | 					new StartupChunkDependenciesPlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				case "electron-renderer": | 
					
						
							| 
									
										
										
										
											2019-06-05 05:23:25 +08:00
										 |  |  | 				case "electron-preload": { | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const FetchCompileWasmPlugin = require("./web/FetchCompileWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					const FetchCompileAsyncWasmPlugin = require("./web/FetchCompileAsyncWasmPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 					const NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					const ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-26 06:52:14 +08:00
										 |  |  | 					if (options.target === "electron-renderer") { | 
					
						
							| 
									
										
										
										
											2019-06-05 05:23:25 +08:00
										 |  |  | 						const JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-26 06:52:14 +08:00
										 |  |  | 						new JsonpTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					} else if (options.target === "electron-preload") { | 
					
						
							| 
									
										
										
										
											2019-06-05 05:23:25 +08:00
										 |  |  | 						const NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2019-05-26 06:52:14 +08:00
										 |  |  | 						new NodeTemplatePlugin({ | 
					
						
							|  |  |  | 							asyncChunkLoading: true | 
					
						
							|  |  |  | 						}).apply(compiler); | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-11-23 16:37:33 +08:00
										 |  |  | 					new FetchCompileWasmPlugin({ | 
					
						
							| 
									
										
										
										
											2018-07-09 20:39:48 +08:00
										 |  |  | 						mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-05-24 18:30:43 +08:00
										 |  |  | 					new FetchCompileAsyncWasmPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTargetPlugin().apply(compiler); | 
					
						
							|  |  |  | 					new ExternalsPlugin("commonjs", [ | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"clipboard", | 
					
						
							|  |  |  | 						"crash-reporter", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"desktop-capturer", | 
					
						
							|  |  |  | 						"electron", | 
					
						
							|  |  |  | 						"ipc", | 
					
						
							|  |  |  | 						"ipc-renderer", | 
					
						
							|  |  |  | 						"native-image", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"original-fs", | 
					
						
							|  |  |  | 						"remote", | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 						"screen", | 
					
						
							| 
									
										
										
										
											2018-02-18 19:27:46 +08:00
										 |  |  | 						"shell", | 
					
						
							|  |  |  | 						"web-frame" | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					]).apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				default: | 
					
						
							|  |  |  | 					throw new Error("Unsupported target '" + options.target + "'."); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-09-19 19:05:22 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		// @ts-ignore This is always true, which is good this way
 | 
					
						
							|  |  |  | 		else if (options.target !== false) { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			options.target(compiler); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			throw new Error("Unsupported target '" + options.target + "'."); | 
					
						
							| 
									
										
										
										
											2014-04-09 15:12:04 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-03 04:49:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.output.library || options.output.libraryTarget !== "var") { | 
					
						
							| 
									
										
										
										
											2018-06-07 14:37:08 +08:00
										 |  |  | 			const LibraryTemplatePlugin = require("./LibraryTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			new LibraryTemplatePlugin( | 
					
						
							|  |  |  | 				options.output.library, | 
					
						
							|  |  |  | 				options.output.libraryTarget, | 
					
						
							|  |  |  | 				options.output.umdNamedDefine, | 
					
						
							|  |  |  | 				options.output.auxiliaryComment || "", | 
					
						
							|  |  |  | 				options.output.libraryExport | 
					
						
							|  |  |  | 			).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.externals) { | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 			const ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			new ExternalsPlugin( | 
					
						
							|  |  |  | 				options.output.libraryTarget, | 
					
						
							|  |  |  | 				options.externals | 
					
						
							|  |  |  | 			).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-10-18 06:48:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if ( | 
					
						
							|  |  |  | 			options.devtool && | 
					
						
							|  |  |  | 			(options.devtool.includes("sourcemap") || | 
					
						
							|  |  |  | 				options.devtool.includes("source-map")) | 
					
						
							|  |  |  | 		) { | 
					
						
							| 
									
										
										
										
											2018-01-12 00:58:39 +08:00
										 |  |  | 			const hidden = options.devtool.includes("hidden"); | 
					
						
							|  |  |  | 			const inline = options.devtool.includes("inline"); | 
					
						
							|  |  |  | 			const evalWrapped = options.devtool.includes("eval"); | 
					
						
							|  |  |  | 			const cheap = options.devtool.includes("cheap"); | 
					
						
							|  |  |  | 			const moduleMaps = options.devtool.includes("module"); | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 			const noSources = options.devtool.includes("nosources"); | 
					
						
							|  |  |  | 			const legacy = options.devtool.includes("@"); | 
					
						
							|  |  |  | 			const modern = options.devtool.includes("#"); | 
					
						
							|  |  |  | 			const comment = | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				legacy && modern | 
					
						
							|  |  |  | 					? "\n/*\n//@ source" + | 
					
						
							| 
									
										
										
										
											2018-03-26 22:56:10 +08:00
										 |  |  | 					  "MappingURL=[url]\n//# source" + | 
					
						
							|  |  |  | 					  "MappingURL=[url]\n*/" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					: legacy | 
					
						
							| 
									
										
										
										
											2019-02-05 17:06:32 +08:00
										 |  |  | 					? "\n/*\n//@ source" + "MappingURL=[url]\n*/" | 
					
						
							|  |  |  | 					: modern | 
					
						
							|  |  |  | 					? "\n//# source" + "MappingURL=[url]" | 
					
						
							|  |  |  | 					: null; | 
					
						
							| 
									
										
										
										
											2018-06-07 14:37:08 +08:00
										 |  |  | 			const Plugin = evalWrapped | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				? EvalSourceMapDevToolPlugin | 
					
						
							|  |  |  | 				: SourceMapDevToolPlugin; | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new Plugin({ | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				filename: inline ? null : options.output.sourceMapFilename, | 
					
						
							|  |  |  | 				moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate, | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				fallbackModuleFilenameTemplate: | 
					
						
							|  |  |  | 					options.output.devtoolFallbackModuleFilenameTemplate, | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				append: hidden ? false : comment, | 
					
						
							|  |  |  | 				module: moduleMaps ? true : cheap ? false : true, | 
					
						
							|  |  |  | 				columns: cheap ? false : true, | 
					
						
							|  |  |  | 				noSources: noSources, | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 				namespace: options.output.devtoolNamespace | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (options.devtool && options.devtool.includes("eval")) { | 
					
						
							| 
									
										
										
										
											2018-12-29 19:48:59 +08:00
										 |  |  | 			const legacy = options.devtool.includes("@"); | 
					
						
							|  |  |  | 			const modern = options.devtool.includes("#"); | 
					
						
							|  |  |  | 			const comment = | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				legacy && modern | 
					
						
							|  |  |  | 					? "\n//@ sourceURL=[url]\n//# sourceURL=[url]" | 
					
						
							|  |  |  | 					: legacy | 
					
						
							| 
									
										
										
										
											2019-02-05 17:06:32 +08:00
										 |  |  | 					? "\n//@ sourceURL=[url]" | 
					
						
							|  |  |  | 					: modern | 
					
						
							|  |  |  | 					? "\n//# sourceURL=[url]" | 
					
						
							|  |  |  | 					: null; | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new EvalDevToolModulePlugin({ | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 				sourceUrlComment: comment, | 
					
						
							|  |  |  | 				moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate, | 
					
						
							|  |  |  | 				namespace: options.output.devtoolNamespace | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 17:53:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new JavascriptModulesPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new JsonModulesPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-07-16 19:16:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (options.experiments.asset) { | 
					
						
							|  |  |  | 			const AssetModulesPlugin = require("./asset/AssetModulesPlugin"); | 
					
						
							|  |  |  | 			new AssetModulesPlugin().apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-06-05 19:25:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (options.experiments.syncWebAssembly) { | 
					
						
							|  |  |  | 			const WebAssemblyModulesPlugin = require("./wasm/WebAssemblyModulesPlugin"); | 
					
						
							|  |  |  | 			new WebAssemblyModulesPlugin({ | 
					
						
							|  |  |  | 				mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 			}).apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (options.experiments.asyncWebAssembly) { | 
					
						
							|  |  |  | 			const AsyncWebAssemblyModulesPlugin = require("./wasm-async/AsyncWebAssemblyModulesPlugin"); | 
					
						
							|  |  |  | 			new AsyncWebAssemblyModulesPlugin({ | 
					
						
							|  |  |  | 				mangleImports: options.optimization.mangleWasmImports | 
					
						
							|  |  |  | 			}).apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		new EntryOptionPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-11-27 22:27:37 +08:00
										 |  |  | 		compiler.hooks.entryOption.call(options.context, options.entry); | 
					
						
							| 
									
										
										
										
											2013-06-19 17:53:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 		new RuntimePlugin().apply(compiler); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-05 19:25:15 +08:00
										 |  |  | 		if (options.experiments.importAwait || options.experiments.importAsync) { | 
					
						
							|  |  |  | 			const InferAsyncModulesPlugin = require("./async-modules/InferAsyncModulesPlugin"); | 
					
						
							|  |  |  | 			new InferAsyncModulesPlugin({ | 
					
						
							|  |  |  | 				errorOnMissingAwait: !options.experiments.importAsync | 
					
						
							|  |  |  | 			}).apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-06-05 17:15:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new CompatibilityPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-06-05 19:25:15 +08:00
										 |  |  | 		new HarmonyModulesPlugin({ | 
					
						
							|  |  |  | 			module: options.module, | 
					
						
							|  |  |  | 			topLevelAwait: options.experiments.topLevelAwait, | 
					
						
							|  |  |  | 			importAwait: options.experiments.importAwait | 
					
						
							|  |  |  | 		}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-03-11 00:13:53 +08:00
										 |  |  | 		if (options.amd !== false) { | 
					
						
							| 
									
										
										
										
											2019-03-10 23:31:35 +08:00
										 |  |  | 			const AMDPlugin = require("./dependencies/AMDPlugin"); | 
					
						
							|  |  |  | 			const RequireJsStuffPlugin = require("./RequireJsStuffPlugin"); | 
					
						
							|  |  |  | 			new AMDPlugin(options.module, options.amd || {}).apply(compiler); | 
					
						
							|  |  |  | 			new RequireJsStuffPlugin().apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new CommonJsPlugin(options.module).apply(compiler); | 
					
						
							|  |  |  | 		new LoaderPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-04-24 10:40:51 +08:00
										 |  |  | 		if (options.node !== false) { | 
					
						
							|  |  |  | 			const NodeStuffPlugin = require("./NodeStuffPlugin"); | 
					
						
							|  |  |  | 			new NodeStuffPlugin(options.node).apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-05-22 14:03:44 +08:00
										 |  |  | 		new CommonJsStuffPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new APIPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new ConstPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new UseStrictPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new RequireIncludePlugin().apply(compiler); | 
					
						
							|  |  |  | 		new RequireEnsurePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		new RequireContextPlugin( | 
					
						
							|  |  |  | 			options.resolve.modules, | 
					
						
							|  |  |  | 			options.resolve.extensions, | 
					
						
							|  |  |  | 			options.resolve.mainFiles | 
					
						
							|  |  |  | 		).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new ImportPlugin(options.module).apply(compiler); | 
					
						
							|  |  |  | 		new SystemPlugin(options.module).apply(compiler); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-19 01:29:12 +08:00
										 |  |  | 		new DefaultStatsFactoryPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new DefaultStatsPresetPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new DefaultStatsPrinterPlugin().apply(compiler); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (typeof options.mode !== "string") { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:26:05 +08:00
										 |  |  | 			const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new WarnNoModeSetPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 05:26:05 +08:00
										 |  |  | 		const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new EnsureChunkConditionsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (options.optimization.removeAvailableModules) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:26:05 +08:00
										 |  |  | 			const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new RemoveParentModulesPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.removeEmptyChunks) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:26:05 +08:00
										 |  |  | 			const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new RemoveEmptyChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.mergeDuplicateChunks) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new MergeDuplicateChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.flagIncludedChunks) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagIncludedChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.sideEffects) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new SideEffectsFlagPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.providedExports) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagDependencyExportsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.usedExports) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagDependencyUsagePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-01-28 17:40:32 +08:00
										 |  |  | 		if (options.optimization.mangleExports) { | 
					
						
							| 
									
										
										
										
											2019-05-10 03:34:28 +08:00
										 |  |  | 			const MangleExportsPlugin = require("./optimize/MangleExportsPlugin"); | 
					
						
							| 
									
										
										
										
											2019-01-28 17:40:32 +08:00
										 |  |  | 			new MangleExportsPlugin().apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (options.optimization.concatenateModules) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new ModuleConcatenationPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.splitChunks) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const SplitChunksPlugin = require("./optimize/SplitChunksPlugin"); | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 			new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.runtimeChunk) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin"); | 
					
						
							| 
									
										
										
										
											2018-01-26 01:52:36 +08:00
										 |  |  | 			new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (options.optimization.noEmitOnErrors) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new NoEmitOnErrorsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-06-05 02:14:08 +08:00
										 |  |  | 		if (options.optimization.checkWasmTypes) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-06-05 02:14:08 +08:00
										 |  |  | 			new WasmFinalizeExportsPlugin().apply(compiler); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-15 03:48:49 +08:00
										 |  |  | 		const moduleIds = options.optimization.moduleIds; | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 		if (moduleIds) { | 
					
						
							|  |  |  | 			switch (moduleIds) { | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				case "natural": { | 
					
						
							|  |  |  | 					const NaturalModuleIdsPlugin = require("./ids/NaturalModuleIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-07-23 02:25:56 +08:00
										 |  |  | 					new NaturalModuleIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "named": { | 
					
						
							|  |  |  | 					const NamedModuleIdsPlugin = require("./ids/NamedModuleIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-09-04 01:23:27 +08:00
										 |  |  | 					new NamedModuleIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "hashed": { | 
					
						
							|  |  |  | 					const WarnDeprecatedOptionPlugin = require("./WarnDeprecatedOptionPlugin"); | 
					
						
							|  |  |  | 					const HashedModuleIdsPlugin = require("./ids/HashedModuleIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-10-12 22:53:14 +08:00
										 |  |  | 					new WarnDeprecatedOptionPlugin( | 
					
						
							|  |  |  | 						"optimization.moduleIds", | 
					
						
							|  |  |  | 						"hashed", | 
					
						
							|  |  |  | 						"deterministic" | 
					
						
							|  |  |  | 					).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 					new HashedModuleIdsPlugin().apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "deterministic": { | 
					
						
							|  |  |  | 					const DeterministicModuleIdsPlugin = require("./ids/DeterministicModuleIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-07 21:47:25 +08:00
										 |  |  | 					new DeterministicModuleIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-09-17 22:09:58 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "size": { | 
					
						
							|  |  |  | 					const OccurrenceModuleIdsPlugin = require("./ids/OccurrenceModuleIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-09-04 01:23:27 +08:00
										 |  |  | 					new OccurrenceModuleIdsPlugin({ | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 						prioritiseInitial: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 				default: | 
					
						
							|  |  |  | 					throw new Error( | 
					
						
							|  |  |  | 						`webpack bug: moduleIds: ${moduleIds} is not implemented` | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-06-07 20:22:35 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-15 03:48:49 +08:00
										 |  |  | 		const chunkIds = options.optimization.chunkIds; | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 		if (chunkIds) { | 
					
						
							|  |  |  | 			switch (chunkIds) { | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				case "natural": { | 
					
						
							|  |  |  | 					const NaturalChunkIdsPlugin = require("./ids/NaturalChunkIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-09-05 20:22:10 +08:00
										 |  |  | 					new NaturalChunkIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "named": { | 
					
						
							|  |  |  | 					const NamedChunkIdsPlugin = require("./ids/NamedChunkIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-09-05 20:22:10 +08:00
										 |  |  | 					new NamedChunkIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				case "deterministic": { | 
					
						
							|  |  |  | 					const DeterministicChunkIdsPlugin = require("./ids/DeterministicChunkIdsPlugin"); | 
					
						
							| 
									
										
										
										
											2018-12-07 21:47:25 +08:00
										 |  |  | 					new DeterministicChunkIdsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-12-07 19:26:35 +08:00
										 |  |  | 					break; | 
					
						
							| 
									
										
										
										
											2019-03-23 03:28:15 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 				case "size": | 
					
						
							| 
									
										
										
										
											2018-09-05 20:22:10 +08:00
										 |  |  | 					new OccurrenceChunkIdsPlugin({ | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 						prioritiseInitial: true | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				case "total-size": | 
					
						
							| 
									
										
										
										
											2018-09-05 20:22:10 +08:00
										 |  |  | 					new OccurrenceChunkIdsPlugin({ | 
					
						
							| 
									
										
										
										
											2018-07-09 20:31:29 +08:00
										 |  |  | 						prioritiseInitial: false | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				default: | 
					
						
							|  |  |  | 					throw new Error( | 
					
						
							|  |  |  | 						`webpack bug: chunkIds: ${chunkIds} is not implemented` | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.nodeEnv) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const DefinePlugin = require("./DefinePlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new DefinePlugin({ | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 				"process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.minimize) { | 
					
						
							|  |  |  | 			for (const minimizer of options.optimization.minimizer) { | 
					
						
							| 
									
										
										
										
											2018-09-19 19:05:22 +08:00
										 |  |  | 				if (typeof minimizer === "function") { | 
					
						
							| 
									
										
										
										
											2018-12-29 17:40:12 +08:00
										 |  |  | 					minimizer.call(compiler, compiler); | 
					
						
							| 
									
										
										
										
											2018-09-19 19:05:22 +08:00
										 |  |  | 				} else { | 
					
						
							|  |  |  | 					minimizer.apply(compiler); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-12-13 23:05:21 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-05-08 19:28:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.performance) { | 
					
						
							| 
									
										
										
										
											2019-03-12 05:18:50 +08:00
										 |  |  | 			const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new SizeLimitsPlugin(options.performance).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-03 04:49:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new TemplatedPathPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2014-08-22 19:51:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new RecordIdsPlugin({ | 
					
						
							| 
									
										
										
										
											2017-12-01 16:49:07 +08:00
										 |  |  | 			portableIds: options.optimization.portableRecords | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2013-05-31 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new WarnCaseSensitiveModulesPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2014-03-31 17:33:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 20:30:59 +08:00
										 |  |  | 		if (options.cache && typeof options.cache === "object") { | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 			const cacheOptions = options.cache; | 
					
						
							|  |  |  | 			switch (cacheOptions.type) { | 
					
						
							| 
									
										
										
										
											2018-10-09 20:30:59 +08:00
										 |  |  | 				case "memory": { | 
					
						
							|  |  |  | 					const MemoryCachePlugin = require("./cache/MemoryCachePlugin"); | 
					
						
							|  |  |  | 					new MemoryCachePlugin().apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				case "filesystem": { | 
					
						
							| 
									
										
										
										
											2018-12-28 03:57:54 +08:00
										 |  |  | 					const MemoryCachePlugin = require("./cache/MemoryCachePlugin"); | 
					
						
							|  |  |  | 					new MemoryCachePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 					switch (cacheOptions.store) { | 
					
						
							|  |  |  | 						case "instant": { | 
					
						
							|  |  |  | 							const InstantFileCachePlugin = require("./cache/InstantFileCachePlugin"); | 
					
						
							|  |  |  | 							const SeparateFilesCacheStrategy = require("./cache/SeparateFilesCacheStrategy"); | 
					
						
							|  |  |  | 							new InstantFileCachePlugin( | 
					
						
							|  |  |  | 								new SeparateFilesCacheStrategy({ | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 									fs: compiler.intermediateFileSystem, | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 									cacheLocation: cacheOptions.cacheLocation, | 
					
						
							|  |  |  | 									version: cacheOptions.version, | 
					
						
							|  |  |  | 									hashAlgorithm: cacheOptions.hashAlgorithm, | 
					
						
							|  |  |  | 									loglevel: cacheOptions.loglevel | 
					
						
							|  |  |  | 								}) | 
					
						
							|  |  |  | 							).apply(compiler); | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						case "background": { | 
					
						
							|  |  |  | 							const BackgroundFileCachePlugin = require("./cache/BackgroundFileCachePlugin"); | 
					
						
							|  |  |  | 							const SeparateFilesCacheStrategy = require("./cache/SeparateFilesCacheStrategy"); | 
					
						
							|  |  |  | 							new BackgroundFileCachePlugin( | 
					
						
							|  |  |  | 								new SeparateFilesCacheStrategy({ | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 									fs: compiler.intermediateFileSystem, | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 									cacheLocation: cacheOptions.cacheLocation, | 
					
						
							|  |  |  | 									version: cacheOptions.version, | 
					
						
							|  |  |  | 									hashAlgorithm: cacheOptions.hashAlgorithm, | 
					
						
							|  |  |  | 									loglevel: cacheOptions.loglevel | 
					
						
							|  |  |  | 								}) | 
					
						
							|  |  |  | 							).apply(compiler); | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						case "idle": { | 
					
						
							|  |  |  | 							const IdleFileCachePlugin = require("./cache/IdleFileCachePlugin"); | 
					
						
							|  |  |  | 							const SeparateFilesCacheStrategy = require("./cache/SeparateFilesCacheStrategy"); | 
					
						
							|  |  |  | 							new IdleFileCachePlugin( | 
					
						
							|  |  |  | 								new SeparateFilesCacheStrategy({ | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 									fs: compiler.intermediateFileSystem, | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 									cacheLocation: cacheOptions.cacheLocation, | 
					
						
							|  |  |  | 									version: cacheOptions.version, | 
					
						
							|  |  |  | 									hashAlgorithm: cacheOptions.hashAlgorithm, | 
					
						
							|  |  |  | 									loglevel: cacheOptions.loglevel | 
					
						
							|  |  |  | 								}) | 
					
						
							|  |  |  | 							).apply(compiler); | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						case "pack": { | 
					
						
							|  |  |  | 							const IdleFileCachePlugin = require("./cache/IdleFileCachePlugin"); | 
					
						
							|  |  |  | 							const PackFileCacheStrategy = require("./cache/PackFileCacheStrategy"); | 
					
						
							|  |  |  | 							new IdleFileCachePlugin( | 
					
						
							|  |  |  | 								new PackFileCacheStrategy({ | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 									fs: compiler.intermediateFileSystem, | 
					
						
							| 
									
										
										
										
											2019-01-26 02:21:45 +08:00
										 |  |  | 									cacheLocation: cacheOptions.cacheLocation, | 
					
						
							|  |  |  | 									version: cacheOptions.version, | 
					
						
							|  |  |  | 									loglevel: cacheOptions.loglevel | 
					
						
							|  |  |  | 								}) | 
					
						
							|  |  |  | 							).apply(compiler); | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-10-09 20:30:59 +08:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				default: | 
					
						
							|  |  |  | 					// @ts-ignore never is expected here
 | 
					
						
							|  |  |  | 					throw new Error(`Unknown cache type ${options.cache.type}`); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-10-23 13:22:44 +08:00
										 |  |  | 		new ResolverCachePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-27 22:27:37 +08:00
										 |  |  | 		compiler.hooks.afterPlugins.call(compiler); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (!compiler.inputFileSystem) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			throw new Error("No input filesystem provided"); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("normal") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:16:05 +08:00
										 |  |  | 				return { | 
					
						
							|  |  |  | 					fileSystem: compiler.inputFileSystem, | 
					
						
							|  |  |  | 					...cachedCleverMerge(options.resolve, resolveOptions) | 
					
						
							|  |  |  | 				}; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("context") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:16:05 +08:00
										 |  |  | 				return { | 
					
						
							|  |  |  | 					fileSystem: compiler.inputFileSystem, | 
					
						
							|  |  |  | 					resolveToContext: true, | 
					
						
							|  |  |  | 					...cachedCleverMerge(options.resolve, resolveOptions) | 
					
						
							|  |  |  | 				}; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("loader") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:16:05 +08:00
										 |  |  | 				return { | 
					
						
							|  |  |  | 					fileSystem: compiler.inputFileSystem, | 
					
						
							|  |  |  | 					...cachedCleverMerge(options.resolveLoader, resolveOptions) | 
					
						
							|  |  |  | 				}; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2017-11-27 22:27:37 +08:00
										 |  |  | 		compiler.hooks.afterResolvers.call(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		return options; | 
					
						
							| 
									
										
										
										
											2013-07-11 05:20:07 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | module.exports = WebpackOptionsApply; |