webpack 3.8.0 → 3.8.1

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.
Files changed (198) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/buildin/.eslintrc +7 -7
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +21 -21
  7. package/buildin/harmony-module.js +24 -24
  8. package/buildin/module.js +22 -22
  9. package/buildin/system.js +7 -7
  10. package/hot/.eslintrc +9 -9
  11. package/hot/dev-server.js +53 -53
  12. package/hot/emitter.js +2 -2
  13. package/hot/log-apply-result.js +38 -38
  14. package/hot/log.js +44 -44
  15. package/hot/only-dev-server.js +71 -71
  16. package/hot/poll.js +34 -34
  17. package/hot/signal.js +51 -51
  18. package/lib/APIPlugin.js +45 -45
  19. package/lib/AsyncDependenciesBlock.js +43 -43
  20. package/lib/AutomaticPrefetchPlugin.js +36 -36
  21. package/lib/BasicEvaluatedExpression.js +203 -203
  22. package/lib/CaseSensitiveModulesWarning.js +49 -49
  23. package/lib/ChunkRenderError.js +24 -24
  24. package/lib/ChunkTemplate.js +36 -36
  25. package/lib/CompatibilityPlugin.js +57 -57
  26. package/lib/Compiler.js +523 -523
  27. package/lib/ConstPlugin.js +60 -60
  28. package/lib/ContextModule.js +431 -431
  29. package/lib/ContextReplacementPlugin.js +111 -111
  30. package/lib/DefinePlugin.js +123 -123
  31. package/lib/DelegatedModule.js +98 -98
  32. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  33. package/lib/DelegatedPlugin.js +30 -30
  34. package/lib/DependenciesBlockVariable.js +51 -51
  35. package/lib/DllEntryPlugin.js +37 -37
  36. package/lib/DllModule.js +58 -58
  37. package/lib/DllModuleFactory.js +20 -20
  38. package/lib/DllPlugin.js +38 -38
  39. package/lib/DllReferencePlugin.js +62 -62
  40. package/lib/DynamicEntryPlugin.js +59 -59
  41. package/lib/EntryModuleNotFoundError.js +22 -22
  42. package/lib/EntryOptionPlugin.js +31 -31
  43. package/lib/EnvironmentPlugin.js +50 -50
  44. package/lib/ErrorHelpers.js +31 -31
  45. package/lib/EvalDevToolModulePlugin.js +22 -22
  46. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  47. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  48. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  49. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  50. package/lib/ExtendedAPIPlugin.js +47 -47
  51. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  52. package/lib/ExternalsPlugin.js +21 -21
  53. package/lib/FlagDependencyExportsPlugin.js +101 -101
  54. package/lib/FunctionModulePlugin.js +24 -24
  55. package/lib/HashedModuleIdsPlugin.js +42 -42
  56. package/lib/HotUpdateChunkTemplate.js +31 -31
  57. package/lib/IgnorePlugin.js +69 -69
  58. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  59. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  60. package/lib/JsonpTemplatePlugin.js +21 -21
  61. package/lib/LibManifestPlugin.js +63 -63
  62. package/lib/LibraryTemplatePlugin.js +92 -92
  63. package/lib/LoaderOptionsPlugin.js +36 -36
  64. package/lib/LoaderTargetPlugin.js +19 -19
  65. package/lib/MemoryOutputFileSystem.js +5 -5
  66. package/lib/ModuleBuildError.js +42 -42
  67. package/lib/ModuleDependencyError.js +22 -22
  68. package/lib/ModuleDependencyWarning.js +22 -22
  69. package/lib/ModuleError.js +24 -24
  70. package/lib/ModuleFilenameHelpers.js +162 -162
  71. package/lib/ModuleNotFoundError.js +26 -26
  72. package/lib/ModuleReason.js +50 -50
  73. package/lib/ModuleTemplate.js +23 -23
  74. package/lib/ModuleWarning.js +24 -24
  75. package/lib/MovedToPluginWarningPlugin.js +21 -21
  76. package/lib/MultiCompiler.js +164 -164
  77. package/lib/MultiEntryPlugin.js +39 -39
  78. package/lib/MultiModuleFactory.js +19 -19
  79. package/lib/MultiStats.js +79 -79
  80. package/lib/MultiWatching.js +32 -32
  81. package/lib/NamedChunksPlugin.js +30 -30
  82. package/lib/NamedModulesPlugin.js +27 -27
  83. package/lib/NewWatchingPlugin.js +15 -15
  84. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  85. package/lib/NoErrorsPlugin.js +29 -29
  86. package/lib/NodeStuffPlugin.js +97 -97
  87. package/lib/NormalModuleReplacementPlugin.js +45 -45
  88. package/lib/NullFactory.js +12 -12
  89. package/lib/OptionsApply.js +10 -10
  90. package/lib/ParserHelpers.js +85 -85
  91. package/lib/PrefetchPlugin.js +31 -31
  92. package/lib/ProgressPlugin.js +192 -192
  93. package/lib/ProvidePlugin.js +55 -55
  94. package/lib/RawModule.js +54 -54
  95. package/lib/RequestShortener.js +63 -63
  96. package/lib/RequireJsStuffPlugin.js +31 -31
  97. package/lib/RuleSet.js +444 -444
  98. package/lib/SetVarMainTemplatePlugin.js +41 -41
  99. package/lib/SingleEntryPlugin.js +35 -35
  100. package/lib/SizeFormatHelpers.js +18 -18
  101. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  102. package/lib/UnsupportedFeatureWarning.js +21 -21
  103. package/lib/UseStrictPlugin.js +34 -34
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  105. package/lib/WatchIgnorePlugin.js +49 -49
  106. package/lib/WebpackError.js +11 -11
  107. package/lib/WebpackOptionsDefaulter.js +129 -129
  108. package/lib/WebpackOptionsValidationError.js +196 -196
  109. package/lib/compareLocations.js +36 -36
  110. package/lib/dependencies/AMDDefineDependency.js +142 -142
  111. package/lib/dependencies/AMDPlugin.js +119 -119
  112. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  113. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  114. package/lib/dependencies/AMDRequireDependency.js +67 -67
  115. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  116. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  117. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  118. package/lib/dependencies/ConstDependency.js +32 -32
  119. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  120. package/lib/dependencies/ContextElementDependency.js +21 -21
  121. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  122. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  123. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  124. package/lib/dependencies/DllEntryDependency.js +20 -20
  125. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  126. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  127. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  128. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  129. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  130. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  131. package/lib/dependencies/ImportParserPlugin.js +89 -89
  132. package/lib/dependencies/ImportPlugin.js +60 -60
  133. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  134. package/lib/dependencies/LoaderDependency.js +18 -18
  135. package/lib/dependencies/LoaderPlugin.js +60 -60
  136. package/lib/dependencies/LocalModule.js +23 -23
  137. package/lib/dependencies/LocalModuleDependency.js +24 -24
  138. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  139. package/lib/dependencies/ModuleDependency.js +23 -23
  140. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  141. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  142. package/lib/dependencies/MultiEntryDependency.js +20 -20
  143. package/lib/dependencies/NullDependency.js +24 -24
  144. package/lib/dependencies/PrefetchDependency.js +18 -18
  145. package/lib/dependencies/RequireContextDependency.js +26 -26
  146. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  147. package/lib/dependencies/RequireContextPlugin.js +96 -96
  148. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  149. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  150. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  151. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  152. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  153. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  154. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  155. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  156. package/lib/dependencies/RequireResolveDependency.js +22 -22
  157. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  158. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  159. package/lib/dependencies/SingleEntryDependency.js +18 -18
  160. package/lib/dependencies/SystemPlugin.js +44 -44
  161. package/lib/dependencies/UnsupportedDependency.js +23 -23
  162. package/lib/dependencies/WebpackMissingModule.js +18 -18
  163. package/lib/dependencies/getFunctionExpression.js +44 -44
  164. package/lib/formatLocation.js +54 -54
  165. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  166. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  167. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  168. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  169. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  170. package/lib/node/NodeOutputFileSystem.js +22 -22
  171. package/lib/node/NodeSourcePlugin.js +88 -88
  172. package/lib/node/NodeTargetPlugin.js +15 -15
  173. package/lib/node/NodeTemplatePlugin.js +27 -27
  174. package/lib/node/NodeWatchFileSystem.js +72 -72
  175. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  176. package/lib/optimize/DedupePlugin.js +15 -15
  177. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  178. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  179. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  180. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  181. package/lib/optimize/UglifyJsPlugin.js +9 -9
  182. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  183. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  184. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  185. package/lib/performance/SizeLimitsPlugin.js +102 -102
  186. package/lib/prepareOptions.js +29 -29
  187. package/lib/removeAndDo.js +15 -15
  188. package/lib/util/Semaphore.js +32 -32
  189. package/lib/util/identifier.js +38 -38
  190. package/lib/validateSchema.js +66 -66
  191. package/lib/web/WebEnvironmentPlugin.js +18 -18
  192. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  193. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  194. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  195. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  196. package/package.json +1 -1
  197. package/schemas/ajv.absolutePath.js +29 -29
  198. package/schemas/webpackOptionsSchema.json +16 -0
@@ -1,59 +1,59 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- class LimitChunkCountPlugin {
8
- constructor(options) {
9
- if(options !== undefined && typeof options !== "object" || Array.isArray(options)) {
10
- throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.js.org/plugins/");
11
- }
12
- this.options = options || {};
13
- }
14
- apply(compiler) {
15
- const options = this.options;
16
- compiler.plugin("compilation", (compilation) => {
17
- compilation.plugin("optimize-chunks-advanced", (chunks) => {
18
- const maxChunks = options.maxChunks;
19
- if(!maxChunks) return;
20
- if(maxChunks < 1) return;
21
- if(chunks.length <= maxChunks) return;
22
-
23
- if(chunks.length > maxChunks) {
24
- const sortedExtendedPairCombinations = chunks.reduce((combinations, a, idx) => {
25
- // create combination pairs
26
- for(let i = 0; i < idx; i++) {
27
- const b = chunks[i];
28
- combinations.push([b, a]);
29
- }
30
- return combinations;
31
- }, []).map((pair) => {
32
- // extend combination pairs with size and integrated size
33
- const a = pair[0].size(options);
34
- const b = pair[1].size(options);
35
- const ab = pair[0].integratedSize(pair[1], options);
36
- return [a + b - ab, ab, pair[0], pair[1], a, b];
37
- }).filter((extendedPair) => {
38
- // filter pairs that do not have an integratedSize
39
- // meaning they can NOT be integrated!
40
- return extendedPair[1] !== false;
41
- }).sort((a, b) => { // sadly javascript does an inplace sort here
42
- // sort them by size
43
- const diff = b[0] - a[0];
44
- if(diff !== 0) return diff;
45
- return a[1] - b[1];
46
- });
47
-
48
- const pair = sortedExtendedPairCombinations[0];
49
-
50
- if(pair && pair[2].integrate(pair[3], "limit")) {
51
- chunks.splice(chunks.indexOf(pair[3]), 1);
52
- return true;
53
- }
54
- }
55
- });
56
- });
57
- }
58
- }
59
- module.exports = LimitChunkCountPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class LimitChunkCountPlugin {
8
+ constructor(options) {
9
+ if(options !== undefined && typeof options !== "object" || Array.isArray(options)) {
10
+ throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.js.org/plugins/");
11
+ }
12
+ this.options = options || {};
13
+ }
14
+ apply(compiler) {
15
+ const options = this.options;
16
+ compiler.plugin("compilation", (compilation) => {
17
+ compilation.plugin("optimize-chunks-advanced", (chunks) => {
18
+ const maxChunks = options.maxChunks;
19
+ if(!maxChunks) return;
20
+ if(maxChunks < 1) return;
21
+ if(chunks.length <= maxChunks) return;
22
+
23
+ if(chunks.length > maxChunks) {
24
+ const sortedExtendedPairCombinations = chunks.reduce((combinations, a, idx) => {
25
+ // create combination pairs
26
+ for(let i = 0; i < idx; i++) {
27
+ const b = chunks[i];
28
+ combinations.push([b, a]);
29
+ }
30
+ return combinations;
31
+ }, []).map((pair) => {
32
+ // extend combination pairs with size and integrated size
33
+ const a = pair[0].size(options);
34
+ const b = pair[1].size(options);
35
+ const ab = pair[0].integratedSize(pair[1], options);
36
+ return [a + b - ab, ab, pair[0], pair[1], a, b];
37
+ }).filter((extendedPair) => {
38
+ // filter pairs that do not have an integratedSize
39
+ // meaning they can NOT be integrated!
40
+ return extendedPair[1] !== false;
41
+ }).sort((a, b) => { // sadly javascript does an inplace sort here
42
+ // sort them by size
43
+ const diff = b[0] - a[0];
44
+ if(diff !== 0) return diff;
45
+ return a[1] - b[1];
46
+ });
47
+
48
+ const pair = sortedExtendedPairCombinations[0];
49
+
50
+ if(pair && pair[2].integrate(pair[3], "limit")) {
51
+ chunks.splice(chunks.indexOf(pair[3]), 1);
52
+ return true;
53
+ }
54
+ }
55
+ });
56
+ });
57
+ }
58
+ }
59
+ module.exports = LimitChunkCountPlugin;
@@ -1,65 +1,65 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- class MinChunkSizePlugin {
8
- constructor(options) {
9
- if(typeof options !== "object" || Array.isArray(options)) {
10
- throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.js.org/plugins/");
11
- }
12
- this.options = options;
13
- }
14
-
15
- apply(compiler) {
16
- const options = this.options;
17
- const minChunkSize = options.minChunkSize;
18
- compiler.plugin("compilation", (compilation) => {
19
- compilation.plugin("optimize-chunks-advanced", (chunks) => {
20
- const equalOptions = {
21
- chunkOverhead: 1,
22
- entryChunkMultiplicator: 1
23
- };
24
-
25
- const sortedSizeFilteredExtendedPairCombinations = chunks.reduce((combinations, a, idx) => {
26
- // create combination pairs
27
- for(let i = 0; i < idx; i++) {
28
- const b = chunks[i];
29
- combinations.push([b, a]);
30
- }
31
- return combinations;
32
- }, []).filter((pair) => {
33
- // check if one of the chunks sizes is smaller than the minChunkSize
34
- const p0SmallerThanMinChunkSize = pair[0].size(equalOptions) < minChunkSize;
35
- const p1SmallerThanMinChunkSize = pair[1].size(equalOptions) < minChunkSize;
36
- return p0SmallerThanMinChunkSize || p1SmallerThanMinChunkSize;
37
- }).map((pair) => {
38
- // extend combination pairs with size and integrated size
39
- const a = pair[0].size(options);
40
- const b = pair[1].size(options);
41
- const ab = pair[0].integratedSize(pair[1], options);
42
- return [a + b - ab, ab, pair[0], pair[1]];
43
- }).filter((pair) => {
44
- // filter pairs that do not have an integratedSize
45
- // meaning they can NOT be integrated!
46
- return pair[1] !== false;
47
- }).sort((a, b) => { // sadly javascript does an inplace sort here
48
- // sort by size
49
- const diff = b[0] - a[0];
50
- if(diff !== 0) return diff;
51
- return a[1] - b[1];
52
- });
53
-
54
- if(sortedSizeFilteredExtendedPairCombinations.length === 0) return;
55
-
56
- const pair = sortedSizeFilteredExtendedPairCombinations[0];
57
-
58
- pair[2].integrate(pair[3], "min-size");
59
- chunks.splice(chunks.indexOf(pair[3]), 1);
60
- return true;
61
- });
62
- });
63
- }
64
- }
65
- 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
+ class MinChunkSizePlugin {
8
+ constructor(options) {
9
+ if(typeof options !== "object" || Array.isArray(options)) {
10
+ throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.js.org/plugins/");
11
+ }
12
+ this.options = options;
13
+ }
14
+
15
+ apply(compiler) {
16
+ const options = this.options;
17
+ const minChunkSize = options.minChunkSize;
18
+ compiler.plugin("compilation", (compilation) => {
19
+ compilation.plugin("optimize-chunks-advanced", (chunks) => {
20
+ const equalOptions = {
21
+ chunkOverhead: 1,
22
+ entryChunkMultiplicator: 1
23
+ };
24
+
25
+ const sortedSizeFilteredExtendedPairCombinations = chunks.reduce((combinations, a, idx) => {
26
+ // create combination pairs
27
+ for(let i = 0; i < idx; i++) {
28
+ const b = chunks[i];
29
+ combinations.push([b, a]);
30
+ }
31
+ return combinations;
32
+ }, []).filter((pair) => {
33
+ // check if one of the chunks sizes is smaller than the minChunkSize
34
+ const p0SmallerThanMinChunkSize = pair[0].size(equalOptions) < minChunkSize;
35
+ const p1SmallerThanMinChunkSize = pair[1].size(equalOptions) < minChunkSize;
36
+ return p0SmallerThanMinChunkSize || p1SmallerThanMinChunkSize;
37
+ }).map((pair) => {
38
+ // extend combination pairs with size and integrated size
39
+ const a = pair[0].size(options);
40
+ const b = pair[1].size(options);
41
+ const ab = pair[0].integratedSize(pair[1], options);
42
+ return [a + b - ab, ab, pair[0], pair[1]];
43
+ }).filter((pair) => {
44
+ // filter pairs that do not have an integratedSize
45
+ // meaning they can NOT be integrated!
46
+ return pair[1] !== false;
47
+ }).sort((a, b) => { // sadly javascript does an inplace sort here
48
+ // sort by size
49
+ const diff = b[0] - a[0];
50
+ if(diff !== 0) return diff;
51
+ return a[1] - b[1];
52
+ });
53
+
54
+ if(sortedSizeFilteredExtendedPairCombinations.length === 0) return;
55
+
56
+ const pair = sortedSizeFilteredExtendedPairCombinations[0];
57
+
58
+ pair[2].integrate(pair[3], "min-size");
59
+ chunks.splice(chunks.indexOf(pair[3]), 1);
60
+ return true;
61
+ });
62
+ });
63
+ }
64
+ }
65
+ module.exports = MinChunkSizePlugin;
@@ -1,21 +1,21 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- class RemoveEmptyChunksPlugin {
8
-
9
- apply(compiler) {
10
- compiler.plugin("compilation", (compilation) => {
11
- compilation.plugin(["optimize-chunks-basic", "optimize-extracted-chunks-basic"], (chunks) => {
12
- chunks.filter((chunk) => chunk.isEmpty() && !chunk.hasRuntime() && !chunk.hasEntryModule())
13
- .forEach((chunk) => {
14
- chunk.remove("empty");
15
- chunks.splice(chunks.indexOf(chunk), 1);
16
- });
17
- });
18
- });
19
- }
20
- }
21
- module.exports = RemoveEmptyChunksPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class RemoveEmptyChunksPlugin {
8
+
9
+ apply(compiler) {
10
+ compiler.plugin("compilation", (compilation) => {
11
+ compilation.plugin(["optimize-chunks-basic", "optimize-extracted-chunks-basic"], (chunks) => {
12
+ chunks.filter((chunk) => chunk.isEmpty() && !chunk.hasRuntime() && !chunk.hasEntryModule())
13
+ .forEach((chunk) => {
14
+ chunk.remove("empty");
15
+ chunks.splice(chunks.indexOf(chunk), 1);
16
+ });
17
+ });
18
+ });
19
+ }
20
+ }
21
+ module.exports = RemoveEmptyChunksPlugin;
@@ -1,9 +1,9 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
8
-
9
- module.exports = UglifyJsPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
8
+
9
+ module.exports = UglifyJsPlugin;
@@ -1,23 +1,23 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Sean Larkin @thelarkinn
4
- */
5
- "use strict";
6
-
7
- const WebpackError = require("../WebpackError");
8
- const SizeFormatHelpers = require("../SizeFormatHelpers");
9
-
10
- module.exports = class AssetsOverSizeLimitWarning extends WebpackError {
11
- constructor(assetsOverSizeLimit, assetLimit) {
12
- super();
13
-
14
- this.name = "AssetsOverSizeLimitWarning";
15
- this.assets = assetsOverSizeLimit;
16
- const assetLists = this.assets.map(asset => `\n ${asset.name} (${SizeFormatHelpers.formatSize(asset.size)})`).join("");
17
- this.message = `asset size limit: The following asset(s) exceed the recommended size limit (${SizeFormatHelpers.formatSize(assetLimit)}).
18
- This can impact web performance.
19
- Assets: ${assetLists}`;
20
-
21
- Error.captureStackTrace(this, this.constructor);
22
- }
23
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @thelarkinn
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("../WebpackError");
8
+ const SizeFormatHelpers = require("../SizeFormatHelpers");
9
+
10
+ module.exports = class AssetsOverSizeLimitWarning extends WebpackError {
11
+ constructor(assetsOverSizeLimit, assetLimit) {
12
+ super();
13
+
14
+ this.name = "AssetsOverSizeLimitWarning";
15
+ this.assets = assetsOverSizeLimit;
16
+ const assetLists = this.assets.map(asset => `\n ${asset.name} (${SizeFormatHelpers.formatSize(asset.size)})`).join("");
17
+ this.message = `asset size limit: The following asset(s) exceed the recommended size limit (${SizeFormatHelpers.formatSize(assetLimit)}).
18
+ This can impact web performance.
19
+ Assets: ${assetLists}`;
20
+
21
+ Error.captureStackTrace(this, this.constructor);
22
+ }
23
+ };
@@ -1,28 +1,28 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Sean Larkin @thelarkinn
4
- */
5
- "use strict";
6
-
7
- const WebpackError = require("../WebpackError");
8
- const SizeFormatHelpers = require("../SizeFormatHelpers");
9
-
10
- module.exports = class EntrypointsOverSizeLimitWarning extends WebpackError {
11
- constructor(entrypoints, entrypointLimit) {
12
- super();
13
-
14
- this.name = "EntrypointsOverSizeLimitWarning";
15
- this.entrypoints = entrypoints;
16
- const entrypointList = this.entrypoints.map(entrypoint => `\n ${
17
- entrypoint.name
18
- } (${
19
- SizeFormatHelpers.formatSize(entrypoint.size)
20
- })\n${
21
- entrypoint.files.map(asset => ` ${asset}`).join("\n")
22
- }`).join("");
23
- this.message = `entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (${SizeFormatHelpers.formatSize(entrypointLimit)}). This can impact web performance.
24
- Entrypoints:${entrypointList}\n`;
25
-
26
- Error.captureStackTrace(this, this.constructor);
27
- }
28
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @thelarkinn
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("../WebpackError");
8
+ const SizeFormatHelpers = require("../SizeFormatHelpers");
9
+
10
+ module.exports = class EntrypointsOverSizeLimitWarning extends WebpackError {
11
+ constructor(entrypoints, entrypointLimit) {
12
+ super();
13
+
14
+ this.name = "EntrypointsOverSizeLimitWarning";
15
+ this.entrypoints = entrypoints;
16
+ const entrypointList = this.entrypoints.map(entrypoint => `\n ${
17
+ entrypoint.name
18
+ } (${
19
+ SizeFormatHelpers.formatSize(entrypoint.size)
20
+ })\n${
21
+ entrypoint.files.map(asset => ` ${asset}`).join("\n")
22
+ }`).join("");
23
+ this.message = `entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (${SizeFormatHelpers.formatSize(entrypointLimit)}). This can impact web performance.
24
+ Entrypoints:${entrypointList}\n`;
25
+
26
+ Error.captureStackTrace(this, this.constructor);
27
+ }
28
+ };
@@ -1,20 +1,20 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Sean Larkin @thelarkinn
4
- */
5
- "use strict";
6
-
7
- const WebpackError = require("../WebpackError");
8
-
9
- module.exports = class NoAsyncChunksWarning extends WebpackError {
10
- constructor() {
11
- super();
12
-
13
- this.name = "NoAsyncChunksWarning";
14
- this.message = "webpack performance recommendations: \n" +
15
- "You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.\n" +
16
- "For more info visit https://webpack.js.org/guides/code-splitting/";
17
-
18
- Error.captureStackTrace(this, this.constructor);
19
- }
20
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @thelarkinn
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("../WebpackError");
8
+
9
+ module.exports = class NoAsyncChunksWarning extends WebpackError {
10
+ constructor() {
11
+ super();
12
+
13
+ this.name = "NoAsyncChunksWarning";
14
+ this.message = "webpack performance recommendations: \n" +
15
+ "You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.\n" +
16
+ "For more info visit https://webpack.js.org/guides/code-splitting/";
17
+
18
+ Error.captureStackTrace(this, this.constructor);
19
+ }
20
+ };
@@ -1,102 +1,102 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Sean Larkin @thelarkinn
4
- */
5
- "use strict";
6
- const EntrypointsOverSizeLimitWarning = require("./EntrypointsOverSizeLimitWarning");
7
- const AssetsOverSizeLimitWarning = require("./AssetsOverSizeLimitWarning");
8
- const NoAsyncChunksWarning = require("./NoAsyncChunksWarning");
9
-
10
- module.exports = class SizeLimitsPlugin {
11
- constructor(options) {
12
- this.hints = options.hints;
13
- this.maxAssetSize = options.maxAssetSize;
14
- this.maxEntrypointSize = options.maxEntrypointSize;
15
- this.assetFilter = options.assetFilter;
16
- }
17
- apply(compiler) {
18
- const entrypointSizeLimit = this.maxEntrypointSize;
19
- const assetSizeLimit = this.maxAssetSize;
20
- const hints = this.hints;
21
- const assetFilter = this.assetFilter || (asset => !(/\.map$/.test(asset)));
22
-
23
- compiler.plugin("after-emit", (compilation, callback) => {
24
- const warnings = [];
25
-
26
- const getEntrypointSize = entrypoint =>
27
- entrypoint.getFiles()
28
- .filter(assetFilter)
29
- .map(file => compilation.assets[file])
30
- .filter(Boolean)
31
- .map(asset => asset.size())
32
- .reduce((currentSize, nextSize) => currentSize + nextSize, 0);
33
-
34
- const assetsOverSizeLimit = [];
35
- Object.keys(compilation.assets)
36
- .filter(assetFilter)
37
- .forEach(assetName => {
38
- const asset = compilation.assets[assetName];
39
- const size = asset.size();
40
-
41
- if(size > assetSizeLimit) {
42
- assetsOverSizeLimit.push({
43
- name: assetName,
44
- size: size,
45
- });
46
- asset.isOverSizeLimit = true;
47
- }
48
- });
49
-
50
- const entrypointsOverLimit = [];
51
- Object.keys(compilation.entrypoints)
52
- .forEach(key => {
53
- const entry = compilation.entrypoints[key];
54
- const size = getEntrypointSize(entry, compilation);
55
-
56
- if(size > entrypointSizeLimit) {
57
- entrypointsOverLimit.push({
58
- name: key,
59
- size: size,
60
- files: entry.getFiles().filter(assetFilter)
61
- });
62
- entry.isOverSizeLimit = true;
63
- }
64
- });
65
-
66
- if(hints) {
67
- // 1. Individual Chunk: Size < 250kb
68
- // 2. Collective Initial Chunks [entrypoint] (Each Set?): Size < 250kb
69
- // 3. No Async Chunks
70
- // if !1, then 2, if !2 return
71
- if(assetsOverSizeLimit.length > 0) {
72
- warnings.push(
73
- new AssetsOverSizeLimitWarning(
74
- assetsOverSizeLimit,
75
- assetSizeLimit));
76
- }
77
- if(entrypointsOverLimit.length > 0) {
78
- warnings.push(
79
- new EntrypointsOverSizeLimitWarning(
80
- entrypointsOverLimit,
81
- entrypointSizeLimit));
82
- }
83
-
84
- if(warnings.length > 0) {
85
- const hasAsyncChunks = compilation.chunks.filter(chunk => !chunk.isInitial()).length > 0;
86
-
87
- if(!hasAsyncChunks) {
88
- warnings.push(new NoAsyncChunksWarning());
89
- }
90
-
91
- if(hints === "error") {
92
- Array.prototype.push.apply(compilation.errors, warnings);
93
- } else {
94
- Array.prototype.push.apply(compilation.warnings, warnings);
95
- }
96
- }
97
- }
98
-
99
- callback();
100
- });
101
- }
102
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @thelarkinn
4
+ */
5
+ "use strict";
6
+ const EntrypointsOverSizeLimitWarning = require("./EntrypointsOverSizeLimitWarning");
7
+ const AssetsOverSizeLimitWarning = require("./AssetsOverSizeLimitWarning");
8
+ const NoAsyncChunksWarning = require("./NoAsyncChunksWarning");
9
+
10
+ module.exports = class SizeLimitsPlugin {
11
+ constructor(options) {
12
+ this.hints = options.hints;
13
+ this.maxAssetSize = options.maxAssetSize;
14
+ this.maxEntrypointSize = options.maxEntrypointSize;
15
+ this.assetFilter = options.assetFilter;
16
+ }
17
+ apply(compiler) {
18
+ const entrypointSizeLimit = this.maxEntrypointSize;
19
+ const assetSizeLimit = this.maxAssetSize;
20
+ const hints = this.hints;
21
+ const assetFilter = this.assetFilter || (asset => !(/\.map$/.test(asset)));
22
+
23
+ compiler.plugin("after-emit", (compilation, callback) => {
24
+ const warnings = [];
25
+
26
+ const getEntrypointSize = entrypoint =>
27
+ entrypoint.getFiles()
28
+ .filter(assetFilter)
29
+ .map(file => compilation.assets[file])
30
+ .filter(Boolean)
31
+ .map(asset => asset.size())
32
+ .reduce((currentSize, nextSize) => currentSize + nextSize, 0);
33
+
34
+ const assetsOverSizeLimit = [];
35
+ Object.keys(compilation.assets)
36
+ .filter(assetFilter)
37
+ .forEach(assetName => {
38
+ const asset = compilation.assets[assetName];
39
+ const size = asset.size();
40
+
41
+ if(size > assetSizeLimit) {
42
+ assetsOverSizeLimit.push({
43
+ name: assetName,
44
+ size: size,
45
+ });
46
+ asset.isOverSizeLimit = true;
47
+ }
48
+ });
49
+
50
+ const entrypointsOverLimit = [];
51
+ Object.keys(compilation.entrypoints)
52
+ .forEach(key => {
53
+ const entry = compilation.entrypoints[key];
54
+ const size = getEntrypointSize(entry, compilation);
55
+
56
+ if(size > entrypointSizeLimit) {
57
+ entrypointsOverLimit.push({
58
+ name: key,
59
+ size: size,
60
+ files: entry.getFiles().filter(assetFilter)
61
+ });
62
+ entry.isOverSizeLimit = true;
63
+ }
64
+ });
65
+
66
+ if(hints) {
67
+ // 1. Individual Chunk: Size < 250kb
68
+ // 2. Collective Initial Chunks [entrypoint] (Each Set?): Size < 250kb
69
+ // 3. No Async Chunks
70
+ // if !1, then 2, if !2 return
71
+ if(assetsOverSizeLimit.length > 0) {
72
+ warnings.push(
73
+ new AssetsOverSizeLimitWarning(
74
+ assetsOverSizeLimit,
75
+ assetSizeLimit));
76
+ }
77
+ if(entrypointsOverLimit.length > 0) {
78
+ warnings.push(
79
+ new EntrypointsOverSizeLimitWarning(
80
+ entrypointsOverLimit,
81
+ entrypointSizeLimit));
82
+ }
83
+
84
+ if(warnings.length > 0) {
85
+ const hasAsyncChunks = compilation.chunks.filter(chunk => !chunk.isInitial()).length > 0;
86
+
87
+ if(!hasAsyncChunks) {
88
+ warnings.push(new NoAsyncChunksWarning());
89
+ }
90
+
91
+ if(hints === "error") {
92
+ Array.prototype.push.apply(compilation.errors, warnings);
93
+ } else {
94
+ Array.prototype.push.apply(compilation.warnings, warnings);
95
+ }
96
+ }
97
+ }
98
+
99
+ callback();
100
+ });
101
+ }
102
+ };