Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: webpack @ 4.29.6 .. 4.30.0

declarations/WebpackOptions.d.ts

@@ -246,9 +246,11 @@
export interface WebpackOptions {
/**
- * Set the value of `require.amd` and `define.amd`.
+ * Set the value of `require.amd` and `define.amd`. Or disable AMD support.
*/
- amd?: {
+ amd?:
+ | false
+ | {
[k: string]: any;
};
/**
@@ -1120,7 +1122,8 @@
| "amd-require"
| "umd"
| "umd2"
- | "jsonp";
+ | "jsonp"
+ | "system";
/**
* The output directory as **absolute path** (required).
*/

lib/Chunk.js

@@ -517,7 +517,7 @@
* @param {Object} options the size display options
* @returns {number} the chunk size
*/
- size(options) {
+ size(options = {}) {
return this.addMultiplierAndOverhead(this.modulesSize(), options);
}

lib/Compilation.js

@@ -238,8 +238,8 @@
"module"
]),
- /** @type {SyncHook<Module[]>} */
- finishModules: new SyncHook(["modules"]),
+ /** @type {AsyncSeriesHook<Module[]>} */
+ finishModules: new AsyncSeriesHook(["modules"]),
/** @type {SyncHook<Module>} */
finishRebuildingModule: new SyncHook(["module"]),
/** @type {SyncHook} */
@@ -1158,14 +1158,18 @@
});
}
- finish() {
+ finish(callback) {
const modules = this.modules;
- this.hooks.finishModules.call(modules);
+ this.hooks.finishModules.callAsync(modules, err => {
+ if (err) return callback(err);
for (let index = 0; index < modules.length; index++) {
const module = modules[index];
this.reportDependencyErrorsAndWarnings(module, [module]);
}
+
+ callback();
+ });
}
unseal() {

lib/Compiler.js

@@ -619,7 +619,8 @@
this.hooks.make.callAsync(compilation, err => {
if (err) return callback(err);
- compilation.finish();
+ compilation.finish(err => {
+ if (err) return callback(err);
compilation.seal(err => {
if (err) return callback(err);
@@ -631,6 +632,7 @@
});
});
});
+ });
});
}
}

lib/ExternalModule.js

@@ -137,6 +137,7 @@
case "amd-require":
case "umd":
case "umd2":
+ case "system":
return this.getSourceForAmdOrUmdExternal(
this.id,
this.optional,

lib/FunctionModuleTemplatePlugin.js

@@ -41,9 +41,11 @@
const req = module.readableIdentifier(
moduleTemplate.runtimeTemplate.requestShortener
);
- source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
- source.add(" !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
- source.add(" \\****" + req.replace(/./g, "*") + "****/\n");
+ const reqStr = req.replace(/\*\//g, "*_/");
+ const reqStrStar = "*".repeat(reqStr.length);
+ source.add("/*!****" + reqStrStar + "****!*\\\n");
+ source.add(" !*** " + reqStr + " ***!\n");
+ source.add(" \\****" + reqStrStar + "****/\n");
if (
Array.isArray(module.buildMeta.providedExports) &&
module.buildMeta.providedExports.length === 0

lib/LibraryTemplatePlugin.js

@@ -169,6 +169,13 @@
new JsonpExportMainTemplatePlugin(this.name).apply(compilation);
break;
}
+ case "system": {
+ const SystemMainTemplatePlugin = require("./SystemMainTemplatePlugin");
+ new SystemMainTemplatePlugin({
+ name: this.name
+ }).apply(compilation);
+ break;
+ }
default:
throw new Error(`${this.target} is not a valid Library target`);
}

lib/optimize/ModuleConcatenationPlugin.js

@@ -61,7 +61,7 @@
compilation.hooks.optimizeChunkModules.tap(
"ModuleConcatenationPlugin",
- (chunks, modules) => {
+ (allChunks, modules) => {
const relevantModules = [];
const possibleInners = new Set();
for (const module of modules) {
@@ -287,6 +287,8 @@
for (const chunk of chunks) {
chunk.addModule(newModule);
newModule.addChunk(chunk);
+ }
+ for (const chunk of allChunks) {
if (chunk.entryModule === concatConfiguration.rootModule) {
chunk.entryModule = newModule;
}

lib/optimize/SplitChunksPlugin.js

@@ -674,11 +674,13 @@
// Skip when no chunk selected
if (usedChunks.length === 0) continue;
+ let validChunks = usedChunks;
+
if (
Number.isFinite(item.cacheGroup.maxInitialRequests) ||
Number.isFinite(item.cacheGroup.maxAsyncRequests)
) {
- const chunkInLimit = usedChunks.filter(chunk => {
+ validChunks = validChunks.filter(chunk => {
// respect max requests when not enforced
const maxRequests = chunk.isOnlyInitial()
? item.cacheGroup.maxInitialRequests
@@ -692,21 +694,28 @@
!isFinite(maxRequests) || getRequests(chunk) < maxRequests
);
});
+ }
- if (chunkInLimit.length < usedChunks.length) {
- if (chunkInLimit.length >= item.cacheGroup.minChunks) {
+ validChunks = validChunks.filter(chunk => {
+ for (const module of item.modules) {
+ if (chunk.containsModule(module)) return true;
+ }
+ return false;
+ });
+
+ if (validChunks.length < usedChunks.length) {
+ if (validChunks.length >= item.cacheGroup.minChunks) {
for (const module of item.modules) {
addModuleToChunksInfoMap(
item.cacheGroup,
- chunkInLimit,
- getKey(chunkInLimit),
+ validChunks,
+ getKey(validChunks),
module
);
}
}
continue;
}
- }
// Create the new chunk if not reusing one
if (!isReused) {

lib/Parser.js

@@ -1593,7 +1593,14 @@
walkFunctionExpression(expression) {
const wasTopLevel = this.scope.topLevelScope;
this.scope.topLevelScope = false;
- this.inScope(expression.params, () => {
+ const scopeParams = expression.params;
+
+ // Add function name in scope for recursive calls
+ if (expression.id) {
+ scopeParams.push(expression.id.name);
+ }
+
+ this.inScope(scopeParams, () => {
for (const param of expression.params) {
this.walkPattern(param);
}
@@ -1777,7 +1784,14 @@
const args = options.map(renameArgOrThis);
const wasTopLevel = this.scope.topLevelScope;
this.scope.topLevelScope = false;
- this.inScope(params.filter((identifier, idx) => !args[idx]), () => {
+ const scopeParams = params.filter((identifier, idx) => !args[idx]);
+
+ // Add function name in scope for recursive calls
+ if (functionExpression.id) {
+ scopeParams.push(functionExpression.id.name);
+ }
+
+ this.inScope(scopeParams, () => {
if (renameThis) {
this.scope.renames.set("this", renameThis);
}

lib/SystemMainTemplatePlugin.js

@@ -0,0 +1,131 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Joel Denning @joeldenning
+ */
+
+"use strict";
+
+const { ConcatSource } = require("webpack-sources");
+const Template = require("./Template");
+
+/** @typedef {import("./Compilation")} Compilation */
+
+/**
+ * @typedef {Object} SystemMainTemplatePluginOptions
+ * @param {string=} name the library name
+ */
+
+class SystemMainTemplatePlugin {
+ /**
+ * @param {SystemMainTemplatePluginOptions} options the plugin options
+ */
+ constructor(options) {
+ this.name = options.name;
+ }
+
+ /**
+ * @param {Compilation} compilation the compilation instance
+ * @returns {void}
+ */
+ apply(compilation) {
+ const { mainTemplate, chunkTemplate } = compilation;
+
+ const onRenderWithEntry = (source, chunk, hash) => {
+ const externals = chunk.getModules().filter(m => m.external);
+
+ // The name this bundle should be registered as with System
+ const name = this.name ? `${JSON.stringify(this.name)}, ` : "";
+
+ // The array of dependencies that are external to webpack and will be provided by System
+ const systemDependencies = JSON.stringify(
+ externals.map(m =>
+ typeof m.request === "object" ? m.request.amd : m.request
+ )
+ );
+
+ // The name of the variable provided by System for exporting
+ const dynamicExport = "__WEBPACK_DYNAMIC_EXPORT__";
+
+ // An array of the internal variable names for the webpack externals
+ const externalWebpackNames = externals.map(
+ m => `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(`${m.id}`)}__`
+ );
+
+ // Declaring variables for the internal variable names for the webpack externals
+ const externalVarDeclarations =
+ externalWebpackNames.length > 0
+ ? `var ${externalWebpackNames.join(", ")};`
+ : "";
+
+ // The system.register format requires an array of setter functions for externals.
+ const setters =
+ externalWebpackNames.length === 0
+ ? ""
+ : Template.asString([
+ "setters: [",
+ Template.indent(
+ externalWebpackNames
+ .map(external =>
+ Template.asString([
+ "function(module) {",
+ Template.indent(`${external} = module;`),
+ "}"
+ ])
+ )
+ .join(",\n")
+ ),
+ "],"
+ ]);
+
+ return new ConcatSource(
+ Template.asString([
+ `System.register(${name}${systemDependencies}, function(${dynamicExport}) {`,
+ Template.indent([
+ externalVarDeclarations,
+ "return {",
+ Template.indent([
+ setters,
+ "execute: function() {",
+ Template.indent(`${dynamicExport}(`)
+ ])
+ ])
+ ]) + "\n",
+ source,
+ "\n" +
+ Template.asString([
+ Template.indent([
+ Template.indent([Template.indent([");"]), "}"]),
+ "};"
+ ]),
+ "})"
+ ])
+ );
+ };
+
+ for (const template of [mainTemplate, chunkTemplate]) {
+ template.hooks.renderWithEntry.tap(
+ "SystemMainTemplatePlugin",
+ onRenderWithEntry
+ );
+ }
+
+ mainTemplate.hooks.globalHashPaths.tap(
+ "SystemMainTemplatePlugin",
+ paths => {
+ if (this.name) {
+ paths.push(this.name);
+ }
+ return paths;
+ }
+ );
+
+ mainTemplate.hooks.hash.tap("SystemMainTemplatePlugin", hash => {
+ hash.update("exports system");
+ if (this.name) {
+ hash.update(this.name);
+ }
+ });
+ }
+}
+
+module.exports = SystemMainTemplatePlugin;

lib/WebpackOptionsApply.js

@@ -21,7 +21,6 @@
const APIPlugin = require("./APIPlugin");
const ConstPlugin = require("./ConstPlugin");
-const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");
const NodeStuffPlugin = require("./NodeStuffPlugin");
const CompatibilityPlugin = require("./CompatibilityPlugin");
@@ -34,35 +33,10 @@
const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin");
const SystemPlugin = require("./dependencies/SystemPlugin");
const ImportPlugin = require("./dependencies/ImportPlugin");
-const AMDPlugin = require("./dependencies/AMDPlugin");
const RequireContextPlugin = require("./dependencies/RequireContextPlugin");
const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin");
const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin");
-const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");
-
-const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");
-const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
-const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
-const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
-const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");
-const OccurrenceChunkOrderPlugin = require("./optimize/OccurrenceChunkOrderPlugin");
-const OccurrenceModuleOrderPlugin = require("./optimize/OccurrenceModuleOrderPlugin");
-const NaturalChunkOrderPlugin = require("./optimize/NaturalChunkOrderPlugin");
-const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");
-const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
-const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
-const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
-const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");
-const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
-const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
-const NamedModulesPlugin = require("./NamedModulesPlugin");
-const NamedChunksPlugin = require("./NamedChunksPlugin");
-const HashedModuleIdsPlugin = require("./HashedModuleIdsPlugin");
-const DefinePlugin = require("./DefinePlugin");
-const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");
-const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin");
-
/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
/** @typedef {import("./Compiler")} Compiler */
@@ -308,11 +282,15 @@
new CompatibilityPlugin().apply(compiler);
new HarmonyModulesPlugin(options.module).apply(compiler);
+ if (options.amd !== false) {
+ const AMDPlugin = require("./dependencies/AMDPlugin");
+ const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");
new AMDPlugin(options.module, options.amd || {}).apply(compiler);
+ new RequireJsStuffPlugin().apply(compiler);
+ }
new CommonJsPlugin(options.module).apply(compiler);
new LoaderPlugin().apply(compiler);
new NodeStuffPlugin(options.node).apply(compiler);
- new RequireJsStuffPlugin().apply(compiler);
new APIPlugin().apply(compiler);
new ConstPlugin().apply(compiler);
new UseStrictPlugin().apply(compiler);
@@ -327,44 +305,58 @@
new SystemPlugin(options.module).apply(compiler);
if (typeof options.mode !== "string") {
+ const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");
new WarnNoModeSetPlugin().apply(compiler);
}
+ const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");
new EnsureChunkConditionsPlugin().apply(compiler);
if (options.optimization.removeAvailableModules) {
+ const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
new RemoveParentModulesPlugin().apply(compiler);
}
if (options.optimization.removeEmptyChunks) {
+ const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
new RemoveEmptyChunksPlugin().apply(compiler);
}
if (options.optimization.mergeDuplicateChunks) {
+ const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
new MergeDuplicateChunksPlugin().apply(compiler);
}
if (options.optimization.flagIncludedChunks) {
+ const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");
new FlagIncludedChunksPlugin().apply(compiler);
}
if (options.optimization.sideEffects) {
+ const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");
new SideEffectsFlagPlugin().apply(compiler);
}
if (options.optimization.providedExports) {
+ const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
new FlagDependencyExportsPlugin().apply(compiler);
}
if (options.optimization.usedExports) {
+ const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
new FlagDependencyUsagePlugin().apply(compiler);
}
if (options.optimization.concatenateModules) {
+ const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
new ModuleConcatenationPlugin().apply(compiler);
}
if (options.optimization.splitChunks) {
+ const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");
new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler);
}
if (options.optimization.runtimeChunk) {
+ const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler);
}
if (options.optimization.noEmitOnErrors) {
+ const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
new NoEmitOnErrorsPlugin().apply(compiler);
}
if (options.optimization.checkWasmTypes) {
+ const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin");
new WasmFinalizeExportsPlugin().apply(compiler);
}
let moduleIds = options.optimization.moduleIds;
@@ -384,6 +376,9 @@
}
}
if (moduleIds) {
+ const NamedModulesPlugin = require("./NamedModulesPlugin");
+ const HashedModuleIdsPlugin = require("./HashedModuleIdsPlugin");
+ const OccurrenceModuleOrderPlugin = require("./optimize/OccurrenceModuleOrderPlugin");
switch (moduleIds) {
case "natural":
// TODO webpack 5: see hint in Compilation.sortModules
@@ -426,6 +421,9 @@
}
}
if (chunkIds) {
+ const NaturalChunkOrderPlugin = require("./optimize/NaturalChunkOrderPlugin");
+ const NamedChunksPlugin = require("./NamedChunksPlugin");
+ const OccurrenceChunkOrderPlugin = require("./optimize/OccurrenceChunkOrderPlugin");
switch (chunkIds) {
case "natural":
new NaturalChunkOrderPlugin().apply(compiler);
@@ -456,6 +454,7 @@
}
}
if (options.optimization.nodeEnv) {
+ const DefinePlugin = require("./DefinePlugin");
new DefinePlugin({
"process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv)
}).apply(compiler);
@@ -471,6 +470,7 @@
}
if (options.performance) {
+ const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");
new SizeLimitsPlugin(options.performance).apply(compiler);
}

package.json

@@ -1,6 +1,6 @@
{
"name": "webpack",
- "version": "4.29.6",
+ "version": "4.30.0",
"author": "Tobias Koppers @sokra",
"description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",
"license": "MIT",

schemas/WebpackOptions.json

@@ -986,7 +986,8 @@
"amd-require",
"umd",
"umd2",
- "jsonp"
+ "jsonp",
+ "system"
]
},
"path": {
@@ -1903,7 +1904,17 @@
"additionalProperties": false,
"properties": {
"amd": {
- "description": "Set the value of `require.amd` and `define.amd`."
+ "description": "Set the value of `require.amd` and `define.amd`. Or disable AMD support.",
+ "anyOf": [
+ {
+ "description": "You can pass `false` to disable AMD support.",
+ "enum": [false]
+ },
+ {
+ "description": "You can pass an object to set the value of `require.amd` and `define.amd`.",
+ "type": "object"
+ }
+ ]
},
"bail": {
"description": "Report the first error as a hard error instead of tolerating it.",