feat(presets): poc of presets
This commit is contained in:
parent
ae0dc62b7b
commit
eab8cf68bb
|
@ -0,0 +1,12 @@
|
||||||
|
const merge = require("webpack-merge");
|
||||||
|
|
||||||
|
class PresetsApply {
|
||||||
|
constructor() {
|
||||||
|
this.presets = new Set();
|
||||||
|
}
|
||||||
|
process(options) {
|
||||||
|
return merge({}, options, ...Array.from(this.presets));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = PresetsApply;
|
|
@ -0,0 +1,20 @@
|
||||||
|
const path = require("path");
|
||||||
|
const PresetsApply = require("./PresetsApply");
|
||||||
|
|
||||||
|
const pkgPath = path.join(process.cwd(), "package.json");
|
||||||
|
const pkg = require(pkgPath);
|
||||||
|
const presets = Object.keys(pkg.devDependencies)
|
||||||
|
.filter(pkgName => pkgName.startsWith("webpack-preset-"))
|
||||||
|
.map(pkgName => path.resolve(process.cwd(), "node_modules", pkgName))
|
||||||
|
.map(require);
|
||||||
|
|
||||||
|
class WebpackPresetsApply extends PresetsApply {
|
||||||
|
constructor() {
|
||||||
|
super(); // will set this.presets;
|
||||||
|
presets.forEach(preset => {
|
||||||
|
this.presets.add(preset);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = WebpackPresetsApply;
|
116
lib/webpack.js
116
lib/webpack.js
|
@ -12,8 +12,10 @@ const WebpackOptionsDefaulter = require("./WebpackOptionsDefaulter");
|
||||||
const validateSchema = require("./validateSchema");
|
const validateSchema = require("./validateSchema");
|
||||||
const WebpackOptionsValidationError = require("./WebpackOptionsValidationError");
|
const WebpackOptionsValidationError = require("./WebpackOptionsValidationError");
|
||||||
const webpackOptionsSchema = require("../schemas/WebpackOptions.json");
|
const webpackOptionsSchema = require("../schemas/WebpackOptions.json");
|
||||||
|
const WebpackPresetsApply = require("./WebpackPresetsApply");
|
||||||
|
|
||||||
const webpack = (options, callback) => {
|
const webpack = (options, callback) => {
|
||||||
|
console.log("WERBPERK");
|
||||||
const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchema, options);
|
const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchema, options);
|
||||||
if(webpackOptionsValidationErrors.length) {
|
if(webpackOptionsValidationErrors.length) {
|
||||||
throw new WebpackOptionsValidationError(webpackOptionsValidationErrors);
|
throw new WebpackOptionsValidationError(webpackOptionsValidationErrors);
|
||||||
|
@ -22,8 +24,8 @@ const webpack = (options, callback) => {
|
||||||
if(Array.isArray(options)) {
|
if(Array.isArray(options)) {
|
||||||
compiler = new MultiCompiler(options.map(options => webpack(options)));
|
compiler = new MultiCompiler(options.map(options => webpack(options)));
|
||||||
} else if(typeof options === "object") {
|
} else if(typeof options === "object") {
|
||||||
|
options = new WebpackPresetsApply().process(options);
|
||||||
options = new WebpackOptionsDefaulter().process(options);
|
options = new WebpackOptionsDefaulter().process(options);
|
||||||
|
|
||||||
compiler = new Compiler(options.context);
|
compiler = new Compiler(options.context);
|
||||||
compiler.options = options;
|
compiler.options = options;
|
||||||
new NodeEnvironmentPlugin().apply(compiler);
|
new NodeEnvironmentPlugin().apply(compiler);
|
||||||
|
@ -41,7 +43,7 @@ const webpack = (options, callback) => {
|
||||||
if(callback) {
|
if(callback) {
|
||||||
if(typeof callback !== "function") throw new Error("Invalid argument: callback");
|
if(typeof callback !== "function") throw new Error("Invalid argument: callback");
|
||||||
if(options.watch === true || (Array.isArray(options) && options.some(o => o.watch))) {
|
if(options.watch === true || (Array.isArray(options) && options.some(o => o.watch))) {
|
||||||
const watchOptions = Array.isArray(options) ? options.map(o => o.watchOptions || {}) : (options.watchOptions || {});
|
const watchOptions = Array.isArray(options) ? options.map(o => o.watchOptions || {}) : options.watchOptions || {};
|
||||||
return compiler.watch(watchOptions, callback);
|
return compiler.watch(watchOptions, callback);
|
||||||
}
|
}
|
||||||
compiler.run(callback);
|
compiler.run(callback);
|
||||||
|
@ -71,64 +73,64 @@ const exportPlugins = (obj, mappings) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
exportPlugins(exports, {
|
exportPlugins(exports, {
|
||||||
"AutomaticPrefetchPlugin": () => require("./AutomaticPrefetchPlugin"),
|
AutomaticPrefetchPlugin: () => require("./AutomaticPrefetchPlugin"),
|
||||||
"BannerPlugin": () => require("./BannerPlugin"),
|
BannerPlugin: () => require("./BannerPlugin"),
|
||||||
"CachePlugin": () => require("./CachePlugin"),
|
CachePlugin: () => require("./CachePlugin"),
|
||||||
"ContextExclusionPlugin": () => require("./ContextExclusionPlugin"),
|
ContextExclusionPlugin: () => require("./ContextExclusionPlugin"),
|
||||||
"ContextReplacementPlugin": () => require("./ContextReplacementPlugin"),
|
ContextReplacementPlugin: () => require("./ContextReplacementPlugin"),
|
||||||
"DefinePlugin": () => require("./DefinePlugin"),
|
DefinePlugin: () => require("./DefinePlugin"),
|
||||||
"DllPlugin": () => require("./DllPlugin"),
|
DllPlugin: () => require("./DllPlugin"),
|
||||||
"DllReferencePlugin": () => require("./DllReferencePlugin"),
|
DllReferencePlugin: () => require("./DllReferencePlugin"),
|
||||||
"EnvironmentPlugin": () => require("./EnvironmentPlugin"),
|
EnvironmentPlugin: () => require("./EnvironmentPlugin"),
|
||||||
"EvalDevToolModulePlugin": () => require("./EvalDevToolModulePlugin"),
|
EvalDevToolModulePlugin: () => require("./EvalDevToolModulePlugin"),
|
||||||
"EvalSourceMapDevToolPlugin": () => require("./EvalSourceMapDevToolPlugin"),
|
EvalSourceMapDevToolPlugin: () => require("./EvalSourceMapDevToolPlugin"),
|
||||||
"ExtendedAPIPlugin": () => require("./ExtendedAPIPlugin"),
|
ExtendedAPIPlugin: () => require("./ExtendedAPIPlugin"),
|
||||||
"ExternalsPlugin": () => require("./ExternalsPlugin"),
|
ExternalsPlugin: () => require("./ExternalsPlugin"),
|
||||||
"HashedModuleIdsPlugin": () => require("./HashedModuleIdsPlugin"),
|
HashedModuleIdsPlugin: () => require("./HashedModuleIdsPlugin"),
|
||||||
"HotModuleReplacementPlugin": () => require("./HotModuleReplacementPlugin"),
|
HotModuleReplacementPlugin: () => require("./HotModuleReplacementPlugin"),
|
||||||
"IgnorePlugin": () => require("./IgnorePlugin"),
|
IgnorePlugin: () => require("./IgnorePlugin"),
|
||||||
"LibraryTemplatePlugin": () => require("./LibraryTemplatePlugin"),
|
LibraryTemplatePlugin: () => require("./LibraryTemplatePlugin"),
|
||||||
"LoaderOptionsPlugin": () => require("./LoaderOptionsPlugin"),
|
LoaderOptionsPlugin: () => require("./LoaderOptionsPlugin"),
|
||||||
"LoaderTargetPlugin": () => require("./LoaderTargetPlugin"),
|
LoaderTargetPlugin: () => require("./LoaderTargetPlugin"),
|
||||||
"MemoryOutputFileSystem": () => require("./MemoryOutputFileSystem"),
|
MemoryOutputFileSystem: () => require("./MemoryOutputFileSystem"),
|
||||||
"ModuleFilenameHelpers": () => require("./ModuleFilenameHelpers"),
|
ModuleFilenameHelpers: () => require("./ModuleFilenameHelpers"),
|
||||||
"NamedChunksPlugin": () => require("./NamedChunksPlugin"),
|
NamedChunksPlugin: () => require("./NamedChunksPlugin"),
|
||||||
"NamedModulesPlugin": () => require("./NamedModulesPlugin"),
|
NamedModulesPlugin: () => require("./NamedModulesPlugin"),
|
||||||
"NoEmitOnErrorsPlugin": () => require("./NoEmitOnErrorsPlugin"),
|
NoEmitOnErrorsPlugin: () => require("./NoEmitOnErrorsPlugin"),
|
||||||
"NormalModuleReplacementPlugin": () => require("./NormalModuleReplacementPlugin"),
|
NormalModuleReplacementPlugin: () => require("./NormalModuleReplacementPlugin"),
|
||||||
"PrefetchPlugin": () => require("./PrefetchPlugin"),
|
PrefetchPlugin: () => require("./PrefetchPlugin"),
|
||||||
"ProgressPlugin": () => require("./ProgressPlugin"),
|
ProgressPlugin: () => require("./ProgressPlugin"),
|
||||||
"ProvidePlugin": () => require("./ProvidePlugin"),
|
ProvidePlugin: () => require("./ProvidePlugin"),
|
||||||
"SetVarMainTemplatePlugin": () => require("./SetVarMainTemplatePlugin"),
|
SetVarMainTemplatePlugin: () => require("./SetVarMainTemplatePlugin"),
|
||||||
"SingleEntryPlugin": () => require("./SingleEntryPlugin"),
|
SingleEntryPlugin: () => require("./SingleEntryPlugin"),
|
||||||
"SourceMapDevToolPlugin": () => require("./SourceMapDevToolPlugin"),
|
SourceMapDevToolPlugin: () => require("./SourceMapDevToolPlugin"),
|
||||||
"Stats": () => require("./Stats"),
|
Stats: () => require("./Stats"),
|
||||||
"UmdMainTemplatePlugin": () => require("./UmdMainTemplatePlugin"),
|
UmdMainTemplatePlugin: () => require("./UmdMainTemplatePlugin"),
|
||||||
"WatchIgnorePlugin": () => require("./WatchIgnorePlugin"),
|
WatchIgnorePlugin: () => require("./WatchIgnorePlugin")
|
||||||
});
|
});
|
||||||
exportPlugins(exports.optimize = {}, {
|
exportPlugins((exports.optimize = {}), {
|
||||||
"AggressiveMergingPlugin": () => require("./optimize/AggressiveMergingPlugin"),
|
AggressiveMergingPlugin: () => require("./optimize/AggressiveMergingPlugin"),
|
||||||
"AggressiveSplittingPlugin": () => require("./optimize/AggressiveSplittingPlugin"),
|
AggressiveSplittingPlugin: () => require("./optimize/AggressiveSplittingPlugin"),
|
||||||
"ChunkModuleIdRangePlugin": () => require("./optimize/ChunkModuleIdRangePlugin"),
|
ChunkModuleIdRangePlugin: () => require("./optimize/ChunkModuleIdRangePlugin"),
|
||||||
"LimitChunkCountPlugin": () => require("./optimize/LimitChunkCountPlugin"),
|
LimitChunkCountPlugin: () => require("./optimize/LimitChunkCountPlugin"),
|
||||||
"MinChunkSizePlugin": () => require("./optimize/MinChunkSizePlugin"),
|
MinChunkSizePlugin: () => require("./optimize/MinChunkSizePlugin"),
|
||||||
"ModuleConcatenationPlugin": () => require("./optimize/ModuleConcatenationPlugin"),
|
ModuleConcatenationPlugin: () => require("./optimize/ModuleConcatenationPlugin"),
|
||||||
"OccurrenceOrderPlugin": () => require("./optimize/OccurrenceOrderPlugin"),
|
OccurrenceOrderPlugin: () => require("./optimize/OccurrenceOrderPlugin"),
|
||||||
"RuntimeChunkPlugin": () => require("./optimize/RuntimeChunkPlugin"),
|
RuntimeChunkPlugin: () => require("./optimize/RuntimeChunkPlugin"),
|
||||||
"SideEffectsFlagPlugin": () => require("./optimize/SideEffectsFlagPlugin"),
|
SideEffectsFlagPlugin: () => require("./optimize/SideEffectsFlagPlugin"),
|
||||||
"SplitChunksPlugin": () => require("./optimize/SplitChunksPlugin"),
|
SplitChunksPlugin: () => require("./optimize/SplitChunksPlugin")
|
||||||
});
|
});
|
||||||
exportPlugins(exports.web = {}, {
|
exportPlugins((exports.web = {}), {
|
||||||
"FetchCompileWasmTemplatePlugin": () => require("./web/FetchCompileWasmTemplatePlugin"),
|
FetchCompileWasmTemplatePlugin: () => require("./web/FetchCompileWasmTemplatePlugin"),
|
||||||
"JsonpTemplatePlugin": () => require("./web/JsonpTemplatePlugin"),
|
JsonpTemplatePlugin: () => require("./web/JsonpTemplatePlugin")
|
||||||
});
|
});
|
||||||
exportPlugins(exports.webworker = {}, {
|
exportPlugins((exports.webworker = {}), {
|
||||||
"WebWorkerTemplatePlugin": () => require("./webworker/WebWorkerTemplatePlugin"),
|
WebWorkerTemplatePlugin: () => require("./webworker/WebWorkerTemplatePlugin")
|
||||||
});
|
});
|
||||||
exportPlugins(exports.node = {}, {
|
exportPlugins((exports.node = {}), {
|
||||||
"NodeTemplatePlugin": () => require("./node/NodeTemplatePlugin"),
|
NodeTemplatePlugin: () => require("./node/NodeTemplatePlugin"),
|
||||||
"ReadFileCompileWasmTemplatePlugin": () => require("./node/ReadFileCompileWasmTemplatePlugin"),
|
ReadFileCompileWasmTemplatePlugin: () => require("./node/ReadFileCompileWasmTemplatePlugin")
|
||||||
});
|
});
|
||||||
exportPlugins(exports.debug = {}, {
|
exportPlugins((exports.debug = {}), {
|
||||||
"ProfilingPlugin": () => require("./debug/ProfilingPlugin"),
|
ProfilingPlugin: () => require("./debug/ProfilingPlugin")
|
||||||
});
|
});
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
"tapable": "^1.0.0-beta.5",
|
"tapable": "^1.0.0-beta.5",
|
||||||
"uglifyjs-webpack-plugin": "^1.1.1",
|
"uglifyjs-webpack-plugin": "^1.1.1",
|
||||||
"watchpack": "^1.4.0",
|
"watchpack": "^1.4.0",
|
||||||
|
"webpack-merge": "^4.1.1",
|
||||||
"webpack-sources": "^1.0.1"
|
"webpack-sources": "^1.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -4261,6 +4261,12 @@ webpack-dev-middleware@^1.9.0:
|
||||||
range-parser "^1.0.3"
|
range-parser "^1.0.3"
|
||||||
time-stamp "^2.0.0"
|
time-stamp "^2.0.0"
|
||||||
|
|
||||||
|
webpack-merge@^4.1.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555"
|
||||||
|
dependencies:
|
||||||
|
lodash "^4.17.4"
|
||||||
|
|
||||||
webpack-sources@^1.0.1:
|
webpack-sources@^1.0.1:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
||||||
|
|
Loading…
Reference in New Issue