123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /*
- 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;
|