| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const Compiler = require("./Compiler");const MultiCompiler = require("./MultiCompiler");const NodeEnvironmentPlugin = require("./node/NodeEnvironmentPlugin");const WebpackOptionsApply = require("./WebpackOptionsApply");const WebpackOptionsDefaulter = require("./WebpackOptionsDefaulter");const validateSchema = require("./validateSchema");const WebpackOptionsValidationError = require("./WebpackOptionsValidationError");const webpackOptionsSchema = require("../schemas/WebpackOptions.json");const RemovedPluginError = require("./RemovedPluginError");const version = require("../package.json").version;/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions *//** * @param {WebpackOptions} options options object * @param {function(Error=, Stats=): void=} callback callback * @returns {Compiler | MultiCompiler} the compiler object */const webpack = (options, callback) => {	const webpackOptionsValidationErrors = validateSchema(		webpackOptionsSchema,		options	);	if (webpackOptionsValidationErrors.length) {		throw new WebpackOptionsValidationError(webpackOptionsValidationErrors);	}	let compiler;	if (Array.isArray(options)) {		compiler = new MultiCompiler(			Array.from(options).map(options => webpack(options))		);	} else if (typeof options === "object") {		options = new WebpackOptionsDefaulter().process(options);		compiler = new Compiler(options.context);		compiler.options = options;		new NodeEnvironmentPlugin({			infrastructureLogging: options.infrastructureLogging		}).apply(compiler);		if (options.plugins && Array.isArray(options.plugins)) {			for (const plugin of options.plugins) {				if (typeof plugin === "function") {					plugin.call(compiler, compiler);				} else {					plugin.apply(compiler);				}			}		}		compiler.hooks.environment.call();		compiler.hooks.afterEnvironment.call();		compiler.options = new WebpackOptionsApply().process(options, compiler);	} else {		throw new Error("Invalid argument: options");	}	if (callback) {		if (typeof callback !== "function") {			throw new Error("Invalid argument: callback");		}		if (			options.watch === true ||			(Array.isArray(options) && options.some(o => o.watch))		) {			const watchOptions = Array.isArray(options)				? options.map(o => o.watchOptions || {})				: options.watchOptions || {};			return compiler.watch(watchOptions, callback);		}		compiler.run(callback);	}	return compiler;};exports = module.exports = webpack;exports.version = version;webpack.WebpackOptionsDefaulter = WebpackOptionsDefaulter;webpack.WebpackOptionsApply = WebpackOptionsApply;webpack.Compiler = Compiler;webpack.MultiCompiler = MultiCompiler;webpack.NodeEnvironmentPlugin = NodeEnvironmentPlugin;// @ts-ignore Global @this directive is not supportedwebpack.validate = validateSchema.bind(this, webpackOptionsSchema);webpack.validateSchema = validateSchema;webpack.WebpackOptionsValidationError = WebpackOptionsValidationError;const exportPlugins = (obj, mappings) => {	for (const name of Object.keys(mappings)) {		Object.defineProperty(obj, name, {			configurable: false,			enumerable: true,			get: mappings[name]		});	}};exportPlugins(exports, {	AutomaticPrefetchPlugin: () => require("./AutomaticPrefetchPlugin"),	BannerPlugin: () => require("./BannerPlugin"),	CachePlugin: () => require("./CachePlugin"),	ContextExclusionPlugin: () => require("./ContextExclusionPlugin"),	ContextReplacementPlugin: () => require("./ContextReplacementPlugin"),	DefinePlugin: () => require("./DefinePlugin"),	Dependency: () => require("./Dependency"),	DllPlugin: () => require("./DllPlugin"),	DllReferencePlugin: () => require("./DllReferencePlugin"),	EnvironmentPlugin: () => require("./EnvironmentPlugin"),	EvalDevToolModulePlugin: () => require("./EvalDevToolModulePlugin"),	EvalSourceMapDevToolPlugin: () => require("./EvalSourceMapDevToolPlugin"),	ExtendedAPIPlugin: () => require("./ExtendedAPIPlugin"),	ExternalsPlugin: () => require("./ExternalsPlugin"),	HashedModuleIdsPlugin: () => require("./HashedModuleIdsPlugin"),	HotModuleReplacementPlugin: () => require("./HotModuleReplacementPlugin"),	IgnorePlugin: () => require("./IgnorePlugin"),	LibraryTemplatePlugin: () => require("./LibraryTemplatePlugin"),	LoaderOptionsPlugin: () => require("./LoaderOptionsPlugin"),	LoaderTargetPlugin: () => require("./LoaderTargetPlugin"),	MemoryOutputFileSystem: () => require("./MemoryOutputFileSystem"),	Module: () => require("./Module"),	ModuleFilenameHelpers: () => require("./ModuleFilenameHelpers"),	NamedChunksPlugin: () => require("./NamedChunksPlugin"),	NamedModulesPlugin: () => require("./NamedModulesPlugin"),	NoEmitOnErrorsPlugin: () => require("./NoEmitOnErrorsPlugin"),	NormalModuleReplacementPlugin: () =>		require("./NormalModuleReplacementPlugin"),	PrefetchPlugin: () => require("./PrefetchPlugin"),	ProgressPlugin: () => require("./ProgressPlugin"),	ProvidePlugin: () => require("./ProvidePlugin"),	SetVarMainTemplatePlugin: () => require("./SetVarMainTemplatePlugin"),	SingleEntryPlugin: () => require("./SingleEntryPlugin"),	SourceMapDevToolPlugin: () => require("./SourceMapDevToolPlugin"),	Stats: () => require("./Stats"),	Template: () => require("./Template"),	UmdMainTemplatePlugin: () => require("./UmdMainTemplatePlugin"),	WatchIgnorePlugin: () => require("./WatchIgnorePlugin")});exportPlugins((exports.dependencies = {}), {	DependencyReference: () => require("./dependencies/DependencyReference")});exportPlugins((exports.optimize = {}), {	AggressiveMergingPlugin: () => require("./optimize/AggressiveMergingPlugin"),	AggressiveSplittingPlugin: () =>		require("./optimize/AggressiveSplittingPlugin"),	ChunkModuleIdRangePlugin: () =>		require("./optimize/ChunkModuleIdRangePlugin"),	LimitChunkCountPlugin: () => require("./optimize/LimitChunkCountPlugin"),	MinChunkSizePlugin: () => require("./optimize/MinChunkSizePlugin"),	ModuleConcatenationPlugin: () =>		require("./optimize/ModuleConcatenationPlugin"),	OccurrenceOrderPlugin: () => require("./optimize/OccurrenceOrderPlugin"),	OccurrenceModuleOrderPlugin: () =>		require("./optimize/OccurrenceModuleOrderPlugin"),	OccurrenceChunkOrderPlugin: () =>		require("./optimize/OccurrenceChunkOrderPlugin"),	RuntimeChunkPlugin: () => require("./optimize/RuntimeChunkPlugin"),	SideEffectsFlagPlugin: () => require("./optimize/SideEffectsFlagPlugin"),	SplitChunksPlugin: () => require("./optimize/SplitChunksPlugin")});exportPlugins((exports.web = {}), {	FetchCompileWasmTemplatePlugin: () =>		require("./web/FetchCompileWasmTemplatePlugin"),	JsonpTemplatePlugin: () => require("./web/JsonpTemplatePlugin")});exportPlugins((exports.webworker = {}), {	WebWorkerTemplatePlugin: () => require("./webworker/WebWorkerTemplatePlugin")});exportPlugins((exports.node = {}), {	NodeTemplatePlugin: () => require("./node/NodeTemplatePlugin"),	ReadFileCompileWasmTemplatePlugin: () =>		require("./node/ReadFileCompileWasmTemplatePlugin")});exportPlugins((exports.debug = {}), {	ProfilingPlugin: () => require("./debug/ProfilingPlugin")});exportPlugins((exports.util = {}), {	createHash: () => require("./util/createHash")});const defineMissingPluginError = (namespace, pluginName, errorMessage) => {	Object.defineProperty(namespace, pluginName, {		configurable: false,		enumerable: true,		get() {			throw new RemovedPluginError(errorMessage);		}	});};// TODO remove in webpack 5defineMissingPluginError(	exports.optimize,	"UglifyJsPlugin",	"webpack.optimize.UglifyJsPlugin has been removed, please use config.optimization.minimize instead.");// TODO remove in webpack 5defineMissingPluginError(	exports.optimize,	"CommonsChunkPlugin",	"webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.");
 |