webpack 1.13.3 → 1.14.0

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 (212) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +310 -310
  3. package/buildin/amd-define.js +1 -1
  4. package/buildin/amd-options.js +1 -1
  5. package/buildin/module.js +10 -10
  6. package/hot/dev-server.js +63 -63
  7. package/hot/log-apply-result.js +25 -25
  8. package/hot/only-dev-server.js +77 -77
  9. package/hot/poll.js +37 -37
  10. package/hot/signal.js +65 -65
  11. package/lib/APIPlugin.js +49 -49
  12. package/lib/AbstractPlugin.js +22 -22
  13. package/lib/AmdMainTemplatePlugin.js +43 -43
  14. package/lib/ArrayMap.js +50 -50
  15. package/lib/AsyncDependenciesBlock.js +39 -39
  16. package/lib/AutomaticPrefetchPlugin.js +35 -35
  17. package/lib/BannerPlugin.js +34 -34
  18. package/lib/BasicEvaluatedExpression.js +140 -140
  19. package/lib/CachePlugin.js +43 -43
  20. package/lib/CaseSensitiveModulesWarning.js +16 -16
  21. package/lib/Chunk.js +252 -252
  22. package/lib/ChunkRenderError.js +17 -17
  23. package/lib/ChunkTemplate.js +37 -37
  24. package/lib/CompatibilityPlugin.js +42 -42
  25. package/lib/Compilation.js +891 -891
  26. package/lib/Compiler.js +407 -407
  27. package/lib/ConcatSource.js +5 -5
  28. package/lib/ConstPlugin.js +54 -54
  29. package/lib/ContextModule.js +130 -130
  30. package/lib/ContextModuleFactory.js +132 -132
  31. package/lib/ContextReplacementPlugin.js +93 -93
  32. package/lib/CriticalDependenciesWarning.js +24 -24
  33. package/lib/DefinePlugin.js +126 -126
  34. package/lib/DelegatedModule.js +69 -69
  35. package/lib/DelegatedModuleFactoryPlugin.js +51 -51
  36. package/lib/DelegatedPlugin.js +21 -21
  37. package/lib/DependenciesBlock.js +57 -57
  38. package/lib/DependenciesBlockVariable.js +41 -41
  39. package/lib/Dependency.js +54 -54
  40. package/lib/DllEntryPlugin.js +32 -32
  41. package/lib/DllModule.js +55 -55
  42. package/lib/DllModuleFactory.js +18 -18
  43. package/lib/DllPlugin.js +30 -30
  44. package/lib/DllReferencePlugin.js +26 -26
  45. package/lib/EntryModuleNotFoundError.js +15 -15
  46. package/lib/EntryOptionPlugin.js +28 -28
  47. package/lib/EnvironmentPlugin.js +28 -28
  48. package/lib/EvalDevToolModulePlugin.js +17 -17
  49. package/lib/EvalDevToolModuleTemplatePlugin.js +29 -29
  50. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +68 -68
  51. package/lib/EvalSourceMapDevToolPlugin.js +25 -25
  52. package/lib/ExtendedAPIPlugin.js +45 -45
  53. package/lib/ExternalModule.js +89 -89
  54. package/lib/ExternalModuleFactoryPlugin.js +86 -86
  55. package/lib/ExternalsPlugin.js +16 -16
  56. package/lib/FunctionModulePlugin.js +18 -18
  57. package/lib/FunctionModuleTemplatePlugin.js +39 -39
  58. package/lib/HotModuleReplacement.runtime.js +486 -486
  59. package/lib/HotModuleReplacementPlugin.js +223 -223
  60. package/lib/HotUpdateChunkTemplate.js +28 -28
  61. package/lib/IgnorePlugin.js +32 -32
  62. package/lib/JsonpChunkTemplatePlugin.js +26 -26
  63. package/lib/JsonpExportMainTemplatePlugin.js +28 -28
  64. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +26 -26
  65. package/lib/JsonpMainTemplate.runtime.js +56 -56
  66. package/lib/JsonpMainTemplatePlugin.js +162 -162
  67. package/lib/JsonpTemplatePlugin.js +17 -17
  68. package/lib/LibManifestPlugin.js +49 -49
  69. package/lib/LibraryTemplatePlugin.js +77 -77
  70. package/lib/LoaderTargetPlugin.js +16 -16
  71. package/lib/MainTemplate.js +169 -169
  72. package/lib/MemoryOutputFileSystem.js +5 -5
  73. package/lib/Module.js +116 -116
  74. package/lib/ModuleFilenameHelpers.js +157 -157
  75. package/lib/ModuleNotFoundError.js +17 -17
  76. package/lib/ModuleParseError.js +26 -26
  77. package/lib/ModuleParserHelpers.js +21 -21
  78. package/lib/ModuleReason.js +9 -9
  79. package/lib/ModuleTemplate.js +23 -23
  80. package/lib/MovedToPluginWarningPlugin.js +17 -17
  81. package/lib/MultiCompiler.js +166 -166
  82. package/lib/MultiEntryPlugin.js +31 -31
  83. package/lib/MultiModule.js +71 -71
  84. package/lib/MultiModuleFactory.js +18 -18
  85. package/lib/NamedModulesPlugin.js +21 -21
  86. package/lib/NewWatchingPlugin.js +12 -12
  87. package/lib/NoErrorsPlugin.js +18 -18
  88. package/lib/NodeStuffPlugin.js +99 -99
  89. package/lib/NormalModule.js +322 -322
  90. package/lib/NormalModuleFactory.js +171 -171
  91. package/lib/NormalModuleReplacementPlugin.js +40 -40
  92. package/lib/NullFactory.js +10 -10
  93. package/lib/OldWatchingPlugin.js +14 -14
  94. package/lib/OptionsApply.js +10 -10
  95. package/lib/OriginalSource.js +5 -5
  96. package/lib/Parser.js +938 -938
  97. package/lib/PrefetchPlugin.js +25 -25
  98. package/lib/ProgressPlugin.js +80 -80
  99. package/lib/ProvidePlugin.js +48 -48
  100. package/lib/RawModule.js +65 -65
  101. package/lib/RawSource.js +5 -5
  102. package/lib/RecordIdsPlugin.js +130 -130
  103. package/lib/RequestShortener.js +56 -56
  104. package/lib/RequireJsStuffPlugin.js +38 -38
  105. package/lib/ResolverPlugin.js +34 -34
  106. package/lib/SetVarMainTemplatePlugin.js +36 -36
  107. package/lib/SingleEntryPlugin.js +24 -24
  108. package/lib/Source.js +5 -5
  109. package/lib/SourceMapDevToolModuleOptionsPlugin.js +33 -33
  110. package/lib/SourceMapDevToolPlugin.js +168 -168
  111. package/lib/SourceMapSource.js +5 -5
  112. package/lib/Stats.js +732 -732
  113. package/lib/Template.js +119 -119
  114. package/lib/TemplatedPathPlugin.js +111 -111
  115. package/lib/UmdMainTemplatePlugin.js +146 -146
  116. package/lib/UnsupportedFeatureWarning.js +14 -14
  117. package/lib/WarnCaseSensitiveModulesPlugin.js +27 -27
  118. package/lib/WatchIgnorePlugin.js +45 -45
  119. package/lib/WebpackOptionsApply.js +376 -376
  120. package/lib/WebpackOptionsDefaulter.js +112 -112
  121. package/lib/dependencies/AMDDefineDependency.js +63 -63
  122. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +240 -240
  123. package/lib/dependencies/AMDPlugin.js +115 -115
  124. package/lib/dependencies/AMDRequireArrayDependency.js +34 -34
  125. package/lib/dependencies/AMDRequireContextDependency.js +18 -18
  126. package/lib/dependencies/AMDRequireDependenciesBlock.js +25 -25
  127. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +145 -145
  128. package/lib/dependencies/AMDRequireDependency.js +64 -64
  129. package/lib/dependencies/AMDRequireItemDependency.js +17 -17
  130. package/lib/dependencies/CommonJsPlugin.js +93 -93
  131. package/lib/dependencies/CommonJsRequireContextDependency.js +18 -18
  132. package/lib/dependencies/CommonJsRequireDependency.js +17 -17
  133. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +91 -91
  134. package/lib/dependencies/ConstDependency.js +29 -29
  135. package/lib/dependencies/ContextDependency.js +24 -24
  136. package/lib/dependencies/ContextDependencyHelpers.js +34 -34
  137. package/lib/dependencies/ContextDependencyTemplateAsId.js +22 -22
  138. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +31 -31
  139. package/lib/dependencies/ContextElementDependency.js +17 -17
  140. package/lib/dependencies/DelegatedSourceDependency.js +14 -14
  141. package/lib/dependencies/DepBlockHelpers.js +41 -41
  142. package/lib/dependencies/DllEntryDependency.js +17 -17
  143. package/lib/dependencies/LabeledExportsDependency.js +21 -21
  144. package/lib/dependencies/LabeledModuleDependency.js +36 -36
  145. package/lib/dependencies/LabeledModuleDependencyParserPlugin.js +76 -76
  146. package/lib/dependencies/LabeledModulesPlugin.js +26 -26
  147. package/lib/dependencies/LoaderDependency.js +14 -14
  148. package/lib/dependencies/LoaderPlugin.js +61 -61
  149. package/lib/dependencies/LocalModule.js +19 -19
  150. package/lib/dependencies/LocalModuleDependency.js +23 -23
  151. package/lib/dependencies/LocalModulesHelpers.js +43 -43
  152. package/lib/dependencies/ModuleDependency.js +20 -20
  153. package/lib/dependencies/ModuleDependencyTemplateAsId.js +22 -22
  154. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +22 -22
  155. package/lib/dependencies/ModuleHotAcceptDependency.js +18 -18
  156. package/lib/dependencies/ModuleHotDeclineDependency.js +18 -18
  157. package/lib/dependencies/MultiEntryDependency.js +16 -16
  158. package/lib/dependencies/NullDependency.js +17 -17
  159. package/lib/dependencies/NullDependencyTemplate.js +8 -8
  160. package/lib/dependencies/PrefetchDependency.js +14 -14
  161. package/lib/dependencies/RequireContextDependency.js +17 -17
  162. package/lib/dependencies/RequireContextDependencyParserPlugin.js +33 -33
  163. package/lib/dependencies/RequireContextPlugin.js +64 -64
  164. package/lib/dependencies/RequireEnsureDependenciesBlock.js +20 -20
  165. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +66 -66
  166. package/lib/dependencies/RequireEnsureDependency.js +29 -29
  167. package/lib/dependencies/RequireEnsureItemDependency.js +16 -16
  168. package/lib/dependencies/RequireEnsurePlugin.js +38 -38
  169. package/lib/dependencies/RequireHeaderDependency.js +25 -25
  170. package/lib/dependencies/RequireIncludeDependency.js +25 -25
  171. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +18 -18
  172. package/lib/dependencies/RequireIncludePlugin.js +31 -31
  173. package/lib/dependencies/RequireResolveContextDependency.js +18 -18
  174. package/lib/dependencies/RequireResolveDependency.js +17 -17
  175. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +69 -69
  176. package/lib/dependencies/RequireResolveHeaderDependency.js +25 -25
  177. package/lib/dependencies/SingleEntryDependency.js +14 -14
  178. package/lib/dependencies/TemplateArgumentDependency.js +26 -26
  179. package/lib/dependencies/WebpackMissingModule.js +23 -23
  180. package/lib/dependencies/getFunctionExpression.js +43 -43
  181. package/lib/node/NodeChunkTemplatePlugin.js +22 -22
  182. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  183. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +24 -24
  184. package/lib/node/NodeMainTemplate.runtime.js +20 -20
  185. package/lib/node/NodeMainTemplateAsync.runtime.js +34 -34
  186. package/lib/node/NodeMainTemplatePlugin.js +164 -164
  187. package/lib/node/NodeOutputFileSystem.js +17 -17
  188. package/lib/node/NodeSourcePlugin.js +85 -75
  189. package/lib/node/NodeTargetPlugin.js +12 -12
  190. package/lib/node/NodeTemplatePlugin.js +21 -21
  191. package/lib/node/NodeWatchFileSystem.js +65 -65
  192. package/lib/node/OldNodeWatchFileSystem.js +265 -265
  193. package/lib/optimize/AggressiveMergingPlugin.js +115 -115
  194. package/lib/optimize/CommonsChunkPlugin.js +178 -178
  195. package/lib/optimize/DedupePlugin.js +227 -227
  196. package/lib/optimize/FlagIncludedChunksPlugin.js +24 -24
  197. package/lib/optimize/LimitChunkCountPlugin.js +55 -55
  198. package/lib/optimize/MergeDuplicateChunksPlugin.js +30 -30
  199. package/lib/optimize/MinChunkSizePlugin.js +61 -61
  200. package/lib/optimize/OccurenceOrderPlugin.js +5 -5
  201. package/lib/optimize/OccurrenceOrderPlugin.js +91 -91
  202. package/lib/optimize/RemoveEmptyChunksPlugin.js +19 -19
  203. package/lib/optimize/RemoveParentModulesPlugin.js +50 -50
  204. package/lib/optimize/UglifyJsPlugin.js +146 -146
  205. package/lib/removeAndDo.js +13 -13
  206. package/lib/web/WebEnvironmentPlugin.js +16 -16
  207. package/lib/webpack.js +113 -113
  208. package/lib/webpack.web.js +27 -27
  209. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +26 -26
  210. package/lib/webworker/WebWorkerMainTemplatePlugin.js +78 -78
  211. package/lib/webworker/WebWorkerTemplatePlugin.js +15 -15
  212. package/package.json +4 -4
@@ -1,227 +1,227 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- var ConcatSource = require("webpack-core/lib/ConcatSource");
6
- var TemplateArgumentDependency = require("../dependencies/TemplateArgumentDependency");
7
-
8
- function DedupePlugin() {}
9
- module.exports = DedupePlugin;
10
-
11
- DedupePlugin.prototype.apply = function(compiler) {
12
- compiler.plugin("compilation", function(compilation) {
13
-
14
- compilation.dependencyTemplates.set(TemplateArgumentDependency, new TemplateArgumentDependency.Template());
15
-
16
- compilation.plugin("after-optimize-tree", function(chunks, modules) {
17
- var modulesByHash = {};
18
- var allDups = [];
19
- modules.forEach(function(module) {
20
- if(!module.getSourceHash || !module.getAllModuleDependencies || !module.createTemplate || !module.getTemplateArguments || module.blocks.length > 0) return;
21
- var hash = module.getSourceHash();
22
- var dupModule = modulesByHash[hash];
23
- if(dupModule) {
24
- if(dupModule.duplicates) {
25
- dupModule.duplicates.push(module);
26
- module.duplicates = dupModule.duplicates;
27
- } else {
28
- allDups.push(module.duplicates = dupModule.duplicates = [dupModule, module]);
29
- }
30
- } else {
31
- modulesByHash[hash] = module;
32
- }
33
- });
34
- var entryChunks = chunks.filter(function(c) {
35
- return c.entry;
36
- });
37
- entryChunks.forEach(function(chunk) { // for each entry chunk
38
- var hasDeduplicatedModules = false;
39
- (function x(dups, roots, visited, chunk) {
40
- var currentDups = [];
41
- var currentRoots = [];
42
- chunk.modules.forEach(function(module) {
43
- if(module.duplicates) {
44
- if(!module.rootDuplicatesChunks)
45
- module.rootDuplicatesChunks = module.chunks.slice();
46
- var chunkIndex = module.rootDuplicatesChunks.indexOf(chunk);
47
- if(!module.rootDuplicates) module.rootDuplicates = [];
48
- var idx = currentDups.indexOf(module.duplicates);
49
- if(idx >= 0) {
50
- module.rootDuplicates[chunkIndex] = currentRoots[idx];
51
- module.rootDuplicates[chunkIndex].push(module);
52
- module.rootDuplicates[chunkIndex].commonModules =
53
- mergeCommonModules(module.rootDuplicates[chunkIndex].commonModules, module.getAllModuleDependencies());
54
- hasDeduplicatedModules = true;
55
- } else {
56
- idx = dups.indexOf(module.duplicates);
57
- if(idx < 0) {
58
- module.rootDuplicates[chunkIndex] = [module];
59
- module.rootDuplicates[chunkIndex].commonModules = module.getAllModuleDependencies();
60
- module.rootDuplicates[chunkIndex].initialCommonModulesLength = module.rootDuplicates[chunkIndex].commonModules.length;
61
- dups = dups.concat([module.duplicates]);
62
- roots = roots.concat([module.rootDuplicates[chunkIndex]]);
63
- currentDups = currentDups.concat([module.duplicates]);
64
- currentRoots = currentRoots.concat([module.rootDuplicates[chunkIndex]]);
65
- } else {
66
- module.rootDuplicates[chunkIndex] = roots[idx];
67
- module.rootDuplicates[chunkIndex].commonModules =
68
- mergeCommonModules(module.rootDuplicates[chunkIndex].commonModules, module.getAllModuleDependencies());
69
- hasDeduplicatedModules = true;
70
- }
71
- }
72
- }
73
- });
74
- chunk.chunks.forEach(function(chunk) {
75
- if(visited.indexOf(chunk) < 0)
76
- x(dups, roots, visited.concat(chunk), chunk);
77
- });
78
-
79
- currentRoots.forEach(function(roots) {
80
- var commonModules = roots.commonModules;
81
- var initialLength = roots.initialCommonModulesLength;
82
- if(initialLength !== commonModules.length) {
83
- var template = roots[0].createTemplate(commonModules, roots.slice());
84
- roots.template = template;
85
- chunk.addModule(template);
86
- template.addChunk(chunk);
87
- compilation.modules.push(template);
88
- hasDeduplicatedModules = true;
89
- }
90
- });
91
- }([], [], [], chunk));
92
- if(hasDeduplicatedModules)
93
- chunk.__DedupePluginHasDeduplicatedModules = true;
94
- });
95
- });
96
-
97
- function mergeCommonModules(commonModules, newModules) {
98
- return commonModules.filter(function(module) {
99
- return newModules.indexOf(module) >= 0;
100
- });
101
- }
102
-
103
- compilation.moduleTemplate.plugin("package", function(moduleSource, module, chunk) {
104
- if(!module.rootDuplicatesChunks || !chunk) return moduleSource;
105
- var chunkIndex = module.rootDuplicatesChunks.indexOf(chunk);
106
- if(!module.rootDuplicates || !module.rootDuplicates[chunkIndex]) return moduleSource;
107
- var rootDuplicates = module.rootDuplicates[chunkIndex];
108
- if(rootDuplicates.template) {
109
- rootDuplicates.template.addReason(module, {
110
- type: "template",
111
- request: module.request,
112
- templateModules: rootDuplicates.template.templateModules
113
- });
114
- rootDuplicates.template.reasons.sort(function(a, b) {
115
- if(a.request === b.request) return 0;
116
- return a.request < b.request ? -1 : 1;
117
- });
118
- var array = [JSON.stringify(rootDuplicates.template.id)].concat(module.getTemplateArguments(rootDuplicates.template.templateModules).map(function(module) {
119
- if(module.id === null || module.id === undefined)
120
- return "(function webpackMissingModule() { throw new Error(" + JSON.stringify("Cannot find module") + "); }())";
121
- return JSON.stringify(module.id);
122
- }));
123
- var source = new ConcatSource("[" + array.join(", ") + "]");
124
- return source;
125
- } else {
126
- rootDuplicates.sort(function(a, b) {
127
- return a.id - b.id;
128
- });
129
- if(module === rootDuplicates[0]) return moduleSource;
130
- var source = new ConcatSource("" + JSON.stringify(rootDuplicates[0].id));
131
- return source;
132
- }
133
- });
134
- compilation.plugin("chunk-hash", function(chunk, hash) {
135
- if(chunk.__DedupePluginHasDeduplicatedModules)
136
- hash.update("DedupePlugin (deduplication code)");
137
- });
138
- compilation.mainTemplate.plugin("add-module", function(source, chunk, hash, varModuleId, varModule) {
139
- // we don't need to test all nested chunks, because `__DedupePluginHasDeduplicatedModules`
140
- // is not set on entry chunks
141
- if(!chunk.__DedupePluginHasDeduplicatedModules) {
142
- return source;
143
- }
144
- return this.asString([
145
- "var _m = " + varModule + ";",
146
- "",
147
- "// Check if module is deduplicated",
148
- "switch(typeof _m) {",
149
- "case \"object\":",
150
- this.indent([
151
- "// Module can be created from a template",
152
- "modules[" + varModuleId + "] = (function(_m) {",
153
- this.indent([
154
- "var args = _m.slice(1), templateId = _m[0];",
155
- "return function (a,b,c) {",
156
- this.indent([
157
- "modules[templateId].apply(this, [a,b,c].concat(args));"
158
- ]),
159
- "};"
160
- ]),
161
- "}(_m));",
162
- "break;"
163
- ]),
164
- "case \"function\":",
165
- this.indent([
166
- "// Normal module",
167
- "modules[" + varModuleId + "] = _m;",
168
- "break;"
169
- ]),
170
- "default:",
171
- this.indent([
172
- "// Module is a copy of another module",
173
- "modules[" + varModuleId + "] = modules[_m];",
174
- "break;"
175
- ]),
176
- "}"
177
- ]);
178
- });
179
- compilation.mainTemplate.plugin("modules", function(orginalSource, chunk) {
180
- if(!chunk.__DedupePluginHasDeduplicatedModules) {
181
- return orginalSource;
182
- }
183
- var source = new ConcatSource();
184
- source.add("(function(modules) {\n");
185
- source.add(this.indent([
186
- "// Check all modules for deduplicated modules",
187
- "for(var i in modules) {",
188
- this.indent([
189
- "if(Object.prototype.hasOwnProperty.call(modules, i)) {",
190
- this.indent([
191
- "switch(typeof modules[i]) {",
192
- "case \"function\": break;",
193
- "case \"object\":",
194
- this.indent([
195
- "// Module can be created from a template",
196
- "modules[i] = (function(_m) {",
197
- this.indent([
198
- "var args = _m.slice(1), fn = modules[_m[0]];",
199
- "return function (a,b,c) {",
200
- this.indent([
201
- "fn.apply(this, [a,b,c].concat(args));"
202
- ]),
203
- "};"
204
- ]),
205
- "}(modules[i]));",
206
- "break;"
207
- ]),
208
- "default:",
209
- this.indent([
210
- "// Module is a copy of another module",
211
- "modules[i] = modules[modules[i]];",
212
- "break;"
213
- ]),
214
- "}"
215
- ]),
216
- "}"
217
- ]),
218
- "}",
219
- "return modules;"
220
- ]));
221
- source.add("\n}(");
222
- source.add(orginalSource);
223
- source.add("))");
224
- return source;
225
- });
226
- });
227
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ var ConcatSource = require("webpack-core/lib/ConcatSource");
6
+ var TemplateArgumentDependency = require("../dependencies/TemplateArgumentDependency");
7
+
8
+ function DedupePlugin() {}
9
+ module.exports = DedupePlugin;
10
+
11
+ DedupePlugin.prototype.apply = function(compiler) {
12
+ compiler.plugin("compilation", function(compilation) {
13
+
14
+ compilation.dependencyTemplates.set(TemplateArgumentDependency, new TemplateArgumentDependency.Template());
15
+
16
+ compilation.plugin("after-optimize-tree", function(chunks, modules) {
17
+ var modulesByHash = {};
18
+ var allDups = [];
19
+ modules.forEach(function(module) {
20
+ if(!module.getSourceHash || !module.getAllModuleDependencies || !module.createTemplate || !module.getTemplateArguments || module.blocks.length > 0) return;
21
+ var hash = module.getSourceHash();
22
+ var dupModule = modulesByHash[hash];
23
+ if(dupModule) {
24
+ if(dupModule.duplicates) {
25
+ dupModule.duplicates.push(module);
26
+ module.duplicates = dupModule.duplicates;
27
+ } else {
28
+ allDups.push(module.duplicates = dupModule.duplicates = [dupModule, module]);
29
+ }
30
+ } else {
31
+ modulesByHash[hash] = module;
32
+ }
33
+ });
34
+ var entryChunks = chunks.filter(function(c) {
35
+ return c.entry;
36
+ });
37
+ entryChunks.forEach(function(chunk) { // for each entry chunk
38
+ var hasDeduplicatedModules = false;
39
+ (function x(dups, roots, visited, chunk) {
40
+ var currentDups = [];
41
+ var currentRoots = [];
42
+ chunk.modules.forEach(function(module) {
43
+ if(module.duplicates) {
44
+ if(!module.rootDuplicatesChunks)
45
+ module.rootDuplicatesChunks = module.chunks.slice();
46
+ var chunkIndex = module.rootDuplicatesChunks.indexOf(chunk);
47
+ if(!module.rootDuplicates) module.rootDuplicates = [];
48
+ var idx = currentDups.indexOf(module.duplicates);
49
+ if(idx >= 0) {
50
+ module.rootDuplicates[chunkIndex] = currentRoots[idx];
51
+ module.rootDuplicates[chunkIndex].push(module);
52
+ module.rootDuplicates[chunkIndex].commonModules =
53
+ mergeCommonModules(module.rootDuplicates[chunkIndex].commonModules, module.getAllModuleDependencies());
54
+ hasDeduplicatedModules = true;
55
+ } else {
56
+ idx = dups.indexOf(module.duplicates);
57
+ if(idx < 0) {
58
+ module.rootDuplicates[chunkIndex] = [module];
59
+ module.rootDuplicates[chunkIndex].commonModules = module.getAllModuleDependencies();
60
+ module.rootDuplicates[chunkIndex].initialCommonModulesLength = module.rootDuplicates[chunkIndex].commonModules.length;
61
+ dups = dups.concat([module.duplicates]);
62
+ roots = roots.concat([module.rootDuplicates[chunkIndex]]);
63
+ currentDups = currentDups.concat([module.duplicates]);
64
+ currentRoots = currentRoots.concat([module.rootDuplicates[chunkIndex]]);
65
+ } else {
66
+ module.rootDuplicates[chunkIndex] = roots[idx];
67
+ module.rootDuplicates[chunkIndex].commonModules =
68
+ mergeCommonModules(module.rootDuplicates[chunkIndex].commonModules, module.getAllModuleDependencies());
69
+ hasDeduplicatedModules = true;
70
+ }
71
+ }
72
+ }
73
+ });
74
+ chunk.chunks.forEach(function(chunk) {
75
+ if(visited.indexOf(chunk) < 0)
76
+ x(dups, roots, visited.concat(chunk), chunk);
77
+ });
78
+
79
+ currentRoots.forEach(function(roots) {
80
+ var commonModules = roots.commonModules;
81
+ var initialLength = roots.initialCommonModulesLength;
82
+ if(initialLength !== commonModules.length) {
83
+ var template = roots[0].createTemplate(commonModules, roots.slice());
84
+ roots.template = template;
85
+ chunk.addModule(template);
86
+ template.addChunk(chunk);
87
+ compilation.modules.push(template);
88
+ hasDeduplicatedModules = true;
89
+ }
90
+ });
91
+ }([], [], [], chunk));
92
+ if(hasDeduplicatedModules)
93
+ chunk.__DedupePluginHasDeduplicatedModules = true;
94
+ });
95
+ });
96
+
97
+ function mergeCommonModules(commonModules, newModules) {
98
+ return commonModules.filter(function(module) {
99
+ return newModules.indexOf(module) >= 0;
100
+ });
101
+ }
102
+
103
+ compilation.moduleTemplate.plugin("package", function(moduleSource, module, chunk) {
104
+ if(!module.rootDuplicatesChunks || !chunk) return moduleSource;
105
+ var chunkIndex = module.rootDuplicatesChunks.indexOf(chunk);
106
+ if(!module.rootDuplicates || !module.rootDuplicates[chunkIndex]) return moduleSource;
107
+ var rootDuplicates = module.rootDuplicates[chunkIndex];
108
+ if(rootDuplicates.template) {
109
+ rootDuplicates.template.addReason(module, {
110
+ type: "template",
111
+ request: module.request,
112
+ templateModules: rootDuplicates.template.templateModules
113
+ });
114
+ rootDuplicates.template.reasons.sort(function(a, b) {
115
+ if(a.request === b.request) return 0;
116
+ return a.request < b.request ? -1 : 1;
117
+ });
118
+ var array = [JSON.stringify(rootDuplicates.template.id)].concat(module.getTemplateArguments(rootDuplicates.template.templateModules).map(function(module) {
119
+ if(module.id === null || module.id === undefined)
120
+ return "(function webpackMissingModule() { throw new Error(" + JSON.stringify("Cannot find module") + "); }())";
121
+ return JSON.stringify(module.id);
122
+ }));
123
+ var source = new ConcatSource("[" + array.join(", ") + "]");
124
+ return source;
125
+ } else {
126
+ rootDuplicates.sort(function(a, b) {
127
+ return a.id - b.id;
128
+ });
129
+ if(module === rootDuplicates[0]) return moduleSource;
130
+ var source = new ConcatSource("" + JSON.stringify(rootDuplicates[0].id));
131
+ return source;
132
+ }
133
+ });
134
+ compilation.plugin("chunk-hash", function(chunk, hash) {
135
+ if(chunk.__DedupePluginHasDeduplicatedModules)
136
+ hash.update("DedupePlugin (deduplication code)");
137
+ });
138
+ compilation.mainTemplate.plugin("add-module", function(source, chunk, hash, varModuleId, varModule) {
139
+ // we don't need to test all nested chunks, because `__DedupePluginHasDeduplicatedModules`
140
+ // is not set on entry chunks
141
+ if(!chunk.__DedupePluginHasDeduplicatedModules) {
142
+ return source;
143
+ }
144
+ return this.asString([
145
+ "var _m = " + varModule + ";",
146
+ "",
147
+ "// Check if module is deduplicated",
148
+ "switch(typeof _m) {",
149
+ "case \"object\":",
150
+ this.indent([
151
+ "// Module can be created from a template",
152
+ "modules[" + varModuleId + "] = (function(_m) {",
153
+ this.indent([
154
+ "var args = _m.slice(1), templateId = _m[0];",
155
+ "return function (a,b,c) {",
156
+ this.indent([
157
+ "modules[templateId].apply(this, [a,b,c].concat(args));"
158
+ ]),
159
+ "};"
160
+ ]),
161
+ "}(_m));",
162
+ "break;"
163
+ ]),
164
+ "case \"function\":",
165
+ this.indent([
166
+ "// Normal module",
167
+ "modules[" + varModuleId + "] = _m;",
168
+ "break;"
169
+ ]),
170
+ "default:",
171
+ this.indent([
172
+ "// Module is a copy of another module",
173
+ "modules[" + varModuleId + "] = modules[_m];",
174
+ "break;"
175
+ ]),
176
+ "}"
177
+ ]);
178
+ });
179
+ compilation.mainTemplate.plugin("modules", function(orginalSource, chunk) {
180
+ if(!chunk.__DedupePluginHasDeduplicatedModules) {
181
+ return orginalSource;
182
+ }
183
+ var source = new ConcatSource();
184
+ source.add("(function(modules) {\n");
185
+ source.add(this.indent([
186
+ "// Check all modules for deduplicated modules",
187
+ "for(var i in modules) {",
188
+ this.indent([
189
+ "if(Object.prototype.hasOwnProperty.call(modules, i)) {",
190
+ this.indent([
191
+ "switch(typeof modules[i]) {",
192
+ "case \"function\": break;",
193
+ "case \"object\":",
194
+ this.indent([
195
+ "// Module can be created from a template",
196
+ "modules[i] = (function(_m) {",
197
+ this.indent([
198
+ "var args = _m.slice(1), fn = modules[_m[0]];",
199
+ "return function (a,b,c) {",
200
+ this.indent([
201
+ "fn.apply(this, [a,b,c].concat(args));"
202
+ ]),
203
+ "};"
204
+ ]),
205
+ "}(modules[i]));",
206
+ "break;"
207
+ ]),
208
+ "default:",
209
+ this.indent([
210
+ "// Module is a copy of another module",
211
+ "modules[i] = modules[modules[i]];",
212
+ "break;"
213
+ ]),
214
+ "}"
215
+ ]),
216
+ "}"
217
+ ]),
218
+ "}",
219
+ "return modules;"
220
+ ]));
221
+ source.add("\n}(");
222
+ source.add(orginalSource);
223
+ source.add("))");
224
+ return source;
225
+ });
226
+ });
227
+ };
@@ -1,24 +1,24 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- function FlagIncludedChunksPlugin() {}
6
- module.exports = FlagIncludedChunksPlugin;
7
-
8
- FlagIncludedChunksPlugin.prototype.apply = function(compiler) {
9
- compiler.plugin("compilation", function(compilation) {
10
- compilation.plugin("optimize-chunk-ids", function(chunks) {
11
- chunks.forEach(function(chunkA) {
12
- chunks.forEach(function(chunkB) {
13
- if(chunkA === chunkB) return;
14
- // is chunkB in chunkA?
15
- if(chunkA.modules.length < chunkB.modules.length) return;
16
- for(var i = 0; i < chunkB.modules.length; i++) {
17
- if(chunkA.modules.indexOf(chunkB.modules[i]) < 0) return;
18
- }
19
- chunkA.ids.push(chunkB.id);
20
- });
21
- });
22
- });
23
- });
24
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ function FlagIncludedChunksPlugin() {}
6
+ module.exports = FlagIncludedChunksPlugin;
7
+
8
+ FlagIncludedChunksPlugin.prototype.apply = function(compiler) {
9
+ compiler.plugin("compilation", function(compilation) {
10
+ compilation.plugin("optimize-chunk-ids", function(chunks) {
11
+ chunks.forEach(function(chunkA) {
12
+ chunks.forEach(function(chunkB) {
13
+ if(chunkA === chunkB) return;
14
+ // is chunkB in chunkA?
15
+ if(chunkA.modules.length < chunkB.modules.length) return;
16
+ for(var i = 0; i < chunkB.modules.length; i++) {
17
+ if(chunkA.modules.indexOf(chunkB.modules[i]) < 0) return;
18
+ }
19
+ chunkA.ids.push(chunkB.id);
20
+ });
21
+ });
22
+ });
23
+ });
24
+ };
@@ -1,55 +1,55 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- function LimitChunkCountPlugin(options) {
6
- if(options !== undefined && typeof options !== "object" || Array.isArray(options)) {
7
- throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.github.io/docs/list-of-plugins.html");
8
- }
9
- this.options = options || {};
10
- }
11
- module.exports = LimitChunkCountPlugin;
12
-
13
- LimitChunkCountPlugin.prototype.apply = function(compiler) {
14
- var options = this.options;
15
- compiler.plugin("compilation", function(compilation) {
16
- compilation.plugin("optimize-chunks", function(chunks) {
17
- var maxChunks = options.maxChunks;
18
- if(!maxChunks) return;
19
- if(maxChunks < 1) return;
20
- if(chunks.length <= maxChunks) return;
21
-
22
- if(chunks.length > maxChunks) {
23
- var combinations = [];
24
- chunks.forEach(function(a, idx) {
25
- for(var i = 0; i < idx; i++) {
26
- var b = chunks[i];
27
- combinations.push([b, a]);
28
- }
29
- });
30
-
31
- combinations.forEach(function(pair) {
32
- var a = pair[0].size(options);
33
- var b = pair[1].size(options);
34
- var ab = pair[0].integratedSize(pair[1], options);
35
- pair.unshift(a + b - ab, ab);
36
- });
37
- combinations = combinations.filter(function(pair) {
38
- return pair[1] !== false;
39
- });
40
- combinations.sort(function(a, b) {
41
- var diff = b[0] - a[0];
42
- if(diff !== 0) return diff;
43
- return a[1] - b[1];
44
- });
45
-
46
- var pair = combinations[0];
47
-
48
- if(pair && pair[2].integrate(pair[3], "limit")) {
49
- chunks.splice(chunks.indexOf(pair[3]), 1);
50
- this.restartApplyPlugins();
51
- }
52
- }
53
- });
54
- });
55
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ function LimitChunkCountPlugin(options) {
6
+ if(options !== undefined && typeof options !== "object" || Array.isArray(options)) {
7
+ throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.github.io/docs/list-of-plugins.html");
8
+ }
9
+ this.options = options || {};
10
+ }
11
+ module.exports = LimitChunkCountPlugin;
12
+
13
+ LimitChunkCountPlugin.prototype.apply = function(compiler) {
14
+ var options = this.options;
15
+ compiler.plugin("compilation", function(compilation) {
16
+ compilation.plugin("optimize-chunks", function(chunks) {
17
+ var maxChunks = options.maxChunks;
18
+ if(!maxChunks) return;
19
+ if(maxChunks < 1) return;
20
+ if(chunks.length <= maxChunks) return;
21
+
22
+ if(chunks.length > maxChunks) {
23
+ var combinations = [];
24
+ chunks.forEach(function(a, idx) {
25
+ for(var i = 0; i < idx; i++) {
26
+ var b = chunks[i];
27
+ combinations.push([b, a]);
28
+ }
29
+ });
30
+
31
+ combinations.forEach(function(pair) {
32
+ var a = pair[0].size(options);
33
+ var b = pair[1].size(options);
34
+ var ab = pair[0].integratedSize(pair[1], options);
35
+ pair.unshift(a + b - ab, ab);
36
+ });
37
+ combinations = combinations.filter(function(pair) {
38
+ return pair[1] !== false;
39
+ });
40
+ combinations.sort(function(a, b) {
41
+ var diff = b[0] - a[0];
42
+ if(diff !== 0) return diff;
43
+ return a[1] - b[1];
44
+ });
45
+
46
+ var pair = combinations[0];
47
+
48
+ if(pair && pair[2].integrate(pair[3], "limit")) {
49
+ chunks.splice(chunks.indexOf(pair[3]), 1);
50
+ this.restartApplyPlugins();
51
+ }
52
+ }
53
+ });
54
+ });
55
+ };