123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- 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")
- });
|