From bbff7403fbf46f9ad92240ac213df8d30ef31b64 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 02:56:13 +0200 Subject: update packages --- node_modules/webpack/lib/WebpackOptionsApply.js | 817 +++++++++++++++--------- 1 file changed, 519 insertions(+), 298 deletions(-) (limited to 'node_modules/webpack/lib/WebpackOptionsApply.js') diff --git a/node_modules/webpack/lib/WebpackOptionsApply.js b/node_modules/webpack/lib/WebpackOptionsApply.js index ebddba717..2456a7bd7 100644 --- a/node_modules/webpack/lib/WebpackOptionsApply.js +++ b/node_modules/webpack/lib/WebpackOptionsApply.js @@ -1,298 +1,519 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -"use strict"; - -const OptionsApply = require("./OptionsApply"); - -const LoaderTargetPlugin = require("./LoaderTargetPlugin"); -const FunctionModulePlugin = require("./FunctionModulePlugin"); -const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin"); -const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin"); -const EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin"); - -const EntryOptionPlugin = require("./EntryOptionPlugin"); -const RecordIdsPlugin = require("./RecordIdsPlugin"); - -const APIPlugin = require("./APIPlugin"); -const ConstPlugin = require("./ConstPlugin"); -const RequireJsStuffPlugin = require("./RequireJsStuffPlugin"); -const NodeStuffPlugin = require("./NodeStuffPlugin"); -const CompatibilityPlugin = require("./CompatibilityPlugin"); - -const TemplatedPathPlugin = require("./TemplatedPathPlugin"); -const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin"); -const UseStrictPlugin = require("./UseStrictPlugin"); - -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"); - -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"); -const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin"); -const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin"); -const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin"); - -const ResolverFactory = require("enhanced-resolve").ResolverFactory; - -class WebpackOptionsApply extends OptionsApply { - constructor() { - super(); - } - - process(options, compiler) { - let ExternalsPlugin; - compiler.outputPath = options.output.path; - compiler.recordsInputPath = options.recordsInputPath || options.recordsPath; - compiler.recordsOutputPath = options.recordsOutputPath || options.recordsPath; - compiler.name = options.name; - compiler.dependencies = options.dependencies; - if(typeof options.target === "string") { - let JsonpTemplatePlugin; - let NodeSourcePlugin; - let NodeTargetPlugin; - let NodeTemplatePlugin; - - switch(options.target) { - case "web": - JsonpTemplatePlugin = require("./JsonpTemplatePlugin"); - NodeSourcePlugin = require("./node/NodeSourcePlugin"); - compiler.apply( - new JsonpTemplatePlugin(options.output), - new FunctionModulePlugin(options.output), - new NodeSourcePlugin(options.node), - new LoaderTargetPlugin(options.target) - ); - break; - case "webworker": - { - let WebWorkerTemplatePlugin = require("./webworker/WebWorkerTemplatePlugin"); - NodeSourcePlugin = require("./node/NodeSourcePlugin"); - compiler.apply( - new WebWorkerTemplatePlugin(), - new FunctionModulePlugin(options.output), - new NodeSourcePlugin(options.node), - new LoaderTargetPlugin(options.target) - ); - break; - } - case "node": - case "async-node": - NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); - NodeTargetPlugin = require("./node/NodeTargetPlugin"); - compiler.apply( - new NodeTemplatePlugin({ - asyncChunkLoading: options.target === "async-node" - }), - new FunctionModulePlugin(options.output), - new NodeTargetPlugin(), - new LoaderTargetPlugin("node") - ); - break; - case "node-webkit": - JsonpTemplatePlugin = require("./JsonpTemplatePlugin"); - NodeTargetPlugin = require("./node/NodeTargetPlugin"); - ExternalsPlugin = require("./ExternalsPlugin"); - compiler.apply( - new JsonpTemplatePlugin(options.output), - new FunctionModulePlugin(options.output), - new NodeTargetPlugin(), - new ExternalsPlugin("commonjs", "nw.gui"), - new LoaderTargetPlugin(options.target) - ); - break; - case "atom": - case "electron": - case "electron-main": - NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); - NodeTargetPlugin = require("./node/NodeTargetPlugin"); - ExternalsPlugin = require("./ExternalsPlugin"); - compiler.apply( - new NodeTemplatePlugin({ - asyncChunkLoading: true - }), - new FunctionModulePlugin(options.output), - new NodeTargetPlugin(), - new ExternalsPlugin("commonjs", [ - "app", - "auto-updater", - "browser-window", - "content-tracing", - "dialog", - "electron", - "global-shortcut", - "ipc", - "ipc-main", - "menu", - "menu-item", - "power-monitor", - "power-save-blocker", - "protocol", - "session", - "web-contents", - "tray", - "clipboard", - "crash-reporter", - "native-image", - "screen", - "shell" - ]), - new LoaderTargetPlugin(options.target) - ); - break; - case "electron-renderer": - JsonpTemplatePlugin = require("./JsonpTemplatePlugin"); - NodeTargetPlugin = require("./node/NodeTargetPlugin"); - ExternalsPlugin = require("./ExternalsPlugin"); - compiler.apply( - new JsonpTemplatePlugin(options.output), - new FunctionModulePlugin(options.output), - new NodeTargetPlugin(), - new ExternalsPlugin("commonjs", [ - "desktop-capturer", - "electron", - "ipc", - "ipc-renderer", - "remote", - "web-frame", - "clipboard", - "crash-reporter", - "native-image", - "screen", - "shell" - ]), - new LoaderTargetPlugin(options.target) - ); - break; - default: - throw new Error("Unsupported target '" + options.target + "'."); - } - } else if(options.target !== false) { - options.target(compiler); - } else { - throw new Error("Unsupported target '" + options.target + "'."); - } - - if(options.output.library || options.output.libraryTarget !== "var") { - let LibraryTemplatePlugin = require("./LibraryTemplatePlugin"); - compiler.apply(new LibraryTemplatePlugin(options.output.library, options.output.libraryTarget, options.output.umdNamedDefine, options.output.auxiliaryComment || "", options.output.libraryExport)); - } - if(options.externals) { - ExternalsPlugin = require("./ExternalsPlugin"); - compiler.apply(new ExternalsPlugin(options.output.libraryTarget, options.externals)); - } - let noSources; - let legacy; - let modern; - let comment; - if(options.devtool && (options.devtool.indexOf("sourcemap") >= 0 || options.devtool.indexOf("source-map") >= 0)) { - const hidden = options.devtool.indexOf("hidden") >= 0; - const inline = options.devtool.indexOf("inline") >= 0; - const evalWrapped = options.devtool.indexOf("eval") >= 0; - const cheap = options.devtool.indexOf("cheap") >= 0; - const moduleMaps = options.devtool.indexOf("module") >= 0; - noSources = options.devtool.indexOf("nosources") >= 0; - legacy = options.devtool.indexOf("@") >= 0; - modern = options.devtool.indexOf("#") >= 0; - comment = legacy && modern ? "\n/*\n//@ source" + "MappingURL=[url]\n//# source" + "MappingURL=[url]\n*/" : - legacy ? "\n/*\n//@ source" + "MappingURL=[url]\n*/" : - modern ? "\n//# source" + "MappingURL=[url]" : - null; - let Plugin = evalWrapped ? EvalSourceMapDevToolPlugin : SourceMapDevToolPlugin; - compiler.apply(new Plugin({ - filename: inline ? null : options.output.sourceMapFilename, - moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate, - fallbackModuleFilenameTemplate: options.output.devtoolFallbackModuleFilenameTemplate, - append: hidden ? false : comment, - module: moduleMaps ? true : cheap ? false : true, - columns: cheap ? false : true, - lineToLine: options.output.devtoolLineToLine, - noSources: noSources, - })); - } else if(options.devtool && options.devtool.indexOf("eval") >= 0) { - legacy = options.devtool.indexOf("@") >= 0; - modern = options.devtool.indexOf("#") >= 0; - comment = legacy && modern ? "\n//@ sourceURL=[url]\n//# sourceURL=[url]" : - legacy ? "\n//@ sourceURL=[url]" : - modern ? "\n//# sourceURL=[url]" : - null; - compiler.apply(new EvalDevToolModulePlugin(comment, options.output.devtoolModuleFilenameTemplate)); - } - - compiler.apply(new EntryOptionPlugin()); - compiler.applyPluginsBailResult("entry-option", options.context, options.entry); - - compiler.apply( - new CompatibilityPlugin(), - new HarmonyModulesPlugin(options.module), - new AMDPlugin(options.module, options.amd || {}), - new CommonJsPlugin(options.module), - new LoaderPlugin(), - new NodeStuffPlugin(options.node), - new RequireJsStuffPlugin(), - new APIPlugin(), - new ConstPlugin(), - new UseStrictPlugin(), - new RequireIncludePlugin(), - new RequireEnsurePlugin(), - new RequireContextPlugin(options.resolve.modules, options.resolve.extensions, options.resolve.mainFiles), - new ImportPlugin(options.module), - new SystemPlugin(options.module) - ); - - compiler.apply( - new EnsureChunkConditionsPlugin(), - new RemoveParentModulesPlugin(), - new RemoveEmptyChunksPlugin(), - new MergeDuplicateChunksPlugin(), - new FlagIncludedChunksPlugin(), - new OccurrenceOrderPlugin(true), - new FlagDependencyExportsPlugin(), - new FlagDependencyUsagePlugin() - ); - - if(options.performance) { - compiler.apply(new SizeLimitsPlugin(options.performance)); - } - - compiler.apply(new TemplatedPathPlugin()); - - compiler.apply(new RecordIdsPlugin()); - - compiler.apply(new WarnCaseSensitiveModulesPlugin()); - - if(options.cache) { - let CachePlugin = require("./CachePlugin"); - compiler.apply(new CachePlugin(typeof options.cache === "object" ? options.cache : null)); - } - - compiler.applyPlugins("after-plugins", compiler); - if(!compiler.inputFileSystem) throw new Error("No input filesystem provided"); - compiler.resolvers.normal = ResolverFactory.createResolver(Object.assign({ - fileSystem: compiler.inputFileSystem - }, options.resolve)); - compiler.resolvers.context = ResolverFactory.createResolver(Object.assign({ - fileSystem: compiler.inputFileSystem, - resolveToContext: true - }, options.resolve)); - compiler.resolvers.loader = ResolverFactory.createResolver(Object.assign({ - fileSystem: compiler.inputFileSystem - }, options.resolveLoader)); - compiler.applyPlugins("after-resolvers", compiler); - return options; - } -} - -module.exports = WebpackOptionsApply; +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const OptionsApply = require("./OptionsApply"); + +const JavascriptModulesPlugin = require("./JavascriptModulesPlugin"); +const JsonModulesPlugin = require("./JsonModulesPlugin"); +const WebAssemblyModulesPlugin = require("./wasm/WebAssemblyModulesPlugin"); + +const LoaderTargetPlugin = require("./LoaderTargetPlugin"); +const FunctionModulePlugin = require("./FunctionModulePlugin"); +const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin"); +const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin"); +const EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin"); + +const EntryOptionPlugin = require("./EntryOptionPlugin"); +const RecordIdsPlugin = require("./RecordIdsPlugin"); + +const APIPlugin = require("./APIPlugin"); +const ConstPlugin = require("./ConstPlugin"); +const RequireJsStuffPlugin = require("./RequireJsStuffPlugin"); +const NodeStuffPlugin = require("./NodeStuffPlugin"); +const CompatibilityPlugin = require("./CompatibilityPlugin"); + +const TemplatedPathPlugin = require("./TemplatedPathPlugin"); +const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin"); +const UseStrictPlugin = require("./UseStrictPlugin"); + +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"); + +const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin"); + +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 OccurrenceChunkOrderPlugin = require("./optimize/OccurrenceChunkOrderPlugin"); +const OccurrenceModuleOrderPlugin = require("./optimize/OccurrenceModuleOrderPlugin"); +const NaturalChunkOrderPlugin = require("./optimize/NaturalChunkOrderPlugin"); +const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin"); +const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin"); +const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin"); +const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin"); +const SplitChunksPlugin = require("./optimize/SplitChunksPlugin"); +const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin"); +const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin"); +const NamedModulesPlugin = require("./NamedModulesPlugin"); +const NamedChunksPlugin = require("./NamedChunksPlugin"); +const HashedModuleIdsPlugin = require("./HashedModuleIdsPlugin"); +const DefinePlugin = require("./DefinePlugin"); +const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin"); +const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin"); + +class WebpackOptionsApply extends OptionsApply { + constructor() { + super(); + } + + process(options, compiler) { + let ExternalsPlugin; + compiler.outputPath = options.output.path; + compiler.recordsInputPath = options.recordsInputPath || options.recordsPath; + compiler.recordsOutputPath = + options.recordsOutputPath || options.recordsPath; + compiler.name = options.name; + compiler.dependencies = options.dependencies; + if (typeof options.target === "string") { + let JsonpTemplatePlugin; + let FetchCompileWasmTemplatePlugin; + let ReadFileCompileWasmTemplatePlugin; + let NodeSourcePlugin; + let NodeTargetPlugin; + let NodeTemplatePlugin; + + switch (options.target) { + case "web": + JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); + FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin"); + NodeSourcePlugin = require("./node/NodeSourcePlugin"); + new JsonpTemplatePlugin().apply(compiler); + new FetchCompileWasmTemplatePlugin({ + mangleImports: options.optimization.mangleWasmImports + }).apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeSourcePlugin(options.node).apply(compiler); + new LoaderTargetPlugin(options.target).apply(compiler); + break; + case "webworker": { + let WebWorkerTemplatePlugin = require("./webworker/WebWorkerTemplatePlugin"); + FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin"); + NodeSourcePlugin = require("./node/NodeSourcePlugin"); + new WebWorkerTemplatePlugin().apply(compiler); + new FetchCompileWasmTemplatePlugin({ + mangleImports: options.optimization.mangleWasmImports + }).apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeSourcePlugin(options.node).apply(compiler); + new LoaderTargetPlugin(options.target).apply(compiler); + break; + } + case "node": + case "async-node": + NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); + ReadFileCompileWasmTemplatePlugin = require("./node/ReadFileCompileWasmTemplatePlugin"); + NodeTargetPlugin = require("./node/NodeTargetPlugin"); + new NodeTemplatePlugin({ + asyncChunkLoading: options.target === "async-node" + }).apply(compiler); + new ReadFileCompileWasmTemplatePlugin({ + mangleImports: options.optimization.mangleWasmImports + }).apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeTargetPlugin().apply(compiler); + new LoaderTargetPlugin("node").apply(compiler); + break; + case "node-webkit": + JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); + NodeTargetPlugin = require("./node/NodeTargetPlugin"); + ExternalsPlugin = require("./ExternalsPlugin"); + new JsonpTemplatePlugin().apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeTargetPlugin().apply(compiler); + new ExternalsPlugin("commonjs", "nw.gui").apply(compiler); + new LoaderTargetPlugin(options.target).apply(compiler); + break; + case "electron-main": + NodeTemplatePlugin = require("./node/NodeTemplatePlugin"); + NodeTargetPlugin = require("./node/NodeTargetPlugin"); + ExternalsPlugin = require("./ExternalsPlugin"); + new NodeTemplatePlugin({ + asyncChunkLoading: true + }).apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeTargetPlugin().apply(compiler); + new ExternalsPlugin("commonjs", [ + "app", + "auto-updater", + "browser-window", + "clipboard", + "content-tracing", + "crash-reporter", + "dialog", + "electron", + "global-shortcut", + "ipc", + "ipc-main", + "menu", + "menu-item", + "native-image", + "original-fs", + "power-monitor", + "power-save-blocker", + "protocol", + "screen", + "session", + "shell", + "tray", + "web-contents" + ]).apply(compiler); + new LoaderTargetPlugin(options.target).apply(compiler); + break; + case "electron-renderer": + JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin"); + FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin"); + NodeTargetPlugin = require("./node/NodeTargetPlugin"); + ExternalsPlugin = require("./ExternalsPlugin"); + new JsonpTemplatePlugin().apply(compiler); + new FetchCompileWasmTemplatePlugin({ + mangleImports: options.optimization.mangleWasmImports + }).apply(compiler); + new FunctionModulePlugin().apply(compiler); + new NodeTargetPlugin().apply(compiler); + new ExternalsPlugin("commonjs", [ + "clipboard", + "crash-reporter", + "desktop-capturer", + "electron", + "ipc", + "ipc-renderer", + "native-image", + "original-fs", + "remote", + "screen", + "shell", + "web-frame" + ]).apply(compiler); + new LoaderTargetPlugin(options.target).apply(compiler); + break; + default: + throw new Error("Unsupported target '" + options.target + "'."); + } + } else if (options.target !== false) { + options.target(compiler); + } else { + throw new Error("Unsupported target '" + options.target + "'."); + } + + if (options.output.library || options.output.libraryTarget !== "var") { + const LibraryTemplatePlugin = require("./LibraryTemplatePlugin"); + new LibraryTemplatePlugin( + options.output.library, + options.output.libraryTarget, + options.output.umdNamedDefine, + options.output.auxiliaryComment || "", + options.output.libraryExport + ).apply(compiler); + } + if (options.externals) { + ExternalsPlugin = require("./ExternalsPlugin"); + new ExternalsPlugin( + options.output.libraryTarget, + options.externals + ).apply(compiler); + } + + let noSources; + let legacy; + let modern; + let comment; + if ( + options.devtool && + (options.devtool.includes("sourcemap") || + options.devtool.includes("source-map")) + ) { + 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("#"); + comment = + legacy && modern + ? "\n/*\n//@ source" + + "MappingURL=[url]\n//# source" + + "MappingURL=[url]\n*/" + : legacy + ? "\n/*\n//@ source" + "MappingURL=[url]\n*/" + : modern + ? "\n//# source" + "MappingURL=[url]" + : null; + const Plugin = evalWrapped + ? EvalSourceMapDevToolPlugin + : SourceMapDevToolPlugin; + new Plugin({ + filename: inline ? null : options.output.sourceMapFilename, + moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate, + fallbackModuleFilenameTemplate: + options.output.devtoolFallbackModuleFilenameTemplate, + append: hidden ? false : comment, + module: moduleMaps ? true : cheap ? false : true, + columns: cheap ? false : true, + lineToLine: options.output.devtoolLineToLine, + noSources: noSources, + namespace: options.output.devtoolNamespace + }).apply(compiler); + } else if (options.devtool && options.devtool.includes("eval")) { + legacy = options.devtool.includes("@"); + modern = options.devtool.includes("#"); + comment = + legacy && modern + ? "\n//@ sourceURL=[url]\n//# sourceURL=[url]" + : legacy + ? "\n//@ sourceURL=[url]" + : modern + ? "\n//# sourceURL=[url]" + : null; + new EvalDevToolModulePlugin({ + sourceUrlComment: comment, + moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate, + namespace: options.output.devtoolNamespace + }).apply(compiler); + } + + new JavascriptModulesPlugin().apply(compiler); + new JsonModulesPlugin().apply(compiler); + new WebAssemblyModulesPlugin({ + mangleImports: options.optimization.mangleWasmImports + }).apply(compiler); + + new EntryOptionPlugin().apply(compiler); + compiler.hooks.entryOption.call(options.context, options.entry); + + 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); + new RequireContextPlugin( + options.resolve.modules, + options.resolve.extensions, + options.resolve.mainFiles + ).apply(compiler); + new ImportPlugin(options.module).apply(compiler); + new SystemPlugin(options.module).apply(compiler); + + if (typeof options.mode !== "string") { + new WarnNoModeSetPlugin().apply(compiler); + } + + new EnsureChunkConditionsPlugin().apply(compiler); + if (options.optimization.removeAvailableModules) { + new RemoveParentModulesPlugin().apply(compiler); + } + if (options.optimization.removeEmptyChunks) { + new RemoveEmptyChunksPlugin().apply(compiler); + } + if (options.optimization.mergeDuplicateChunks) { + new MergeDuplicateChunksPlugin().apply(compiler); + } + if (options.optimization.flagIncludedChunks) { + new FlagIncludedChunksPlugin().apply(compiler); + } + if (options.optimization.sideEffects) { + new SideEffectsFlagPlugin().apply(compiler); + } + if (options.optimization.providedExports) { + new FlagDependencyExportsPlugin().apply(compiler); + } + if (options.optimization.usedExports) { + new FlagDependencyUsagePlugin().apply(compiler); + } + if (options.optimization.concatenateModules) { + new ModuleConcatenationPlugin().apply(compiler); + } + if (options.optimization.splitChunks) { + new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler); + } + if (options.optimization.runtimeChunk) { + new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler); + } + if (options.optimization.noEmitOnErrors) { + new NoEmitOnErrorsPlugin().apply(compiler); + } + if (options.optimization.checkWasmTypes) { + new WasmFinalizeExportsPlugin().apply(compiler); + } + let moduleIds = options.optimization.moduleIds; + if (moduleIds === undefined) { + // TODO webpack 5 remove all these options + if (options.optimization.occurrenceOrder) { + moduleIds = "size"; + } + if (options.optimization.namedModules) { + moduleIds = "named"; + } + if (options.optimization.hashedModuleIds) { + moduleIds = "hashed"; + } + if (moduleIds === undefined) { + moduleIds = "natural"; + } + } + if (moduleIds) { + switch (moduleIds) { + case "natural": + // TODO webpack 5: see hint in Compilation.sortModules + break; + case "named": + new NamedModulesPlugin().apply(compiler); + break; + case "hashed": + new HashedModuleIdsPlugin().apply(compiler); + break; + case "size": + new OccurrenceModuleOrderPlugin({ + prioritiseInitial: true + }).apply(compiler); + break; + case "total-size": + new OccurrenceModuleOrderPlugin({ + prioritiseInitial: false + }).apply(compiler); + break; + default: + throw new Error( + `webpack bug: moduleIds: ${moduleIds} is not implemented` + ); + } + } + let chunkIds = options.optimization.chunkIds; + if (chunkIds === undefined) { + // TODO webpack 5 remove all these options + if (options.optimization.occurrenceOrder) { + // This looks weird but it's for backward-compat + // This bug already existed before adding this feature + chunkIds = "total-size"; + } + if (options.optimization.namedChunks) { + chunkIds = "named"; + } + if (chunkIds === undefined) { + chunkIds = "natural"; + } + } + if (chunkIds) { + switch (chunkIds) { + case "natural": + new NaturalChunkOrderPlugin().apply(compiler); + break; + case "named": + // TODO webapck 5: for backward-compat this need to have OccurrenceChunkOrderPlugin too + // The NamedChunksPlugin doesn't give every chunk a name + // This should be fixed, and the OccurrenceChunkOrderPlugin should be removed here. + new OccurrenceChunkOrderPlugin({ + prioritiseInitial: false + }).apply(compiler); + new NamedChunksPlugin().apply(compiler); + break; + case "size": + new OccurrenceChunkOrderPlugin({ + prioritiseInitial: true + }).apply(compiler); + break; + case "total-size": + new OccurrenceChunkOrderPlugin({ + prioritiseInitial: false + }).apply(compiler); + break; + default: + throw new Error( + `webpack bug: chunkIds: ${chunkIds} is not implemented` + ); + } + } + if (options.optimization.nodeEnv) { + new DefinePlugin({ + "process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv) + }).apply(compiler); + } + if (options.optimization.minimize) { + for (const minimizer of options.optimization.minimizer) { + minimizer.apply(compiler); + } + } + + if (options.performance) { + new SizeLimitsPlugin(options.performance).apply(compiler); + } + + new TemplatedPathPlugin().apply(compiler); + + new RecordIdsPlugin({ + portableIds: options.optimization.portableRecords + }).apply(compiler); + + new WarnCaseSensitiveModulesPlugin().apply(compiler); + + if (options.cache) { + const CachePlugin = require("./CachePlugin"); + new CachePlugin( + typeof options.cache === "object" ? options.cache : null + ).apply(compiler); + } + + compiler.hooks.afterPlugins.call(compiler); + 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 + ); + }); + compiler.hooks.afterResolvers.call(compiler); + return options; + } +} + +module.exports = WebpackOptionsApply; -- cgit v1.2.3