webpack 4.9.1 → 4.10.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/README.md +755 -755
- package/SECURITY.md +9 -9
- package/buildin/global.js +20 -20
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/hot/dev-server.js +61 -61
- 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 +37 -37
- package/hot/signal.js +62 -62
- package/lib/APIPlugin.js +84 -84
- package/lib/AmdMainTemplatePlugin.js +87 -75
- package/lib/AsyncDependenciesBlock.js +66 -66
- package/lib/AsyncDependencyToInitialChunkError.js +31 -21
- package/lib/AutomaticPrefetchPlugin.js +50 -50
- package/lib/BannerPlugin.js +3 -1
- package/lib/BasicEvaluatedExpression.js +211 -208
- package/lib/CachePlugin.js +102 -95
- package/lib/CaseSensitiveModulesWarning.js +71 -53
- package/lib/Chunk.js +750 -722
- package/lib/ChunkGroup.js +13 -5
- package/lib/ChunkRenderError.js +32 -32
- package/lib/CompatibilityPlugin.js +63 -63
- package/lib/Compilation.js +1947 -1905
- package/lib/Compiler.js +508 -496
- package/lib/ConcurrentCompilationError.js +19 -19
- package/lib/ConstPlugin.js +258 -242
- package/lib/ContextExclusionPlugin.js +17 -17
- package/lib/ContextModule.js +749 -710
- package/lib/ContextModuleFactory.js +256 -245
- package/lib/ContextReplacementPlugin.js +133 -126
- package/lib/DefinePlugin.js +206 -197
- package/lib/DelegatedModule.js +101 -101
- package/lib/DelegatedModuleFactoryPlugin.js +89 -89
- package/lib/DelegatedPlugin.js +39 -39
- package/lib/DependenciesBlock.js +89 -87
- package/lib/DependenciesBlockVariable.js +52 -51
- package/lib/Dependency.js +51 -51
- package/lib/DllEntryPlugin.js +51 -51
- package/lib/DllModule.js +54 -54
- package/lib/DllModuleFactory.js +29 -29
- package/lib/DllPlugin.js +44 -42
- package/lib/DllReferencePlugin.js +84 -84
- package/lib/DynamicEntryPlugin.js +73 -71
- package/lib/EntryOptionPlugin.js +33 -33
- package/lib/EnvironmentPlugin.js +65 -65
- package/lib/ErrorHelpers.js +60 -57
- package/lib/EvalDevToolModulePlugin.js +27 -27
- package/lib/EvalDevToolModuleTemplatePlugin.js +61 -61
- package/lib/EvalSourceMapDevToolPlugin.js +41 -40
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -40
- package/lib/ExtendedAPIPlugin.js +84 -84
- package/lib/ExternalModule.js +159 -159
- package/lib/ExternalModuleFactoryPlugin.js +110 -110
- package/lib/ExternalsPlugin.js +23 -23
- package/lib/FlagDependencyExportsPlugin.js +146 -146
- package/lib/FlagDependencyUsagePlugin.js +110 -104
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
- package/lib/FunctionModulePlugin.js +19 -19
- package/lib/FunctionModuleTemplatePlugin.js +100 -98
- package/lib/GraphHelpers.js +64 -64
- package/lib/HarmonyLinkingError.js +18 -18
- package/lib/HashedModuleIdsPlugin.js +53 -53
- package/lib/HotModuleReplacement.runtime.js +7 -3
- package/lib/HotModuleReplacementPlugin.js +413 -406
- package/lib/HotUpdateChunk.js +16 -16
- package/lib/HotUpdateChunkTemplate.js +78 -78
- package/lib/IgnorePlugin.js +71 -71
- package/lib/JavascriptGenerator.js +229 -228
- package/lib/JavascriptModulesPlugin.js +179 -184
- package/lib/JsonGenerator.js +42 -42
- package/lib/JsonModulesPlugin.js +30 -30
- package/lib/JsonParser.js +27 -26
- package/lib/LibManifestPlugin.js +86 -86
- package/lib/LibraryTemplatePlugin.js +153 -119
- package/lib/LoaderOptionsPlugin.js +53 -52
- package/lib/LoaderTargetPlugin.js +24 -24
- package/lib/MainTemplate.js +34 -9
- package/lib/Module.js +381 -377
- package/lib/ModuleBuildError.js +42 -42
- package/lib/ModuleDependencyError.js +35 -25
- package/lib/ModuleDependencyWarning.js +25 -25
- package/lib/ModuleError.js +28 -28
- package/lib/ModuleFilenameHelpers.js +178 -166
- package/lib/ModuleParseError.js +44 -44
- package/lib/ModuleReason.js +40 -40
- package/lib/ModuleTemplate.js +84 -84
- package/lib/ModuleWarning.js +30 -30
- package/lib/MultiCompiler.js +283 -271
- package/lib/MultiEntryPlugin.js +58 -58
- package/lib/MultiModule.js +81 -78
- 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 +179 -178
- package/lib/NormalModule.js +497 -490
- package/lib/NormalModuleFactory.js +501 -483
- package/lib/NormalModuleReplacementPlugin.js +51 -51
- package/lib/OptionsDefaulter.js +84 -80
- package/lib/Parser.js +2164 -2086
- package/lib/ParserHelpers.js +103 -100
- package/lib/PrefetchPlugin.js +37 -37
- package/lib/ProgressPlugin.js +231 -231
- package/lib/ProvidePlugin.js +86 -86
- package/lib/RawModule.js +56 -54
- package/lib/RecordIdsPlugin.js +166 -162
- package/lib/RemovedPluginError.js +13 -13
- package/lib/RequestShortener.js +81 -74
- package/lib/RequireJsStuffPlugin.js +69 -69
- package/lib/ResolverFactory.js +64 -64
- package/lib/RuleSet.js +555 -534
- package/lib/RuntimeTemplate.js +320 -277
- package/lib/SetVarMainTemplatePlugin.js +69 -57
- package/lib/SingleEntryPlugin.js +44 -44
- package/lib/SizeFormatHelpers.js +24 -24
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
- package/lib/SourceMapDevToolPlugin.js +301 -300
- package/lib/Stats.js +1408 -1367
- package/lib/Template.js +4 -2
- package/lib/TemplatedPathPlugin.js +173 -170
- package/lib/UmdMainTemplatePlugin.js +304 -264
- package/lib/UseStrictPlugin.js +48 -48
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -36
- package/lib/WarnNoModeSetPlugin.js +17 -17
- package/lib/WatchIgnorePlugin.js +100 -100
- package/lib/Watching.js +194 -193
- package/lib/WebpackError.js +25 -19
- package/lib/WebpackOptionsApply.js +421 -405
- package/lib/WebpackOptionsDefaulter.js +347 -344
- package/lib/WebpackOptionsValidationError.js +345 -316
- package/lib/compareLocations.js +56 -56
- package/lib/dependencies/AMDDefineDependency.js +137 -137
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +336 -327
- package/lib/dependencies/AMDPlugin.js +250 -250
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
- package/lib/dependencies/AMDRequireContextDependency.js +20 -20
- package/lib/dependencies/AMDRequireDependenciesBlock.js +43 -43
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +273 -270
- package/lib/dependencies/AMDRequireDependency.js +135 -135
- package/lib/dependencies/CommonJsPlugin.js +161 -161
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +130 -130
- package/lib/dependencies/ConstDependency.js +33 -33
- package/lib/dependencies/ContextDependency.js +68 -68
- package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/DelegatedExportsDependency.js +33 -33
- package/lib/dependencies/DependencyReference.js +18 -18
- package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
- package/lib/dependencies/HarmonyAcceptImportDependency.js +23 -23
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -90
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
- package/lib/dependencies/HarmonyExportExpressionDependency.js +53 -53
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +620 -603
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +54 -54
- package/lib/dependencies/HarmonyImportDependency.js +104 -94
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +217 -214
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +166 -156
- 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 +233 -232
- package/lib/dependencies/ImportPlugin.js +82 -82
- package/lib/dependencies/ImportWeakDependency.js +34 -34
- package/lib/dependencies/JsonExportsDependency.js +26 -26
- package/lib/dependencies/LoaderPlugin.js +98 -93
- package/lib/dependencies/LocalModuleDependency.js +28 -28
- package/lib/dependencies/LocalModulesHelpers.js +52 -45
- package/lib/dependencies/ModuleDependency.js +20 -20
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
- package/lib/dependencies/MultiEntryDependency.js +20 -20
- package/lib/dependencies/NullDependency.js +20 -20
- package/lib/dependencies/RequireContextDependency.js +22 -22
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
- package/lib/dependencies/RequireContextPlugin.js +143 -141
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -112
- package/lib/dependencies/RequireEnsureDependency.js +58 -58
- package/lib/dependencies/RequireEnsurePlugin.js +74 -74
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependency.js +39 -39
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
- package/lib/dependencies/RequireIncludePlugin.js +61 -61
- package/lib/dependencies/RequireResolveContextDependency.js +23 -23
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SingleEntryDependency.js +18 -18
- package/lib/dependencies/SystemPlugin.js +125 -125
- package/lib/dependencies/UnsupportedDependency.js +27 -27
- package/lib/dependencies/WebAssemblyImportDependency.js +48 -44
- package/lib/dependencies/WebpackMissingModule.js +20 -20
- package/lib/dependencies/getFunctionExpression.js +52 -52
- package/lib/formatLocation.js +61 -53
- 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/NodeMainTemplateAsync.runtime.js +44 -44
- package/lib/node/NodeMainTemplatePlugin.js +323 -320
- package/lib/node/NodeSourcePlugin.js +144 -140
- package/lib/node/NodeTargetPlugin.js +18 -18
- package/lib/node/NodeTemplatePlugin.js +31 -31
- package/lib/node/NodeWatchFileSystem.js +99 -82
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +52 -52
- package/lib/optimize/AggressiveMergingPlugin.js +87 -87
- package/lib/optimize/AggressiveSplittingPlugin.js +287 -281
- package/lib/optimize/ChunkModuleIdRangePlugin.js +68 -68
- package/lib/optimize/ConcatenatedModule.js +1420 -1413
- 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 -75
- package/lib/optimize/MinChunkSizePlugin.js +77 -77
- package/lib/optimize/ModuleConcatenationPlugin.js +470 -457
- package/lib/optimize/OccurrenceOrderPlugin.js +133 -126
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -117
- package/lib/optimize/RuntimeChunkPlugin.js +41 -41
- package/lib/optimize/SideEffectsFlagPlugin.js +158 -156
- package/lib/optimize/SplitChunksPlugin.js +709 -696
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +31 -31
- package/lib/performance/NoAsyncChunksWarning.js +21 -21
- package/lib/performance/SizeLimitsPlugin.js +105 -105
- package/lib/util/Semaphore.js +41 -41
- package/lib/util/SortableSet.js +5 -2
- package/lib/util/StackedSetMap.js +12 -5
- package/lib/util/TrackingSet.js +35 -35
- package/lib/util/cachedMerge.js +35 -35
- package/lib/util/createHash.js +77 -77
- package/lib/util/identifier.js +76 -76
- package/lib/validateSchema.js +67 -67
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +18 -18
- package/lib/wasm/WasmMainTemplatePlugin.js +310 -304
- package/lib/wasm/WebAssemblyGenerator.js +143 -19
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +90 -107
- package/lib/wasm/WebAssemblyModulesPlugin.js +80 -80
- package/lib/wasm/WebAssemblyParser.js +28 -5
- package/lib/wasm/WebAssemblyUtils.js +48 -0
- package/lib/web/FetchCompileWasmTemplatePlugin.js +25 -25
- package/lib/web/JsonpChunkTemplatePlugin.js +47 -47
- package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
- package/lib/web/JsonpMainTemplate.runtime.js +65 -64
- package/lib/web/JsonpMainTemplatePlugin.js +576 -574
- package/lib/web/JsonpTemplatePlugin.js +23 -23
- package/lib/webpack.js +183 -182
- package/lib/webpack.web.js +31 -31
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -64
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +179 -179
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
- package/package.json +9 -8
- package/schemas/WebpackOptions.json +1988 -1988
- package/schemas/ajv.absolutePath.js +55 -55
- 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
@@ -1,126 +1,133 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
class OccurrenceOrderPlugin {
|
8
|
-
constructor(preferEntry) {
|
9
|
-
if (preferEntry !== undefined && typeof preferEntry !== "boolean") {
|
10
|
-
throw new Error(
|
11
|
-
"Argument should be a boolean.\nFor more info on this plugin, see https://webpack.js.org/plugins/"
|
12
|
-
);
|
13
|
-
}
|
14
|
-
this.preferEntry = preferEntry;
|
15
|
-
}
|
16
|
-
apply(compiler) {
|
17
|
-
const preferEntry = this.preferEntry;
|
18
|
-
compiler.hooks.compilation.tap("OccurrenceOrderPlugin", compilation => {
|
19
|
-
compilation.hooks.optimizeModuleOrder.tap(
|
20
|
-
"OccurrenceOrderPlugin",
|
21
|
-
modules => {
|
22
|
-
const occursInInitialChunksMap = new Map();
|
23
|
-
const occursInAllChunksMap = new Map();
|
24
|
-
|
25
|
-
const initialChunkChunkMap = new Map();
|
26
|
-
const entryCountMap = new Map();
|
27
|
-
for (const m of modules) {
|
28
|
-
let initial = 0;
|
29
|
-
let entry = 0;
|
30
|
-
for (const c of m.chunksIterable) {
|
31
|
-
if (c.canBeInitial()) initial++;
|
32
|
-
if (c.entryModule === m) entry++;
|
33
|
-
}
|
34
|
-
initialChunkChunkMap.set(m, initial);
|
35
|
-
entryCountMap.set(m, entry);
|
36
|
-
}
|
37
|
-
|
38
|
-
const countOccursInEntry = (sum, r) => {
|
39
|
-
if (!r.module)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if (
|
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
|
-
const
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
class OccurrenceOrderPlugin {
|
8
|
+
constructor(preferEntry) {
|
9
|
+
if (preferEntry !== undefined && typeof preferEntry !== "boolean") {
|
10
|
+
throw new Error(
|
11
|
+
"Argument should be a boolean.\nFor more info on this plugin, see https://webpack.js.org/plugins/"
|
12
|
+
);
|
13
|
+
}
|
14
|
+
this.preferEntry = preferEntry;
|
15
|
+
}
|
16
|
+
apply(compiler) {
|
17
|
+
const preferEntry = this.preferEntry;
|
18
|
+
compiler.hooks.compilation.tap("OccurrenceOrderPlugin", compilation => {
|
19
|
+
compilation.hooks.optimizeModuleOrder.tap(
|
20
|
+
"OccurrenceOrderPlugin",
|
21
|
+
modules => {
|
22
|
+
const occursInInitialChunksMap = new Map();
|
23
|
+
const occursInAllChunksMap = new Map();
|
24
|
+
|
25
|
+
const initialChunkChunkMap = new Map();
|
26
|
+
const entryCountMap = new Map();
|
27
|
+
for (const m of modules) {
|
28
|
+
let initial = 0;
|
29
|
+
let entry = 0;
|
30
|
+
for (const c of m.chunksIterable) {
|
31
|
+
if (c.canBeInitial()) initial++;
|
32
|
+
if (c.entryModule === m) entry++;
|
33
|
+
}
|
34
|
+
initialChunkChunkMap.set(m, initial);
|
35
|
+
entryCountMap.set(m, entry);
|
36
|
+
}
|
37
|
+
|
38
|
+
const countOccursInEntry = (sum, r) => {
|
39
|
+
if (!r.module) {
|
40
|
+
return sum;
|
41
|
+
}
|
42
|
+
return sum + initialChunkChunkMap.get(r.module);
|
43
|
+
};
|
44
|
+
const countOccurs = (sum, r) => {
|
45
|
+
if (!r.module) {
|
46
|
+
return sum;
|
47
|
+
}
|
48
|
+
let factor = 1;
|
49
|
+
if (typeof r.dependency.getNumberOfIdOccurrences === "function") {
|
50
|
+
factor = r.dependency.getNumberOfIdOccurrences();
|
51
|
+
}
|
52
|
+
if (factor === 0) {
|
53
|
+
return sum;
|
54
|
+
}
|
55
|
+
return sum + factor * r.module.getNumberOfChunks();
|
56
|
+
};
|
57
|
+
|
58
|
+
if (preferEntry) {
|
59
|
+
for (const m of modules) {
|
60
|
+
const result =
|
61
|
+
m.reasons.reduce(countOccursInEntry, 0) +
|
62
|
+
initialChunkChunkMap.get(m) +
|
63
|
+
entryCountMap.get(m);
|
64
|
+
occursInInitialChunksMap.set(m, result);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
const originalOrder = new Map();
|
69
|
+
let i = 0;
|
70
|
+
for (const m of modules) {
|
71
|
+
const result =
|
72
|
+
m.reasons.reduce(countOccurs, 0) +
|
73
|
+
m.getNumberOfChunks() +
|
74
|
+
entryCountMap.get(m);
|
75
|
+
occursInAllChunksMap.set(m, result);
|
76
|
+
originalOrder.set(m, i++);
|
77
|
+
}
|
78
|
+
|
79
|
+
modules.sort((a, b) => {
|
80
|
+
if (preferEntry) {
|
81
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
82
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
83
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
84
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
85
|
+
}
|
86
|
+
const aOccurs = occursInAllChunksMap.get(a);
|
87
|
+
const bOccurs = occursInAllChunksMap.get(b);
|
88
|
+
if (aOccurs > bOccurs) return -1;
|
89
|
+
if (aOccurs < bOccurs) return 1;
|
90
|
+
const orgA = originalOrder.get(a);
|
91
|
+
const orgB = originalOrder.get(b);
|
92
|
+
return orgB - orgA;
|
93
|
+
});
|
94
|
+
}
|
95
|
+
);
|
96
|
+
compilation.hooks.optimizeChunkOrder.tap(
|
97
|
+
"OccurrenceOrderPlugin",
|
98
|
+
chunks => {
|
99
|
+
const occursInInitialChunksMap = new Map();
|
100
|
+
const originalOrder = new Map();
|
101
|
+
|
102
|
+
let i = 0;
|
103
|
+
for (const c of chunks) {
|
104
|
+
let occurs = 0;
|
105
|
+
for (const chunkGroup of c.groupsIterable) {
|
106
|
+
for (const parent of chunkGroup.parentsIterable) {
|
107
|
+
if (parent.isInitial()) occurs++;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
occursInInitialChunksMap.set(c, occurs);
|
111
|
+
originalOrder.set(c, i++);
|
112
|
+
}
|
113
|
+
|
114
|
+
chunks.sort((a, b) => {
|
115
|
+
const aEntryOccurs = occursInInitialChunksMap.get(a);
|
116
|
+
const bEntryOccurs = occursInInitialChunksMap.get(b);
|
117
|
+
if (aEntryOccurs > bEntryOccurs) return -1;
|
118
|
+
if (aEntryOccurs < bEntryOccurs) return 1;
|
119
|
+
const aOccurs = a.getNumberOfGroups();
|
120
|
+
const bOccurs = b.getNumberOfGroups();
|
121
|
+
if (aOccurs > bOccurs) return -1;
|
122
|
+
if (aOccurs < bOccurs) return 1;
|
123
|
+
const orgA = originalOrder.get(a);
|
124
|
+
const orgB = originalOrder.get(b);
|
125
|
+
return orgB - orgA;
|
126
|
+
});
|
127
|
+
}
|
128
|
+
);
|
129
|
+
});
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
module.exports = OccurrenceOrderPlugin;
|
@@ -1,117 +1,127 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const Queue = require("../util/Queue");
|
8
|
-
const { intersect } = require("../util/SetHelpers");
|
9
|
-
|
10
|
-
const getParentChunksWithModule = (currentChunk, module) => {
|
11
|
-
const chunks = [];
|
12
|
-
const stack = new Set(currentChunk.parentsIterable);
|
13
|
-
|
14
|
-
for (const chunk of stack) {
|
15
|
-
if (chunk.containsModule(module)) {
|
16
|
-
chunks.push(chunk);
|
17
|
-
} else {
|
18
|
-
for (const parent of chunk.parentsIterable) {
|
19
|
-
stack.add(parent);
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
|
24
|
-
return chunks;
|
25
|
-
};
|
26
|
-
|
27
|
-
class RemoveParentModulesPlugin {
|
28
|
-
apply(compiler) {
|
29
|
-
compiler.hooks.compilation.tap("RemoveParentModulesPlugin", compilation => {
|
30
|
-
const handler = (chunks, chunkGroups) => {
|
31
|
-
const queue = new Queue();
|
32
|
-
const availableModulesMap = new WeakMap();
|
33
|
-
|
34
|
-
for (const chunkGroup of compilation.entrypoints.values()) {
|
35
|
-
// initialize available modules for chunks without parents
|
36
|
-
availableModulesMap.set(chunkGroup, new Set());
|
37
|
-
for (const child of chunkGroup.childrenIterable)
|
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
|
-
const
|
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
|
-
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const Queue = require("../util/Queue");
|
8
|
+
const { intersect } = require("../util/SetHelpers");
|
9
|
+
|
10
|
+
const getParentChunksWithModule = (currentChunk, module) => {
|
11
|
+
const chunks = [];
|
12
|
+
const stack = new Set(currentChunk.parentsIterable);
|
13
|
+
|
14
|
+
for (const chunk of stack) {
|
15
|
+
if (chunk.containsModule(module)) {
|
16
|
+
chunks.push(chunk);
|
17
|
+
} else {
|
18
|
+
for (const parent of chunk.parentsIterable) {
|
19
|
+
stack.add(parent);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
return chunks;
|
25
|
+
};
|
26
|
+
|
27
|
+
class RemoveParentModulesPlugin {
|
28
|
+
apply(compiler) {
|
29
|
+
compiler.hooks.compilation.tap("RemoveParentModulesPlugin", compilation => {
|
30
|
+
const handler = (chunks, chunkGroups) => {
|
31
|
+
const queue = new Queue();
|
32
|
+
const availableModulesMap = new WeakMap();
|
33
|
+
|
34
|
+
for (const chunkGroup of compilation.entrypoints.values()) {
|
35
|
+
// initialize available modules for chunks without parents
|
36
|
+
availableModulesMap.set(chunkGroup, new Set());
|
37
|
+
for (const child of chunkGroup.childrenIterable) {
|
38
|
+
queue.enqueue(child);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
while (queue.length > 0) {
|
43
|
+
const chunkGroup = queue.dequeue();
|
44
|
+
let availableModules = availableModulesMap.get(chunkGroup);
|
45
|
+
let changed = false;
|
46
|
+
for (const parent of chunkGroup.parentsIterable) {
|
47
|
+
const availableModulesInParent = availableModulesMap.get(parent);
|
48
|
+
if (availableModulesInParent !== undefined) {
|
49
|
+
// If we know the available modules in parent: process these
|
50
|
+
if (availableModules === undefined) {
|
51
|
+
// if we have not own info yet: create new entry
|
52
|
+
availableModules = new Set(availableModulesInParent);
|
53
|
+
for (const chunk of parent.chunks) {
|
54
|
+
for (const m of chunk.modulesIterable) {
|
55
|
+
availableModules.add(m);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
availableModulesMap.set(chunkGroup, availableModules);
|
59
|
+
changed = true;
|
60
|
+
} else {
|
61
|
+
for (const m of availableModules) {
|
62
|
+
if (
|
63
|
+
!parent.containsModule(m) &&
|
64
|
+
!availableModulesInParent.has(m)
|
65
|
+
) {
|
66
|
+
availableModules.delete(m);
|
67
|
+
changed = true;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
if (changed) {
|
74
|
+
// if something changed: enqueue our children
|
75
|
+
for (const child of chunkGroup.childrenIterable) {
|
76
|
+
queue.enqueue(child);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
// now we have available modules for every chunk
|
82
|
+
for (const chunk of chunks) {
|
83
|
+
const availableModulesSets = Array.from(
|
84
|
+
chunk.groupsIterable,
|
85
|
+
chunkGroup => availableModulesMap.get(chunkGroup)
|
86
|
+
);
|
87
|
+
if (availableModulesSets.some(s => s === undefined)) continue; // No info about this chunk group
|
88
|
+
const availableModules =
|
89
|
+
availableModulesSets.length === 1
|
90
|
+
? availableModulesSets[0]
|
91
|
+
: intersect(availableModulesSets);
|
92
|
+
const numberOfModules = chunk.getNumberOfModules();
|
93
|
+
const toRemove = new Set();
|
94
|
+
if (numberOfModules < availableModules.size) {
|
95
|
+
for (const m of chunk.modulesIterable) {
|
96
|
+
if (availableModules.has(m)) {
|
97
|
+
toRemove.add(m);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
} else {
|
101
|
+
for (const m of availableModules) {
|
102
|
+
if (chunk.containsModule(m)) {
|
103
|
+
toRemove.add(m);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
for (const module of toRemove) {
|
108
|
+
module.rewriteChunkInReasons(
|
109
|
+
chunk,
|
110
|
+
getParentChunksWithModule(chunk, module)
|
111
|
+
);
|
112
|
+
chunk.removeModule(module);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
};
|
116
|
+
compilation.hooks.optimizeChunksBasic.tap(
|
117
|
+
"RemoveParentModulesPlugin",
|
118
|
+
handler
|
119
|
+
);
|
120
|
+
compilation.hooks.optimizeExtractedChunksBasic.tap(
|
121
|
+
"RemoveParentModulesPlugin",
|
122
|
+
handler
|
123
|
+
);
|
124
|
+
});
|
125
|
+
}
|
126
|
+
}
|
127
|
+
module.exports = RemoveParentModulesPlugin;
|
@@ -1,41 +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
|
-
module.exports = class RuntimeChunkPlugin {
|
8
|
-
constructor(options) {
|
9
|
-
this.options = Object.assign(
|
10
|
-
{
|
11
|
-
name: entrypoint => `runtime~${entrypoint.name}`
|
12
|
-
},
|
13
|
-
options
|
14
|
-
);
|
15
|
-
}
|
16
|
-
|
17
|
-
apply(compiler) {
|
18
|
-
compiler.hooks.thisCompilation.tap("RuntimeChunkPlugin", compilation => {
|
19
|
-
compilation.hooks.optimizeChunksAdvanced.tap("RuntimeChunkPlugin", () => {
|
20
|
-
for (const entrypoint of compilation.entrypoints.values()) {
|
21
|
-
const chunk = entrypoint.getRuntimeChunk();
|
22
|
-
let name = this.options.name;
|
23
|
-
if (typeof name === "function") {
|
24
|
-
name = name(entrypoint);
|
25
|
-
}
|
26
|
-
if (
|
27
|
-
chunk.getNumberOfModules() > 0 ||
|
28
|
-
!chunk.preventIntegration ||
|
29
|
-
chunk.name !== name
|
30
|
-
) {
|
31
|
-
const newChunk = compilation.addChunk(name);
|
32
|
-
newChunk.preventIntegration = true;
|
33
|
-
entrypoint.unshiftChunk(newChunk);
|
34
|
-
newChunk.addGroup(entrypoint);
|
35
|
-
entrypoint.setRuntimeChunk(newChunk);
|
36
|
-
}
|
37
|
-
}
|
38
|
-
});
|
39
|
-
});
|
40
|
-
}
|
41
|
-
};
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
module.exports = class RuntimeChunkPlugin {
|
8
|
+
constructor(options) {
|
9
|
+
this.options = Object.assign(
|
10
|
+
{
|
11
|
+
name: entrypoint => `runtime~${entrypoint.name}`
|
12
|
+
},
|
13
|
+
options
|
14
|
+
);
|
15
|
+
}
|
16
|
+
|
17
|
+
apply(compiler) {
|
18
|
+
compiler.hooks.thisCompilation.tap("RuntimeChunkPlugin", compilation => {
|
19
|
+
compilation.hooks.optimizeChunksAdvanced.tap("RuntimeChunkPlugin", () => {
|
20
|
+
for (const entrypoint of compilation.entrypoints.values()) {
|
21
|
+
const chunk = entrypoint.getRuntimeChunk();
|
22
|
+
let name = this.options.name;
|
23
|
+
if (typeof name === "function") {
|
24
|
+
name = name(entrypoint);
|
25
|
+
}
|
26
|
+
if (
|
27
|
+
chunk.getNumberOfModules() > 0 ||
|
28
|
+
!chunk.preventIntegration ||
|
29
|
+
chunk.name !== name
|
30
|
+
) {
|
31
|
+
const newChunk = compilation.addChunk(name);
|
32
|
+
newChunk.preventIntegration = true;
|
33
|
+
entrypoint.unshiftChunk(newChunk);
|
34
|
+
newChunk.addGroup(entrypoint);
|
35
|
+
entrypoint.setRuntimeChunk(newChunk);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
});
|
39
|
+
});
|
40
|
+
}
|
41
|
+
};
|