121 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			5.7 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")
 | |
| });
 |