| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											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
										 |  |  | const WebAssemblyModulesPlugin = require("./WebAssemblyModulesPlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const LoaderTargetPlugin = require("./LoaderTargetPlugin"); | 
					
						
							|  |  |  | const FunctionModulePlugin = require("./FunctionModulePlugin"); | 
					
						
							|  |  |  | const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin"); | 
					
						
							|  |  |  | const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin"); | 
					
						
							|  |  |  | const EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin"); | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const APIPlugin = require("./APIPlugin"); | 
					
						
							|  |  |  | const ConstPlugin = require("./ConstPlugin"); | 
					
						
							|  |  |  | const RequireJsStuffPlugin = require("./RequireJsStuffPlugin"); | 
					
						
							|  |  |  | const NodeStuffPlugin = require("./NodeStuffPlugin"); | 
					
						
							|  |  |  | const CompatibilityPlugin = require("./CompatibilityPlugin"); | 
					
						
							| 
									
										
										
										
											2013-12-18 06:21:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const TemplatedPathPlugin = require("./TemplatedPathPlugin"); | 
					
						
							|  |  |  | const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin"); | 
					
						
							|  |  |  | const UseStrictPlugin = require("./UseStrictPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const LoaderPlugin = require("./dependencies/LoaderPlugin"); | 
					
						
							|  |  |  | const CommonJsPlugin = require("./dependencies/CommonJsPlugin"); | 
					
						
							|  |  |  | const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin"); | 
					
						
							|  |  |  | const SystemPlugin = require("./dependencies/SystemPlugin"); | 
					
						
							|  |  |  | const ImportPlugin = require("./dependencies/ImportPlugin"); | 
					
						
							|  |  |  | const AMDPlugin = require("./dependencies/AMDPlugin"); | 
					
						
							|  |  |  | const RequireContextPlugin = require("./dependencies/RequireContextPlugin"); | 
					
						
							|  |  |  | const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin"); | 
					
						
							|  |  |  | const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin"); | 
					
						
							|  |  |  | const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin"); | 
					
						
							|  |  |  | const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin"); | 
					
						
							|  |  |  | const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin"); | 
					
						
							|  |  |  | const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin"); | 
					
						
							|  |  |  | const OccurrenceOrderPlugin = require("./optimize/OccurrenceOrderPlugin"); | 
					
						
							| 
									
										
										
										
											2017-09-14 19:35:25 +08:00
										 |  |  | const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin"); | 
					
						
							|  |  |  | const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin"); | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | const SplitChunksPlugin = require("./optimize/SplitChunksPlugin"); | 
					
						
							|  |  |  | const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin"); | 
					
						
							|  |  |  | const NamedModulesPlugin = require("./NamedModulesPlugin"); | 
					
						
							|  |  |  | const NamedChunksPlugin = require("./NamedChunksPlugin"); | 
					
						
							|  |  |  | const DefinePlugin = require("./DefinePlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | class WebpackOptionsApply extends OptionsApply { | 
					
						
							|  |  |  | 	constructor() { | 
					
						
							|  |  |  | 		super(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-20 13:39:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 	process(options, compiler) { | 
					
						
							|  |  |  | 		let ExternalsPlugin; | 
					
						
							|  |  |  | 		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; | 
					
						
							|  |  |  | 		compiler.dependencies = options.dependencies; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (typeof options.target === "string") { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			let JsonpTemplatePlugin; | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | 			let FetchCompileWasmTemplatePlugin; | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | 			let ReadFileCompileWasmTemplatePlugin; | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			let NodeSourcePlugin; | 
					
						
							|  |  |  | 			let NodeTargetPlugin; | 
					
						
							|  |  |  | 			let NodeTemplatePlugin; | 
					
						
							| 
									
										
										
										
											2016-12-03 04:49:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			switch (options.target) { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				case "web": | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | 					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							|  |  |  | 					FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					NodeSourcePlugin = require("./node/NodeSourcePlugin"); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new JsonpTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					new FetchCompileWasmTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					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-02-25 09:00:20 +08:00
										 |  |  | 				case "webworker": { | 
					
						
							|  |  |  | 					let WebWorkerTemplatePlugin = require("./webworker/WebWorkerTemplatePlugin"); | 
					
						
							|  |  |  | 					FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin"); | 
					
						
							|  |  |  | 					NodeSourcePlugin = require("./node/NodeSourcePlugin"); | 
					
						
							|  |  |  | 					new WebWorkerTemplatePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new FetchCompileWasmTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					new NodeSourcePlugin(options.node).apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin(options.target).apply(compiler); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 				case "node": | 
					
						
							|  |  |  | 				case "async-node": | 
					
						
							|  |  |  | 					NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | 					ReadFileCompileWasmTemplatePlugin = require("./node/ReadFileCompileWasmTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTemplatePlugin({ | 
					
						
							|  |  |  | 						asyncChunkLoading: options.target === "async-node" | 
					
						
							|  |  |  | 					}).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-04-04 14:53:58 +08:00
										 |  |  | 					new ReadFileCompileWasmTemplatePlugin().apply(compiler); | 
					
						
							|  |  |  | 					new FunctionModulePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 					new NodeTargetPlugin().apply(compiler); | 
					
						
							|  |  |  | 					new LoaderTargetPlugin("node").apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				case "node-webkit": | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | 					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				case "electron-main": | 
					
						
							|  |  |  | 					NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); | 
					
						
							|  |  |  | 					NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				case "electron-renderer": | 
					
						
							| 
									
										
										
										
											2017-11-12 01:48:29 +08:00
										 |  |  | 					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 					NodeTargetPlugin = require("./node/NodeTargetPlugin"); | 
					
						
							|  |  |  | 					ExternalsPlugin = require("./ExternalsPlugin"); | 
					
						
							| 
									
										
										
										
											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", [ | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							|  |  |  | 				default: | 
					
						
							|  |  |  | 					throw new Error("Unsupported target '" + options.target + "'."); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} 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") { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			let 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) { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		let noSources; | 
					
						
							|  |  |  | 		let legacy; | 
					
						
							|  |  |  | 		let modern; | 
					
						
							|  |  |  | 		let comment; | 
					
						
							| 
									
										
										
										
											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"); | 
					
						
							|  |  |  | 			noSources = options.devtool.includes("nosources"); | 
					
						
							|  |  |  | 			legacy = options.devtool.includes("@"); | 
					
						
							|  |  |  | 			modern = options.devtool.includes("#"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			comment = | 
					
						
							|  |  |  | 				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 | 
					
						
							|  |  |  | 						? "\n/*\n//@ source" + "MappingURL=[url]\n*/" | 
					
						
							| 
									
										
										
										
											2018-04-26 22:32:23 +08:00
										 |  |  | 						: modern | 
					
						
							|  |  |  | 							? "\n//# source" + "MappingURL=[url]" | 
					
						
							|  |  |  | 							: null; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			let Plugin = evalWrapped | 
					
						
							|  |  |  | 				? 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, | 
					
						
							|  |  |  | 				lineToLine: options.output.devtoolLineToLine, | 
					
						
							|  |  |  | 				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-01-12 00:58:39 +08:00
										 |  |  | 			legacy = options.devtool.includes("@"); | 
					
						
							|  |  |  | 			modern = options.devtool.includes("#"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			comment = | 
					
						
							|  |  |  | 				legacy && modern | 
					
						
							|  |  |  | 					? "\n//@ sourceURL=[url]\n//# sourceURL=[url]" | 
					
						
							|  |  |  | 					: legacy | 
					
						
							|  |  |  | 						? "\n//@ sourceURL=[url]" | 
					
						
							| 
									
										
										
										
											2018-04-26 22:32:23 +08:00
										 |  |  | 						: 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); | 
					
						
							|  |  |  | 		new WebAssemblyModulesPlugin().apply(compiler); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new CompatibilityPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new HarmonyModulesPlugin(options.module).apply(compiler); | 
					
						
							|  |  |  | 		new AMDPlugin(options.module, options.amd || {}).apply(compiler); | 
					
						
							|  |  |  | 		new CommonJsPlugin(options.module).apply(compiler); | 
					
						
							|  |  |  | 		new LoaderPlugin().apply(compiler); | 
					
						
							|  |  |  | 		new NodeStuffPlugin(options.node).apply(compiler); | 
					
						
							|  |  |  | 		new RequireJsStuffPlugin().apply(compiler); | 
					
						
							|  |  |  | 		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-02-25 09:00:20 +08:00
										 |  |  | 		if (typeof options.mode !== "string") | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new WarnNoModeSetPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 		new EnsureChunkConditionsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.removeAvailableModules) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new RemoveParentModulesPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.removeEmptyChunks) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new RemoveEmptyChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.mergeDuplicateChunks) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new MergeDuplicateChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.flagIncludedChunks) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagIncludedChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.occurrenceOrder) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new OccurrenceOrderPlugin(true).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.sideEffects) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new SideEffectsFlagPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.providedExports) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagDependencyExportsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.usedExports) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new FlagDependencyUsagePlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.concatenateModules) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new ModuleConcatenationPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.splitChunks) | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 			new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.runtimeChunk) | 
					
						
							| 
									
										
										
										
											2018-01-26 01:52:36 +08:00
										 |  |  | 			new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.noEmitOnErrors) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new NoEmitOnErrorsPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.namedModules) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new NamedModulesPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.namedChunks) | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 			new NamedChunksPlugin().apply(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (options.optimization.nodeEnv) { | 
					
						
							| 
									
										
										
										
											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) { | 
					
						
							| 
									
										
										
										
											2017-12-20 16:53:33 +08:00
										 |  |  | 				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) { | 
					
						
							| 
									
										
										
										
											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-02-25 09:00:20 +08:00
										 |  |  | 		if (options.cache) { | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 			let CachePlugin = require("./CachePlugin"); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			new CachePlugin( | 
					
						
							|  |  |  | 				typeof options.cache === "object" ? options.cache : null | 
					
						
							|  |  |  | 			).apply(compiler); | 
					
						
							| 
									
										
										
										
											2017-02-21 21:49:15 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-27 22:27:37 +08:00
										 |  |  | 		compiler.hooks.afterPlugins.call(compiler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!compiler.inputFileSystem) | 
					
						
							|  |  |  | 			throw new Error("No input filesystem provided"); | 
					
						
							|  |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("normal") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							|  |  |  | 				return Object.assign( | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						fileSystem: compiler.inputFileSystem | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 					options.resolve, | 
					
						
							|  |  |  | 					resolveOptions | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("context") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							|  |  |  | 				return Object.assign( | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						fileSystem: compiler.inputFileSystem, | 
					
						
							|  |  |  | 						resolveToContext: true | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 					options.resolve, | 
					
						
							|  |  |  | 					resolveOptions | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		compiler.resolverFactory.hooks.resolveOptions | 
					
						
							|  |  |  | 			.for("loader") | 
					
						
							|  |  |  | 			.tap("WebpackOptionsApply", resolveOptions => { | 
					
						
							|  |  |  | 				return Object.assign( | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						fileSystem: compiler.inputFileSystem | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 					options.resolveLoader, | 
					
						
							|  |  |  | 					resolveOptions | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											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; |