webpack 4.15.0 → 4.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +761 -758
- package/SECURITY.md +9 -9
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +20 -20
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/dev-server.js +61 -61
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +44 -44
- package/hot/log.js +45 -45
- package/hot/only-dev-server.js +105 -105
- package/hot/poll.js +40 -37
- package/hot/signal.js +62 -62
- package/lib/APIPlugin.js +84 -84
- package/lib/AmdMainTemplatePlugin.js +87 -87
- package/lib/AsyncDependencyToInitialChunkError.js +31 -31
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +117 -117
- package/lib/BasicEvaluatedExpression.js +211 -211
- package/lib/CachePlugin.js +102 -102
- package/lib/CaseSensitiveModulesWarning.js +67 -67
- package/lib/Chunk.js +833 -811
- package/lib/ChunkGroup.js +4 -4
- package/lib/ChunkRenderError.js +32 -32
- package/lib/CommentCompilationWarning.js +2 -2
- package/lib/CompatibilityPlugin.js +70 -70
- package/lib/Compilation.js +46 -15
- package/lib/ConcurrentCompilationError.js +19 -19
- package/lib/ConstPlugin.js +258 -258
- package/lib/ContextExclusionPlugin.js +28 -17
- package/lib/ContextModule.js +844 -739
- package/lib/ContextModuleFactory.js +262 -256
- package/lib/ContextReplacementPlugin.js +133 -133
- package/lib/DefinePlugin.js +49 -0
- package/lib/DelegatedModule.js +5 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -89
- package/lib/DelegatedPlugin.js +39 -39
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +10 -4
- package/lib/DllModule.js +60 -54
- package/lib/DllModuleFactory.js +29 -29
- package/lib/DllPlugin.js +44 -44
- package/lib/DllReferencePlugin.js +132 -84
- package/lib/EntryModuleNotFoundError.js +21 -21
- package/lib/Entrypoint.js +54 -54
- package/lib/EnvironmentPlugin.js +72 -65
- package/lib/ErrorHelpers.js +60 -60
- package/lib/EvalDevToolModulePlugin.js +27 -27
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
- package/lib/EvalSourceMapDevToolPlugin.js +41 -41
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
- package/lib/ExternalModule.js +165 -159
- package/lib/ExternalsPlugin.js +23 -23
- package/lib/FlagDependencyExportsPlugin.js +146 -146
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
- package/lib/FunctionModuleTemplatePlugin.js +100 -100
- package/lib/Generator.js +60 -52
- package/lib/HarmonyLinkingError.js +17 -17
- package/lib/HashedModuleIdsPlugin.js +53 -53
- package/lib/HotModuleReplacementPlugin.js +411 -413
- package/lib/IgnorePlugin.js +90 -90
- package/lib/JavascriptGenerator.js +229 -229
- package/lib/JavascriptModulesPlugin.js +179 -179
- package/lib/JsonGenerator.js +55 -55
- package/lib/JsonModulesPlugin.js +30 -30
- package/lib/JsonParser.js +27 -27
- package/lib/LibManifestPlugin.js +86 -86
- package/lib/LibraryTemplatePlugin.js +153 -153
- package/lib/LoaderOptionsPlugin.js +53 -53
- package/lib/LoaderTargetPlugin.js +24 -24
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/Module.js +431 -391
- package/lib/ModuleBuildError.js +52 -52
- package/lib/ModuleDependencyError.js +35 -35
- package/lib/ModuleDependencyWarning.js +25 -25
- package/lib/ModuleError.js +36 -36
- package/lib/ModuleFilenameHelpers.js +178 -178
- package/lib/ModuleNotFoundError.js +23 -23
- package/lib/ModuleParseError.js +57 -57
- package/lib/ModuleTemplate.js +93 -93
- package/lib/ModuleWarning.js +36 -36
- package/lib/MultiCompiler.js +283 -283
- package/lib/MultiModule.js +87 -81
- package/lib/MultiModuleFactory.js +23 -23
- package/lib/MultiStats.js +92 -92
- package/lib/MultiWatching.js +38 -38
- package/lib/NamedChunksPlugin.js +29 -29
- package/lib/NamedModulesPlugin.js +57 -57
- package/lib/NoEmitOnErrorsPlugin.js +20 -20
- package/lib/NoModeWarning.js +23 -23
- package/lib/NodeStuffPlugin.js +197 -179
- package/lib/NormalModule.js +542 -536
- package/lib/NormalModuleFactory.js +526 -526
- package/lib/NormalModuleReplacementPlugin.js +51 -51
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/OptionsDefaulter.js +84 -84
- package/lib/Parser.js +2202 -2193
- package/lib/ParserHelpers.js +103 -103
- package/lib/PrefetchPlugin.js +37 -37
- package/lib/ProgressPlugin.js +246 -246
- package/lib/ProvidePlugin.js +86 -86
- package/lib/RawModule.js +56 -56
- package/lib/RecordIdsPlugin.js +230 -230
- package/lib/RemovedPluginError.js +11 -11
- package/lib/RequestShortener.js +83 -83
- package/lib/RequireJsStuffPlugin.js +69 -69
- package/lib/ResolverFactory.js +64 -64
- package/lib/RuntimeTemplate.js +12 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -69
- package/lib/SingleEntryPlugin.js +6 -1
- package/lib/SizeFormatHelpers.js +24 -24
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
- package/lib/SourceMapDevToolPlugin.js +301 -301
- package/lib/Stats.js +28 -5
- package/lib/TemplatedPathPlugin.js +173 -173
- package/lib/UnsupportedFeatureWarning.js +22 -22
- package/lib/UseStrictPlugin.js +54 -54
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
- package/lib/WarnNoModeSetPlugin.js +17 -17
- package/lib/WatchIgnorePlugin.js +100 -100
- package/lib/Watching.js +194 -194
- package/lib/WebpackOptionsApply.js +92 -10
- package/lib/WebpackOptionsDefaulter.js +368 -354
- package/lib/debug/ProfilingPlugin.js +430 -430
- package/lib/dependencies/AMDPlugin.js +250 -250
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
- package/lib/dependencies/AMDRequireContextDependency.js +20 -20
- package/lib/dependencies/AMDRequireDependency.js +135 -135
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsPlugin.js +161 -161
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
- package/lib/dependencies/ConstDependency.js +33 -33
- package/lib/dependencies/ContextDependency.js +68 -68
- package/lib/dependencies/ContextDependencyHelpers.js +142 -142
- package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
- package/lib/dependencies/HarmonyImportDependency.js +109 -109
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
- package/lib/dependencies/HarmonyInitDependency.js +60 -60
- package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
- package/lib/dependencies/ImportContextDependency.js +23 -23
- package/lib/dependencies/ImportDependenciesBlock.js +18 -18
- package/lib/dependencies/ImportDependency.js +34 -34
- package/lib/dependencies/ImportEagerDependency.js +32 -32
- package/lib/dependencies/ImportParserPlugin.js +263 -263
- package/lib/dependencies/ImportPlugin.js +82 -82
- package/lib/dependencies/ImportWeakDependency.js +34 -34
- package/lib/dependencies/LoaderPlugin.js +18 -1
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModulesHelpers.js +52 -52
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/NullDependency.js +20 -20
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +22 -22
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
- package/lib/dependencies/RequireContextPlugin.js +143 -143
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
- package/lib/dependencies/RequireEnsureDependency.js +58 -58
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +74 -74
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
- package/lib/dependencies/RequireIncludePlugin.js +61 -61
- package/lib/dependencies/RequireResolveContextDependency.js +23 -23
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SystemPlugin.js +125 -125
- package/lib/dependencies/UnsupportedDependency.js +27 -27
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
- package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
- package/lib/dependencies/WebpackMissingModule.js +20 -20
- package/lib/formatLocation.js +75 -61
- package/lib/node/NodeChunkTemplatePlugin.js +31 -31
- package/lib/node/NodeEnvironmentPlugin.js +28 -28
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
- package/lib/node/NodeMainTemplate.runtime.js +27 -27
- package/lib/node/NodeMainTemplatePlugin.js +323 -323
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +144 -144
- package/lib/node/NodeTargetPlugin.js +18 -18
- package/lib/node/NodeTemplatePlugin.js +31 -31
- package/lib/node/NodeWatchFileSystem.js +99 -99
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
- package/lib/optimize/AggressiveMergingPlugin.js +87 -87
- package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
- package/lib/optimize/ConcatenatedModule.js +5 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
- package/lib/optimize/LimitChunkCountPlugin.js +66 -66
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
- package/lib/optimize/MinChunkSizePlugin.js +77 -77
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
- package/lib/optimize/RuntimeChunkPlugin.js +41 -41
- package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
- package/lib/optimize/SplitChunksPlugin.js +866 -850
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
- package/lib/performance/NoAsyncChunksWarning.js +21 -21
- package/lib/performance/SizeLimitsPlugin.js +105 -105
- package/lib/util/SortableSet.js +1 -0
- package/lib/util/StackedSetMap.js +144 -135
- package/lib/util/TrackingSet.js +35 -35
- package/lib/util/cachedMerge.js +35 -35
- package/lib/util/deterministicGrouping.js +251 -251
- package/lib/util/identifier.js +103 -103
- package/lib/util/objectToMap.js +16 -16
- package/lib/validateSchema.js +67 -67
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
- package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
- package/lib/wasm/WebAssemblyGenerator.js +16 -2
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
- package/lib/wasm/WebAssemblyParser.js +174 -174
- package/lib/wasm/WebAssemblyUtils.js +59 -59
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
- package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
- package/lib/web/JsonpMainTemplate.runtime.js +65 -65
- package/lib/web/JsonpMainTemplatePlugin.js +1 -1
- package/lib/web/JsonpTemplatePlugin.js +23 -23
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webpack.js +5 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
- package/package.json +22 -13
- package/schemas/WebpackOptions.json +2062 -2036
- package/schemas/ajv.absolutePath.js +55 -55
- package/schemas/plugins/BannerPlugin.json +96 -96
- package/schemas/plugins/DllPlugin.json +32 -32
- package/schemas/plugins/DllReferencePlugin.json +99 -99
- package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
- package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
- package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
- package/schemas/plugins/WatchIgnorePlugin.json +16 -16
- package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,77 +1,77 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const validateOptions = require("schema-utils");
|
8
|
-
const schema = require("../../schemas/plugins/optimize/MinChunkSizePlugin.json");
|
9
|
-
|
10
|
-
class MinChunkSizePlugin {
|
11
|
-
constructor(options) {
|
12
|
-
validateOptions(schema, options, "Min Chunk Size Plugin");
|
13
|
-
this.options = options;
|
14
|
-
}
|
15
|
-
|
16
|
-
apply(compiler) {
|
17
|
-
const options = this.options;
|
18
|
-
const minChunkSize = options.minChunkSize;
|
19
|
-
compiler.hooks.compilation.tap("MinChunkSizePlugin", compilation => {
|
20
|
-
compilation.hooks.optimizeChunksAdvanced.tap(
|
21
|
-
"MinChunkSizePlugin",
|
22
|
-
chunks => {
|
23
|
-
const equalOptions = {
|
24
|
-
chunkOverhead: 1,
|
25
|
-
entryChunkMultiplicator: 1
|
26
|
-
};
|
27
|
-
|
28
|
-
const sortedSizeFilteredExtendedPairCombinations = chunks
|
29
|
-
.reduce((combinations, a, idx) => {
|
30
|
-
// create combination pairs
|
31
|
-
for (let i = 0; i < idx; i++) {
|
32
|
-
const b = chunks[i];
|
33
|
-
combinations.push([b, a]);
|
34
|
-
}
|
35
|
-
return combinations;
|
36
|
-
}, [])
|
37
|
-
.filter(pair => {
|
38
|
-
// check if one of the chunks sizes is smaller than the minChunkSize
|
39
|
-
const p0SmallerThanMinChunkSize =
|
40
|
-
pair[0].size(equalOptions) < minChunkSize;
|
41
|
-
const p1SmallerThanMinChunkSize =
|
42
|
-
pair[1].size(equalOptions) < minChunkSize;
|
43
|
-
return p0SmallerThanMinChunkSize || p1SmallerThanMinChunkSize;
|
44
|
-
})
|
45
|
-
.map(pair => {
|
46
|
-
// extend combination pairs with size and integrated size
|
47
|
-
const a = pair[0].size(options);
|
48
|
-
const b = pair[1].size(options);
|
49
|
-
const ab = pair[0].integratedSize(pair[1], options);
|
50
|
-
return [a + b - ab, ab, pair[0], pair[1]];
|
51
|
-
})
|
52
|
-
.filter(pair => {
|
53
|
-
// filter pairs that do not have an integratedSize
|
54
|
-
// meaning they can NOT be integrated!
|
55
|
-
return pair[1] !== false;
|
56
|
-
})
|
57
|
-
.sort((a, b) => {
|
58
|
-
// sadly javascript does an inplace sort here
|
59
|
-
// sort by size
|
60
|
-
const diff = b[0] - a[0];
|
61
|
-
if (diff !== 0) return diff;
|
62
|
-
return a[1] - b[1];
|
63
|
-
});
|
64
|
-
|
65
|
-
if (sortedSizeFilteredExtendedPairCombinations.length === 0) return;
|
66
|
-
|
67
|
-
const pair = sortedSizeFilteredExtendedPairCombinations[0];
|
68
|
-
|
69
|
-
pair[2].integrate(pair[3], "min-size");
|
70
|
-
chunks.splice(chunks.indexOf(pair[3]), 1);
|
71
|
-
return true;
|
72
|
-
}
|
73
|
-
);
|
74
|
-
});
|
75
|
-
}
|
76
|
-
}
|
77
|
-
module.exports = MinChunkSizePlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const validateOptions = require("schema-utils");
|
8
|
+
const schema = require("../../schemas/plugins/optimize/MinChunkSizePlugin.json");
|
9
|
+
|
10
|
+
class MinChunkSizePlugin {
|
11
|
+
constructor(options) {
|
12
|
+
validateOptions(schema, options, "Min Chunk Size Plugin");
|
13
|
+
this.options = options;
|
14
|
+
}
|
15
|
+
|
16
|
+
apply(compiler) {
|
17
|
+
const options = this.options;
|
18
|
+
const minChunkSize = options.minChunkSize;
|
19
|
+
compiler.hooks.compilation.tap("MinChunkSizePlugin", compilation => {
|
20
|
+
compilation.hooks.optimizeChunksAdvanced.tap(
|
21
|
+
"MinChunkSizePlugin",
|
22
|
+
chunks => {
|
23
|
+
const equalOptions = {
|
24
|
+
chunkOverhead: 1,
|
25
|
+
entryChunkMultiplicator: 1
|
26
|
+
};
|
27
|
+
|
28
|
+
const sortedSizeFilteredExtendedPairCombinations = chunks
|
29
|
+
.reduce((combinations, a, idx) => {
|
30
|
+
// create combination pairs
|
31
|
+
for (let i = 0; i < idx; i++) {
|
32
|
+
const b = chunks[i];
|
33
|
+
combinations.push([b, a]);
|
34
|
+
}
|
35
|
+
return combinations;
|
36
|
+
}, [])
|
37
|
+
.filter(pair => {
|
38
|
+
// check if one of the chunks sizes is smaller than the minChunkSize
|
39
|
+
const p0SmallerThanMinChunkSize =
|
40
|
+
pair[0].size(equalOptions) < minChunkSize;
|
41
|
+
const p1SmallerThanMinChunkSize =
|
42
|
+
pair[1].size(equalOptions) < minChunkSize;
|
43
|
+
return p0SmallerThanMinChunkSize || p1SmallerThanMinChunkSize;
|
44
|
+
})
|
45
|
+
.map(pair => {
|
46
|
+
// extend combination pairs with size and integrated size
|
47
|
+
const a = pair[0].size(options);
|
48
|
+
const b = pair[1].size(options);
|
49
|
+
const ab = pair[0].integratedSize(pair[1], options);
|
50
|
+
return [a + b - ab, ab, pair[0], pair[1]];
|
51
|
+
})
|
52
|
+
.filter(pair => {
|
53
|
+
// filter pairs that do not have an integratedSize
|
54
|
+
// meaning they can NOT be integrated!
|
55
|
+
return pair[1] !== false;
|
56
|
+
})
|
57
|
+
.sort((a, b) => {
|
58
|
+
// sadly javascript does an inplace sort here
|
59
|
+
// sort by size
|
60
|
+
const diff = b[0] - a[0];
|
61
|
+
if (diff !== 0) return diff;
|
62
|
+
return a[1] - b[1];
|
63
|
+
});
|
64
|
+
|
65
|
+
if (sortedSizeFilteredExtendedPairCombinations.length === 0) return;
|
66
|
+
|
67
|
+
const pair = sortedSizeFilteredExtendedPairCombinations[0];
|
68
|
+
|
69
|
+
pair[2].integrate(pair[3], "min-size");
|
70
|
+
chunks.splice(chunks.indexOf(pair[3]), 1);
|
71
|
+
return true;
|
72
|
+
}
|
73
|
+
);
|
74
|
+
});
|
75
|
+
}
|
76
|
+
}
|
77
|
+
module.exports = MinChunkSizePlugin;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
/** @typedef {import("../Compiler")} Compiler */
|
8
|
+
|
9
|
+
class NaturalChunkOrderPlugin {
|
10
|
+
/**
|
11
|
+
* @param {Compiler} compiler webpack compiler
|
12
|
+
* @returns {void}
|
13
|
+
*/
|
14
|
+
apply(compiler) {
|
15
|
+
compiler.hooks.compilation.tap("NaturalChunkOrderPlugin", compilation => {
|
16
|
+
compilation.hooks.optimizeChunkOrder.tap(
|
17
|
+
"NaturalChunkOrderPlugin",
|
18
|
+
chunks => {
|
19
|
+
chunks.sort((chunkA, chunkB) => {
|
20
|
+
const a = chunkA.modulesIterable[Symbol.iterator]();
|
21
|
+
const b = chunkB.modulesIterable[Symbol.iterator]();
|
22
|
+
// eslint-disable-next-line no-constant-condition
|
23
|
+
while (true) {
|
24
|
+
const aItem = a.next();
|
25
|
+
const bItem = b.next();
|
26
|
+
if (aItem.done && bItem.done) return 0;
|
27
|
+
if (aItem.done) return -1;
|
28
|
+
if (bItem.done) return 1;
|
29
|
+
const aModuleId = aItem.value.id;
|
30
|
+
const bModuleId = bItem.value.id;
|
31
|
+
if (aModuleId < bModuleId) return -1;
|
32
|
+
if (aModuleId > bModuleId) return 1;
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}
|
36
|
+
);
|
37
|
+
});
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
module.exports = NaturalChunkOrderPlugin;
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const validateOptions = require("schema-utils");
|
8
|
+
const schema = require("../../schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json");
|
9
|
+
|
10
|
+
class OccurrenceOrderChunkIdsPlugin {
|
11
|
+
constructor(options = {}) {
|
12
|
+
validateOptions(schema, options, "Occurrence Order Chunk Ids Plugin");
|
13
|
+
this.options = options;
|
14
|
+
}
|
15
|
+
|
16
|
+
apply(compiler) {
|
17
|
+
const prioritiseInitial = this.options.prioritiseInitial;
|
18
|
+
compiler.hooks.compilation.tap(
|
19
|
+
"OccurrenceOrderChunkIdsPlugin",
|
20
|
+
compilation => {
|
21
|
+
compilation.hooks.optimizeChunkOrder.tap(
|
22
|
+
"OccurrenceOrderChunkIdsPlugin",
|
23
|
+
chunks => {
|
24
|
+
const occursInInitialChunksMap = new Map();
|
25
|
+
const originalOrder = new Map();
|
26
|
+
|
27
|
+
let i = 0;
|
28
|
+
for (const c of chunks) {
|
29
|
+
let occurs = 0;
|
30
|
+
for (const chunkGroup of c.groupsIterable) {
|
31
|
+
for (const parent of chunkGroup.parentsIterable) {
|
32
|
+
if (parent.isInitial()) occurs++;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
occursInInitialChunksMap.set(c, occurs);
|
36
|
+
originalOrder.set(c, i++);
|
37
|
+
}
|
38
|
+
|
39
|
+
chunks.sort((a, b) => {
|
40
|
+
if (prioritiseInitial) {
|
41
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
42
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
43
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
44
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
45
|
+
}
|
46
|
+
const aOccurs = a.getNumberOfGroups();
|
47
|
+
const bOccurs = b.getNumberOfGroups();
|
48
|
+
if (aOccurs > bOccurs) return -1;
|
49
|
+
if (aOccurs < bOccurs) return 1;
|
50
|
+
const orgA = originalOrder.get(a);
|
51
|
+
const orgB = originalOrder.get(b);
|
52
|
+
return orgA - orgB;
|
53
|
+
});
|
54
|
+
}
|
55
|
+
);
|
56
|
+
}
|
57
|
+
);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
module.exports = OccurrenceOrderChunkIdsPlugin;
|
@@ -0,0 +1,103 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const validateOptions = require("schema-utils");
|
8
|
+
const schema = require("../../schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json");
|
9
|
+
|
10
|
+
class OccurrenceOrderModuleIdsPlugin {
|
11
|
+
constructor(options = {}) {
|
12
|
+
validateOptions(schema, options, "Occurrence Order Module Ids Plugin");
|
13
|
+
this.options = options;
|
14
|
+
}
|
15
|
+
|
16
|
+
apply(compiler) {
|
17
|
+
const prioritiseInitial = this.options.prioritiseInitial;
|
18
|
+
compiler.hooks.compilation.tap(
|
19
|
+
"OccurrenceOrderModuleIdsPlugin",
|
20
|
+
compilation => {
|
21
|
+
compilation.hooks.optimizeModuleOrder.tap(
|
22
|
+
"OccurrenceOrderModuleIdsPlugin",
|
23
|
+
modules => {
|
24
|
+
const occursInInitialChunksMap = new Map();
|
25
|
+
const occursInAllChunksMap = new Map();
|
26
|
+
|
27
|
+
const initialChunkChunkMap = new Map();
|
28
|
+
const entryCountMap = new Map();
|
29
|
+
for (const m of modules) {
|
30
|
+
let initial = 0;
|
31
|
+
let entry = 0;
|
32
|
+
for (const c of m.chunksIterable) {
|
33
|
+
if (c.canBeInitial()) initial++;
|
34
|
+
if (c.entryModule === m) entry++;
|
35
|
+
}
|
36
|
+
initialChunkChunkMap.set(m, initial);
|
37
|
+
entryCountMap.set(m, entry);
|
38
|
+
}
|
39
|
+
|
40
|
+
const countOccursInEntry = (sum, r) => {
|
41
|
+
if (!r.module) {
|
42
|
+
return sum;
|
43
|
+
}
|
44
|
+
return sum + initialChunkChunkMap.get(r.module);
|
45
|
+
};
|
46
|
+
const countOccurs = (sum, r) => {
|
47
|
+
if (!r.module) {
|
48
|
+
return sum;
|
49
|
+
}
|
50
|
+
let factor = 1;
|
51
|
+
if (typeof r.dependency.getNumberOfIdOccurrences === "function") {
|
52
|
+
factor = r.dependency.getNumberOfIdOccurrences();
|
53
|
+
}
|
54
|
+
if (factor === 0) {
|
55
|
+
return sum;
|
56
|
+
}
|
57
|
+
return sum + factor * r.module.getNumberOfChunks();
|
58
|
+
};
|
59
|
+
|
60
|
+
if (prioritiseInitial) {
|
61
|
+
for (const m of modules) {
|
62
|
+
const result =
|
63
|
+
m.reasons.reduce(countOccursInEntry, 0) +
|
64
|
+
initialChunkChunkMap.get(m) +
|
65
|
+
entryCountMap.get(m);
|
66
|
+
occursInInitialChunksMap.set(m, result);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
const originalOrder = new Map();
|
71
|
+
let i = 0;
|
72
|
+
for (const m of modules) {
|
73
|
+
const result =
|
74
|
+
m.reasons.reduce(countOccurs, 0) +
|
75
|
+
m.getNumberOfChunks() +
|
76
|
+
entryCountMap.get(m);
|
77
|
+
occursInAllChunksMap.set(m, result);
|
78
|
+
originalOrder.set(m, i++);
|
79
|
+
}
|
80
|
+
|
81
|
+
modules.sort((a, b) => {
|
82
|
+
if (prioritiseInitial) {
|
83
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
84
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
85
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
86
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
87
|
+
}
|
88
|
+
const aOccurs = occursInAllChunksMap.get(a);
|
89
|
+
const bOccurs = occursInAllChunksMap.get(b);
|
90
|
+
if (aOccurs > bOccurs) return -1;
|
91
|
+
if (aOccurs < bOccurs) return 1;
|
92
|
+
const orgA = originalOrder.get(a);
|
93
|
+
const orgB = originalOrder.get(b);
|
94
|
+
return orgA - orgB;
|
95
|
+
});
|
96
|
+
}
|
97
|
+
);
|
98
|
+
}
|
99
|
+
);
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
module.exports = OccurrenceOrderModuleIdsPlugin;
|
@@ -1,133 +1,135 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
const
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
}
|
132
|
-
|
133
|
-
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
// TODO webpack 5 remove this plugin
|
8
|
+
// It has been splitted into separate plugins for modules and chunks
|
9
|
+
class OccurrenceOrderPlugin {
|
10
|
+
constructor(preferEntry) {
|
11
|
+
if (preferEntry !== undefined && typeof preferEntry !== "boolean") {
|
12
|
+
throw new Error(
|
13
|
+
"Argument should be a boolean.\nFor more info on this plugin, see https://webpack.js.org/plugins/"
|
14
|
+
);
|
15
|
+
}
|
16
|
+
this.preferEntry = preferEntry;
|
17
|
+
}
|
18
|
+
apply(compiler) {
|
19
|
+
const preferEntry = this.preferEntry;
|
20
|
+
compiler.hooks.compilation.tap("OccurrenceOrderPlugin", compilation => {
|
21
|
+
compilation.hooks.optimizeModuleOrder.tap(
|
22
|
+
"OccurrenceOrderPlugin",
|
23
|
+
modules => {
|
24
|
+
const occursInInitialChunksMap = new Map();
|
25
|
+
const occursInAllChunksMap = new Map();
|
26
|
+
|
27
|
+
const initialChunkChunkMap = new Map();
|
28
|
+
const entryCountMap = new Map();
|
29
|
+
for (const m of modules) {
|
30
|
+
let initial = 0;
|
31
|
+
let entry = 0;
|
32
|
+
for (const c of m.chunksIterable) {
|
33
|
+
if (c.canBeInitial()) initial++;
|
34
|
+
if (c.entryModule === m) entry++;
|
35
|
+
}
|
36
|
+
initialChunkChunkMap.set(m, initial);
|
37
|
+
entryCountMap.set(m, entry);
|
38
|
+
}
|
39
|
+
|
40
|
+
const countOccursInEntry = (sum, r) => {
|
41
|
+
if (!r.module) {
|
42
|
+
return sum;
|
43
|
+
}
|
44
|
+
return sum + initialChunkChunkMap.get(r.module);
|
45
|
+
};
|
46
|
+
const countOccurs = (sum, r) => {
|
47
|
+
if (!r.module) {
|
48
|
+
return sum;
|
49
|
+
}
|
50
|
+
let factor = 1;
|
51
|
+
if (typeof r.dependency.getNumberOfIdOccurrences === "function") {
|
52
|
+
factor = r.dependency.getNumberOfIdOccurrences();
|
53
|
+
}
|
54
|
+
if (factor === 0) {
|
55
|
+
return sum;
|
56
|
+
}
|
57
|
+
return sum + factor * r.module.getNumberOfChunks();
|
58
|
+
};
|
59
|
+
|
60
|
+
if (preferEntry) {
|
61
|
+
for (const m of modules) {
|
62
|
+
const result =
|
63
|
+
m.reasons.reduce(countOccursInEntry, 0) +
|
64
|
+
initialChunkChunkMap.get(m) +
|
65
|
+
entryCountMap.get(m);
|
66
|
+
occursInInitialChunksMap.set(m, result);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
const originalOrder = new Map();
|
71
|
+
let i = 0;
|
72
|
+
for (const m of modules) {
|
73
|
+
const result =
|
74
|
+
m.reasons.reduce(countOccurs, 0) +
|
75
|
+
m.getNumberOfChunks() +
|
76
|
+
entryCountMap.get(m);
|
77
|
+
occursInAllChunksMap.set(m, result);
|
78
|
+
originalOrder.set(m, i++);
|
79
|
+
}
|
80
|
+
|
81
|
+
modules.sort((a, b) => {
|
82
|
+
if (preferEntry) {
|
83
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
84
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
85
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
86
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
87
|
+
}
|
88
|
+
const aOccurs = occursInAllChunksMap.get(a);
|
89
|
+
const bOccurs = occursInAllChunksMap.get(b);
|
90
|
+
if (aOccurs > bOccurs) return -1;
|
91
|
+
if (aOccurs < bOccurs) return 1;
|
92
|
+
const orgA = originalOrder.get(a);
|
93
|
+
const orgB = originalOrder.get(b);
|
94
|
+
return orgA - orgB;
|
95
|
+
});
|
96
|
+
}
|
97
|
+
);
|
98
|
+
compilation.hooks.optimizeChunkOrder.tap(
|
99
|
+
"OccurrenceOrderPlugin",
|
100
|
+
chunks => {
|
101
|
+
const occursInInitialChunksMap = new Map();
|
102
|
+
const originalOrder = new Map();
|
103
|
+
|
104
|
+
let i = 0;
|
105
|
+
for (const c of chunks) {
|
106
|
+
let occurs = 0;
|
107
|
+
for (const chunkGroup of c.groupsIterable) {
|
108
|
+
for (const parent of chunkGroup.parentsIterable) {
|
109
|
+
if (parent.isInitial()) occurs++;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
occursInInitialChunksMap.set(c, occurs);
|
113
|
+
originalOrder.set(c, i++);
|
114
|
+
}
|
115
|
+
|
116
|
+
chunks.sort((a, b) => {
|
117
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
118
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
119
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
120
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
121
|
+
const aOccurs = a.getNumberOfGroups();
|
122
|
+
const bOccurs = b.getNumberOfGroups();
|
123
|
+
if (aOccurs > bOccurs) return -1;
|
124
|
+
if (aOccurs < bOccurs) return 1;
|
125
|
+
const orgA = originalOrder.get(a);
|
126
|
+
const orgB = originalOrder.get(b);
|
127
|
+
return orgA - orgB;
|
128
|
+
});
|
129
|
+
}
|
130
|
+
);
|
131
|
+
});
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
module.exports = OccurrenceOrderPlugin;
|