121 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
	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/webpackOptionsSchema.json");
 | 
						|
 | 
						|
function webpack(options, callback) {
 | 
						|
	const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchema, options);
 | 
						|
	if(webpackOptionsValidationErrors.length) {
 | 
						|
		throw new WebpackOptionsValidationError(webpackOptionsValidationErrors);
 | 
						|
	}
 | 
						|
	let compiler;
 | 
						|
	if(Array.isArray(options)) {
 | 
						|
		compiler = new MultiCompiler(options.map(options => webpack(options)));
 | 
						|
	} else if(typeof options === "object") {
 | 
						|
		// TODO webpack 4: process returns options
 | 
						|
		new WebpackOptionsDefaulter().process(options);
 | 
						|
 | 
						|
		compiler = new Compiler();
 | 
						|
		compiler.context = options.context;
 | 
						|
		compiler.options = options;
 | 
						|
		new NodeEnvironmentPlugin().apply(compiler);
 | 
						|
		if(options.plugins && Array.isArray(options.plugins)) {
 | 
						|
			compiler.apply.apply(compiler, options.plugins);
 | 
						|
		}
 | 
						|
		compiler.applyPlugins("environment");
 | 
						|
		compiler.applyPlugins("after-environment");
 | 
						|
		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;
 | 
						|
 | 
						|
webpack.WebpackOptionsDefaulter = WebpackOptionsDefaulter;
 | 
						|
webpack.WebpackOptionsApply = WebpackOptionsApply;
 | 
						|
webpack.Compiler = Compiler;
 | 
						|
webpack.MultiCompiler = MultiCompiler;
 | 
						|
webpack.NodeEnvironmentPlugin = NodeEnvironmentPlugin;
 | 
						|
webpack.validate = validateSchema.bind(this, webpackOptionsSchema);
 | 
						|
webpack.validateSchema = validateSchema;
 | 
						|
webpack.WebpackOptionsValidationError = WebpackOptionsValidationError;
 | 
						|
 | 
						|
function exportPlugins(obj, mappings) {
 | 
						|
	Object.keys(mappings).forEach(name => {
 | 
						|
		Object.defineProperty(obj, name, {
 | 
						|
			configurable: false,
 | 
						|
			enumerable: true,
 | 
						|
			get: mappings[name]
 | 
						|
		});
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
exportPlugins(exports, {
 | 
						|
	"DefinePlugin": () => require("./DefinePlugin"),
 | 
						|
	"NormalModuleReplacementPlugin": () => require("./NormalModuleReplacementPlugin"),
 | 
						|
	"ContextReplacementPlugin": () => require("./ContextReplacementPlugin"),
 | 
						|
	"ContextExclusionPlugin": () => require("./ContextExclusionPlugin"),
 | 
						|
	"IgnorePlugin": () => require("./IgnorePlugin"),
 | 
						|
	"WatchIgnorePlugin": () => require("./WatchIgnorePlugin"),
 | 
						|
	"BannerPlugin": () => require("./BannerPlugin"),
 | 
						|
	"PrefetchPlugin": () => require("./PrefetchPlugin"),
 | 
						|
	"AutomaticPrefetchPlugin": () => require("./AutomaticPrefetchPlugin"),
 | 
						|
	"ProvidePlugin": () => require("./ProvidePlugin"),
 | 
						|
	"HotModuleReplacementPlugin": () => require("./HotModuleReplacementPlugin"),
 | 
						|
	"SourceMapDevToolPlugin": () => require("./SourceMapDevToolPlugin"),
 | 
						|
	"EvalSourceMapDevToolPlugin": () => require("./EvalSourceMapDevToolPlugin"),
 | 
						|
	"EvalDevToolModulePlugin": () => require("./EvalDevToolModulePlugin"),
 | 
						|
	"CachePlugin": () => require("./CachePlugin"),
 | 
						|
	"ExtendedAPIPlugin": () => require("./ExtendedAPIPlugin"),
 | 
						|
	"ExternalsPlugin": () => require("./ExternalsPlugin"),
 | 
						|
	"JsonpTemplatePlugin": () => require("./JsonpTemplatePlugin"),
 | 
						|
	"LibraryTemplatePlugin": () => require("./LibraryTemplatePlugin"),
 | 
						|
	"LoaderTargetPlugin": () => require("./LoaderTargetPlugin"),
 | 
						|
	"MemoryOutputFileSystem": () => require("./MemoryOutputFileSystem"),
 | 
						|
	"ProgressPlugin": () => require("./ProgressPlugin"),
 | 
						|
	"SetVarMainTemplatePlugin": () => require("./SetVarMainTemplatePlugin"),
 | 
						|
	"UmdMainTemplatePlugin": () => require("./UmdMainTemplatePlugin"),
 | 
						|
	"NoErrorsPlugin": () => require("./NoErrorsPlugin"),
 | 
						|
	"NoEmitOnErrorsPlugin": () => require("./NoEmitOnErrorsPlugin"),
 | 
						|
	"NewWatchingPlugin": () => require("./NewWatchingPlugin"),
 | 
						|
	"EnvironmentPlugin": () => require("./EnvironmentPlugin"),
 | 
						|
	"DllPlugin": () => require("./DllPlugin"),
 | 
						|
	"DllReferencePlugin": () => require("./DllReferencePlugin"),
 | 
						|
	"LoaderOptionsPlugin": () => require("./LoaderOptionsPlugin"),
 | 
						|
	"NamedModulesPlugin": () => require("./NamedModulesPlugin"),
 | 
						|
	"NamedChunksPlugin": () => require("./NamedChunksPlugin"),
 | 
						|
	"HashedModuleIdsPlugin": () => require("./HashedModuleIdsPlugin"),
 | 
						|
	"ModuleFilenameHelpers": () => require("./ModuleFilenameHelpers")
 | 
						|
});
 | 
						|
exportPlugins(exports.optimize = {}, {
 | 
						|
	"AggressiveMergingPlugin": () => require("./optimize/AggressiveMergingPlugin"),
 | 
						|
	"AggressiveSplittingPlugin": () => require("./optimize/AggressiveSplittingPlugin"),
 | 
						|
	"CommonsChunkPlugin": () => require("./optimize/CommonsChunkPlugin"),
 | 
						|
	"ChunkModuleIdRangePlugin": () => require("./optimize/ChunkModuleIdRangePlugin"),
 | 
						|
	"DedupePlugin": () => require("./optimize/DedupePlugin"),
 | 
						|
	"LimitChunkCountPlugin": () => require("./optimize/LimitChunkCountPlugin"),
 | 
						|
	"MinChunkSizePlugin": () => require("./optimize/MinChunkSizePlugin"),
 | 
						|
	"ModuleConcatenationPlugin": () => require("./optimize/ModuleConcatenationPlugin"),
 | 
						|
	"OccurrenceOrderPlugin": () => require("./optimize/OccurrenceOrderPlugin"),
 | 
						|
	"UglifyJsPlugin": () => require("./optimize/UglifyJsPlugin")
 | 
						|
});
 |