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
package/lib/Compiler.js CHANGED
@@ -1,523 +1,523 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const path = require("path");
8
- const Tapable = require("tapable");
9
-
10
- const Compilation = require("./Compilation");
11
- const Stats = require("./Stats");
12
- const NormalModuleFactory = require("./NormalModuleFactory");
13
- const ContextModuleFactory = require("./ContextModuleFactory");
14
-
15
- const makePathsRelative = require("./util/identifier").makePathsRelative;
16
-
17
- class Watching {
18
- constructor(compiler, watchOptions, handler) {
19
- this.startTime = null;
20
- this.invalid = false;
21
- this.handler = handler;
22
- this.callbacks = [];
23
- this.closed = false;
24
- if(typeof watchOptions === "number") {
25
- this.watchOptions = {
26
- aggregateTimeout: watchOptions
27
- };
28
- } else if(watchOptions && typeof watchOptions === "object") {
29
- this.watchOptions = Object.assign({}, watchOptions);
30
- } else {
31
- this.watchOptions = {};
32
- }
33
- this.watchOptions.aggregateTimeout = this.watchOptions.aggregateTimeout || 200;
34
- this.compiler = compiler;
35
- this.running = true;
36
- this.compiler.readRecords(err => {
37
- if(err) return this._done(err);
38
-
39
- this._go();
40
- });
41
- }
42
-
43
- _go() {
44
- this.startTime = Date.now();
45
- this.running = true;
46
- this.invalid = false;
47
- this.compiler.applyPluginsAsync("watch-run", this, err => {
48
- if(err) return this._done(err);
49
- const onCompiled = (err, compilation) => {
50
- if(err) return this._done(err);
51
- if(this.invalid) return this._done();
52
-
53
- if(this.compiler.applyPluginsBailResult("should-emit", compilation) === false) {
54
- return this._done(null, compilation);
55
- }
56
-
57
- this.compiler.emitAssets(compilation, err => {
58
- if(err) return this._done(err);
59
- if(this.invalid) return this._done();
60
-
61
- this.compiler.emitRecords(err => {
62
- if(err) return this._done(err);
63
-
64
- if(compilation.applyPluginsBailResult("need-additional-pass")) {
65
- compilation.needAdditionalPass = true;
66
-
67
- const stats = new Stats(compilation);
68
- stats.startTime = this.startTime;
69
- stats.endTime = Date.now();
70
- this.compiler.applyPlugins("done", stats);
71
-
72
- this.compiler.applyPluginsAsync("additional-pass", err => {
73
- if(err) return this._done(err);
74
- this.compiler.compile(onCompiled);
75
- });
76
- return;
77
- }
78
- return this._done(null, compilation);
79
- });
80
- });
81
- };
82
- this.compiler.compile(onCompiled);
83
- });
84
- }
85
-
86
- _getStats(compilation) {
87
- const stats = new Stats(compilation);
88
- stats.startTime = this.startTime;
89
- stats.endTime = Date.now();
90
- return stats;
91
- }
92
-
93
- _done(err, compilation) {
94
- this.running = false;
95
- if(this.invalid) return this._go();
96
-
97
- const stats = compilation ? this._getStats(compilation) : null;
98
- if(err) {
99
- this.compiler.applyPlugins("failed", err);
100
- this.handler(err, stats);
101
- return;
102
- }
103
-
104
- this.compiler.applyPlugins("done", stats);
105
- this.handler(null, stats);
106
- if(!this.closed) {
107
- this.watch(compilation.fileDependencies, compilation.contextDependencies, compilation.missingDependencies);
108
- }
109
- this.callbacks.forEach(cb => cb());
110
- this.callbacks.length = 0;
111
- }
112
-
113
- watch(files, dirs, missing) {
114
- this.pausedWatcher = null;
115
- this.watcher = this.compiler.watchFileSystem.watch(files, dirs, missing, this.startTime, this.watchOptions, (err, filesModified, contextModified, missingModified, fileTimestamps, contextTimestamps) => {
116
- this.pausedWatcher = this.watcher;
117
- this.watcher = null;
118
- if(err) return this.handler(err);
119
-
120
- this.compiler.fileTimestamps = fileTimestamps;
121
- this.compiler.contextTimestamps = contextTimestamps;
122
- this.invalidate();
123
- }, (fileName, changeTime) => {
124
- this.compiler.applyPlugins("invalid", fileName, changeTime);
125
- });
126
- }
127
-
128
- invalidate(callback) {
129
- if(callback) {
130
- this.callbacks.push(callback);
131
- }
132
- if(this.watcher) {
133
- this.pausedWatcher = this.watcher;
134
- this.watcher.pause();
135
- this.watcher = null;
136
- }
137
- if(this.running) {
138
- this.invalid = true;
139
- return false;
140
- } else {
141
- this._go();
142
- }
143
- }
144
-
145
- close(callback) {
146
- if(callback === undefined) callback = function() {};
147
-
148
- this.closed = true;
149
- if(this.watcher) {
150
- this.watcher.close();
151
- this.watcher = null;
152
- }
153
- if(this.pausedWatcher) {
154
- this.pausedWatcher.close();
155
- this.pausedWatcher = null;
156
- }
157
- if(this.running) {
158
- this.invalid = true;
159
- this._done = () => {
160
- this.compiler.applyPlugins("watch-close");
161
- callback();
162
- };
163
- } else {
164
- this.compiler.applyPlugins("watch-close");
165
- callback();
166
- }
167
- }
168
- }
169
-
170
- class Compiler extends Tapable {
171
- constructor() {
172
- super();
173
- this.outputPath = "";
174
- this.outputFileSystem = null;
175
- this.inputFileSystem = null;
176
-
177
- this.recordsInputPath = null;
178
- this.recordsOutputPath = null;
179
- this.records = {};
180
-
181
- this.fileTimestamps = {};
182
- this.contextTimestamps = {};
183
-
184
- this.resolvers = {
185
- normal: null,
186
- loader: null,
187
- context: null
188
- };
189
- let deprecationReported = false;
190
- this.parser = {
191
- plugin: (hook, fn) => {
192
- if(!deprecationReported) {
193
- console.warn("webpack: Using compiler.parser is deprecated.\n" +
194
- "Use compiler.plugin(\"compilation\", function(compilation, data) {\n data.normalModuleFactory.plugin(\"parser\", function(parser, options) { parser.plugin(/* ... */); });\n}); instead. " +
195
- "It was called " + new Error().stack.split("\n")[2].trim() + ".");
196
- deprecationReported = true;
197
- }
198
- this.plugin("compilation", (compilation, data) => {
199
- data.normalModuleFactory.plugin("parser", parser => {
200
- parser.plugin(hook, fn);
201
- });
202
- });
203
- },
204
- apply: () => {
205
- const args = arguments;
206
- if(!deprecationReported) {
207
- console.warn("webpack: Using compiler.parser is deprecated.\n" +
208
- "Use compiler.plugin(\"compilation\", function(compilation, data) {\n data.normalModuleFactory.plugin(\"parser\", function(parser, options) { parser.apply(/* ... */); });\n}); instead. " +
209
- "It was called " + new Error().stack.split("\n")[2].trim() + ".");
210
- deprecationReported = true;
211
- }
212
- this.plugin("compilation", (compilation, data) => {
213
- data.normalModuleFactory.plugin("parser", parser => {
214
- parser.apply.apply(parser, args);
215
- });
216
- });
217
- }
218
- };
219
-
220
- this.options = {};
221
- }
222
-
223
- watch(watchOptions, handler) {
224
- this.fileTimestamps = {};
225
- this.contextTimestamps = {};
226
- const watching = new Watching(this, watchOptions, handler);
227
- return watching;
228
- }
229
-
230
- run(callback) {
231
- const startTime = Date.now();
232
-
233
- const onCompiled = (err, compilation) => {
234
- if(err) return callback(err);
235
-
236
- if(this.applyPluginsBailResult("should-emit", compilation) === false) {
237
- const stats = new Stats(compilation);
238
- stats.startTime = startTime;
239
- stats.endTime = Date.now();
240
- this.applyPlugins("done", stats);
241
- return callback(null, stats);
242
- }
243
-
244
- this.emitAssets(compilation, err => {
245
- if(err) return callback(err);
246
-
247
- if(compilation.applyPluginsBailResult("need-additional-pass")) {
248
- compilation.needAdditionalPass = true;
249
-
250
- const stats = new Stats(compilation);
251
- stats.startTime = startTime;
252
- stats.endTime = Date.now();
253
- this.applyPlugins("done", stats);
254
-
255
- this.applyPluginsAsync("additional-pass", err => {
256
- if(err) return callback(err);
257
- this.compile(onCompiled);
258
- });
259
- return;
260
- }
261
-
262
- this.emitRecords(err => {
263
- if(err) return callback(err);
264
-
265
- const stats = new Stats(compilation);
266
- stats.startTime = startTime;
267
- stats.endTime = Date.now();
268
- this.applyPlugins("done", stats);
269
- return callback(null, stats);
270
- });
271
- });
272
- };
273
-
274
- this.applyPluginsAsync("before-run", this, err => {
275
- if(err) return callback(err);
276
-
277
- this.applyPluginsAsync("run", this, err => {
278
- if(err) return callback(err);
279
-
280
- this.readRecords(err => {
281
- if(err) return callback(err);
282
-
283
- this.compile(onCompiled);
284
- });
285
- });
286
- });
287
- }
288
-
289
- runAsChild(callback) {
290
- this.compile((err, compilation) => {
291
- if(err) return callback(err);
292
-
293
- this.parentCompilation.children.push(compilation);
294
- Object.keys(compilation.assets).forEach(name => {
295
- this.parentCompilation.assets[name] = compilation.assets[name];
296
- });
297
-
298
- const entries = Object.keys(compilation.entrypoints).map(name => {
299
- return compilation.entrypoints[name].chunks;
300
- }).reduce((array, chunks) => {
301
- return array.concat(chunks);
302
- }, []);
303
-
304
- return callback(null, entries, compilation);
305
- });
306
- }
307
-
308
- purgeInputFileSystem() {
309
- if(this.inputFileSystem && this.inputFileSystem.purge)
310
- this.inputFileSystem.purge();
311
- }
312
-
313
- emitAssets(compilation, callback) {
314
- let outputPath;
315
-
316
- const emitFiles = (err) => {
317
- if(err) return callback(err);
318
-
319
- require("async").forEach(Object.keys(compilation.assets), (file, callback) => {
320
-
321
- let targetFile = file;
322
- const queryStringIdx = targetFile.indexOf("?");
323
- if(queryStringIdx >= 0) {
324
- targetFile = targetFile.substr(0, queryStringIdx);
325
- }
326
-
327
- const writeOut = (err) => {
328
- if(err) return callback(err);
329
- const targetPath = this.outputFileSystem.join(outputPath, targetFile);
330
- const source = compilation.assets[file];
331
- if(source.existsAt === targetPath) {
332
- source.emitted = false;
333
- return callback();
334
- }
335
- let content = source.source();
336
-
337
- if(!Buffer.isBuffer(content)) {
338
- content = new Buffer(content, "utf8"); // eslint-disable-line
339
- }
340
-
341
- source.existsAt = targetPath;
342
- source.emitted = true;
343
- this.outputFileSystem.writeFile(targetPath, content, callback);
344
- };
345
-
346
- if(targetFile.match(/\/|\\/)) {
347
- const dir = path.dirname(targetFile);
348
- this.outputFileSystem.mkdirp(this.outputFileSystem.join(outputPath, dir), writeOut);
349
- } else writeOut();
350
-
351
- }, err => {
352
- if(err) return callback(err);
353
-
354
- afterEmit.call(this);
355
- });
356
- };
357
-
358
- this.applyPluginsAsync("emit", compilation, err => {
359
- if(err) return callback(err);
360
- outputPath = compilation.getPath(this.outputPath);
361
- this.outputFileSystem.mkdirp(outputPath, emitFiles);
362
- });
363
-
364
- function afterEmit() {
365
- this.applyPluginsAsyncSeries1("after-emit", compilation, err => {
366
- if(err) return callback(err);
367
-
368
- return callback();
369
- });
370
- }
371
-
372
- }
373
-
374
- emitRecords(callback) {
375
- if(!this.recordsOutputPath) return callback();
376
- const idx1 = this.recordsOutputPath.lastIndexOf("/");
377
- const idx2 = this.recordsOutputPath.lastIndexOf("\\");
378
- let recordsOutputPathDirectory = null;
379
- if(idx1 > idx2) recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx1);
380
- if(idx1 < idx2) recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx2);
381
- if(!recordsOutputPathDirectory) return writeFile.call(this);
382
- this.outputFileSystem.mkdirp(recordsOutputPathDirectory, err => {
383
- if(err) return callback(err);
384
- writeFile.call(this);
385
- });
386
-
387
- function writeFile() {
388
- this.outputFileSystem.writeFile(this.recordsOutputPath, JSON.stringify(this.records, undefined, 2), callback);
389
- }
390
- }
391
-
392
- readRecords(callback) {
393
- if(!this.recordsInputPath) {
394
- this.records = {};
395
- return callback();
396
- }
397
- this.inputFileSystem.stat(this.recordsInputPath, err => {
398
- // It doesn't exist
399
- // We can ignore this.
400
- if(err) return callback();
401
-
402
- this.inputFileSystem.readFile(this.recordsInputPath, (err, content) => {
403
- if(err) return callback(err);
404
-
405
- try {
406
- this.records = JSON.parse(content.toString("utf-8"));
407
- } catch(e) {
408
- e.message = "Cannot parse records: " + e.message;
409
- return callback(e);
410
- }
411
-
412
- return callback();
413
- });
414
- });
415
- }
416
-
417
- createChildCompiler(compilation, compilerName, compilerIndex, outputOptions, plugins) {
418
- const childCompiler = new Compiler();
419
- if(Array.isArray(plugins)) {
420
- plugins.forEach(plugin => childCompiler.apply(plugin));
421
- }
422
- for(const name in this._plugins) {
423
- if(["make", "compile", "emit", "after-emit", "invalid", "done", "this-compilation"].indexOf(name) < 0)
424
- childCompiler._plugins[name] = this._plugins[name].slice();
425
- }
426
- childCompiler.name = compilerName;
427
- childCompiler.outputPath = this.outputPath;
428
- childCompiler.inputFileSystem = this.inputFileSystem;
429
- childCompiler.outputFileSystem = null;
430
- childCompiler.resolvers = this.resolvers;
431
- childCompiler.fileTimestamps = this.fileTimestamps;
432
- childCompiler.contextTimestamps = this.contextTimestamps;
433
-
434
- const relativeCompilerName = makePathsRelative(this.context, compilerName);
435
- if(!this.records[relativeCompilerName]) this.records[relativeCompilerName] = [];
436
- if(this.records[relativeCompilerName][compilerIndex])
437
- childCompiler.records = this.records[relativeCompilerName][compilerIndex];
438
- else
439
- this.records[relativeCompilerName].push(childCompiler.records = {});
440
-
441
- childCompiler.options = Object.create(this.options);
442
- childCompiler.options.output = Object.create(childCompiler.options.output);
443
- for(const name in outputOptions) {
444
- childCompiler.options.output[name] = outputOptions[name];
445
- }
446
- childCompiler.parentCompilation = compilation;
447
-
448
- compilation.applyPlugins("child-compiler", childCompiler, compilerName, compilerIndex);
449
-
450
- return childCompiler;
451
- }
452
-
453
- isChild() {
454
- return !!this.parentCompilation;
455
- }
456
-
457
- createCompilation() {
458
- return new Compilation(this);
459
- }
460
-
461
- newCompilation(params) {
462
- const compilation = this.createCompilation();
463
- compilation.fileTimestamps = this.fileTimestamps;
464
- compilation.contextTimestamps = this.contextTimestamps;
465
- compilation.name = this.name;
466
- compilation.records = this.records;
467
- compilation.compilationDependencies = params.compilationDependencies;
468
- this.applyPlugins("this-compilation", compilation, params);
469
- this.applyPlugins("compilation", compilation, params);
470
- return compilation;
471
- }
472
-
473
- createNormalModuleFactory() {
474
- const normalModuleFactory = new NormalModuleFactory(this.options.context, this.resolvers, this.options.module || {});
475
- this.applyPlugins("normal-module-factory", normalModuleFactory);
476
- return normalModuleFactory;
477
- }
478
-
479
- createContextModuleFactory() {
480
- const contextModuleFactory = new ContextModuleFactory(this.resolvers, this.inputFileSystem);
481
- this.applyPlugins("context-module-factory", contextModuleFactory);
482
- return contextModuleFactory;
483
- }
484
-
485
- newCompilationParams() {
486
- const params = {
487
- normalModuleFactory: this.createNormalModuleFactory(),
488
- contextModuleFactory: this.createContextModuleFactory(),
489
- compilationDependencies: []
490
- };
491
- return params;
492
- }
493
-
494
- compile(callback) {
495
- const params = this.newCompilationParams();
496
- this.applyPluginsAsync("before-compile", params, err => {
497
- if(err) return callback(err);
498
-
499
- this.applyPlugins("compile", params);
500
-
501
- const compilation = this.newCompilation(params);
502
-
503
- this.applyPluginsParallel("make", compilation, err => {
504
- if(err) return callback(err);
505
-
506
- compilation.finish();
507
-
508
- compilation.seal(err => {
509
- if(err) return callback(err);
510
-
511
- this.applyPluginsAsync("after-compile", compilation, err => {
512
- if(err) return callback(err);
513
-
514
- return callback(null, compilation);
515
- });
516
- });
517
- });
518
- });
519
- }
520
- }
521
-
522
- Compiler.Watching = Watching;
523
- module.exports = Compiler;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const path = require("path");
8
+ const Tapable = require("tapable");
9
+
10
+ const Compilation = require("./Compilation");
11
+ const Stats = require("./Stats");
12
+ const NormalModuleFactory = require("./NormalModuleFactory");
13
+ const ContextModuleFactory = require("./ContextModuleFactory");
14
+
15
+ const makePathsRelative = require("./util/identifier").makePathsRelative;
16
+
17
+ class Watching {
18
+ constructor(compiler, watchOptions, handler) {
19
+ this.startTime = null;
20
+ this.invalid = false;
21
+ this.handler = handler;
22
+ this.callbacks = [];
23
+ this.closed = false;
24
+ if(typeof watchOptions === "number") {
25
+ this.watchOptions = {
26
+ aggregateTimeout: watchOptions
27
+ };
28
+ } else if(watchOptions && typeof watchOptions === "object") {
29
+ this.watchOptions = Object.assign({}, watchOptions);
30
+ } else {
31
+ this.watchOptions = {};
32
+ }
33
+ this.watchOptions.aggregateTimeout = this.watchOptions.aggregateTimeout || 200;
34
+ this.compiler = compiler;
35
+ this.running = true;
36
+ this.compiler.readRecords(err => {
37
+ if(err) return this._done(err);
38
+
39
+ this._go();
40
+ });
41
+ }
42
+
43
+ _go() {
44
+ this.startTime = Date.now();
45
+ this.running = true;
46
+ this.invalid = false;
47
+ this.compiler.applyPluginsAsync("watch-run", this, err => {
48
+ if(err) return this._done(err);
49
+ const onCompiled = (err, compilation) => {
50
+ if(err) return this._done(err);
51
+ if(this.invalid) return this._done();
52
+
53
+ if(this.compiler.applyPluginsBailResult("should-emit", compilation) === false) {
54
+ return this._done(null, compilation);
55
+ }
56
+
57
+ this.compiler.emitAssets(compilation, err => {
58
+ if(err) return this._done(err);
59
+ if(this.invalid) return this._done();
60
+
61
+ this.compiler.emitRecords(err => {
62
+ if(err) return this._done(err);
63
+
64
+ if(compilation.applyPluginsBailResult("need-additional-pass")) {
65
+ compilation.needAdditionalPass = true;
66
+
67
+ const stats = new Stats(compilation);
68
+ stats.startTime = this.startTime;
69
+ stats.endTime = Date.now();
70
+ this.compiler.applyPlugins("done", stats);
71
+
72
+ this.compiler.applyPluginsAsync("additional-pass", err => {
73
+ if(err) return this._done(err);
74
+ this.compiler.compile(onCompiled);
75
+ });
76
+ return;
77
+ }
78
+ return this._done(null, compilation);
79
+ });
80
+ });
81
+ };
82
+ this.compiler.compile(onCompiled);
83
+ });
84
+ }
85
+
86
+ _getStats(compilation) {
87
+ const stats = new Stats(compilation);
88
+ stats.startTime = this.startTime;
89
+ stats.endTime = Date.now();
90
+ return stats;
91
+ }
92
+
93
+ _done(err, compilation) {
94
+ this.running = false;
95
+ if(this.invalid) return this._go();
96
+
97
+ const stats = compilation ? this._getStats(compilation) : null;
98
+ if(err) {
99
+ this.compiler.applyPlugins("failed", err);
100
+ this.handler(err, stats);
101
+ return;
102
+ }
103
+
104
+ this.compiler.applyPlugins("done", stats);
105
+ this.handler(null, stats);
106
+ if(!this.closed) {
107
+ this.watch(compilation.fileDependencies, compilation.contextDependencies, compilation.missingDependencies);
108
+ }
109
+ this.callbacks.forEach(cb => cb());
110
+ this.callbacks.length = 0;
111
+ }
112
+
113
+ watch(files, dirs, missing) {
114
+ this.pausedWatcher = null;
115
+ this.watcher = this.compiler.watchFileSystem.watch(files, dirs, missing, this.startTime, this.watchOptions, (err, filesModified, contextModified, missingModified, fileTimestamps, contextTimestamps) => {
116
+ this.pausedWatcher = this.watcher;
117
+ this.watcher = null;
118
+ if(err) return this.handler(err);
119
+
120
+ this.compiler.fileTimestamps = fileTimestamps;
121
+ this.compiler.contextTimestamps = contextTimestamps;
122
+ this.invalidate();
123
+ }, (fileName, changeTime) => {
124
+ this.compiler.applyPlugins("invalid", fileName, changeTime);
125
+ });
126
+ }
127
+
128
+ invalidate(callback) {
129
+ if(callback) {
130
+ this.callbacks.push(callback);
131
+ }
132
+ if(this.watcher) {
133
+ this.pausedWatcher = this.watcher;
134
+ this.watcher.pause();
135
+ this.watcher = null;
136
+ }
137
+ if(this.running) {
138
+ this.invalid = true;
139
+ return false;
140
+ } else {
141
+ this._go();
142
+ }
143
+ }
144
+
145
+ close(callback) {
146
+ if(callback === undefined) callback = function() {};
147
+
148
+ this.closed = true;
149
+ if(this.watcher) {
150
+ this.watcher.close();
151
+ this.watcher = null;
152
+ }
153
+ if(this.pausedWatcher) {
154
+ this.pausedWatcher.close();
155
+ this.pausedWatcher = null;
156
+ }
157
+ if(this.running) {
158
+ this.invalid = true;
159
+ this._done = () => {
160
+ this.compiler.applyPlugins("watch-close");
161
+ callback();
162
+ };
163
+ } else {
164
+ this.compiler.applyPlugins("watch-close");
165
+ callback();
166
+ }
167
+ }
168
+ }
169
+
170
+ class Compiler extends Tapable {
171
+ constructor() {
172
+ super();
173
+ this.outputPath = "";
174
+ this.outputFileSystem = null;
175
+ this.inputFileSystem = null;
176
+
177
+ this.recordsInputPath = null;
178
+ this.recordsOutputPath = null;
179
+ this.records = {};
180
+
181
+ this.fileTimestamps = {};
182
+ this.contextTimestamps = {};
183
+
184
+ this.resolvers = {
185
+ normal: null,
186
+ loader: null,
187
+ context: null
188
+ };
189
+ let deprecationReported = false;
190
+ this.parser = {
191
+ plugin: (hook, fn) => {
192
+ if(!deprecationReported) {
193
+ console.warn("webpack: Using compiler.parser is deprecated.\n" +
194
+ "Use compiler.plugin(\"compilation\", function(compilation, data) {\n data.normalModuleFactory.plugin(\"parser\", function(parser, options) { parser.plugin(/* ... */); });\n}); instead. " +
195
+ "It was called " + new Error().stack.split("\n")[2].trim() + ".");
196
+ deprecationReported = true;
197
+ }
198
+ this.plugin("compilation", (compilation, data) => {
199
+ data.normalModuleFactory.plugin("parser", parser => {
200
+ parser.plugin(hook, fn);
201
+ });
202
+ });
203
+ },
204
+ apply: () => {
205
+ const args = arguments;
206
+ if(!deprecationReported) {
207
+ console.warn("webpack: Using compiler.parser is deprecated.\n" +
208
+ "Use compiler.plugin(\"compilation\", function(compilation, data) {\n data.normalModuleFactory.plugin(\"parser\", function(parser, options) { parser.apply(/* ... */); });\n}); instead. " +
209
+ "It was called " + new Error().stack.split("\n")[2].trim() + ".");
210
+ deprecationReported = true;
211
+ }
212
+ this.plugin("compilation", (compilation, data) => {
213
+ data.normalModuleFactory.plugin("parser", parser => {
214
+ parser.apply.apply(parser, args);
215
+ });
216
+ });
217
+ }
218
+ };
219
+
220
+ this.options = {};
221
+ }
222
+
223
+ watch(watchOptions, handler) {
224
+ this.fileTimestamps = {};
225
+ this.contextTimestamps = {};
226
+ const watching = new Watching(this, watchOptions, handler);
227
+ return watching;
228
+ }
229
+
230
+ run(callback) {
231
+ const startTime = Date.now();
232
+
233
+ const onCompiled = (err, compilation) => {
234
+ if(err) return callback(err);
235
+
236
+ if(this.applyPluginsBailResult("should-emit", compilation) === false) {
237
+ const stats = new Stats(compilation);
238
+ stats.startTime = startTime;
239
+ stats.endTime = Date.now();
240
+ this.applyPlugins("done", stats);
241
+ return callback(null, stats);
242
+ }
243
+
244
+ this.emitAssets(compilation, err => {
245
+ if(err) return callback(err);
246
+
247
+ if(compilation.applyPluginsBailResult("need-additional-pass")) {
248
+ compilation.needAdditionalPass = true;
249
+
250
+ const stats = new Stats(compilation);
251
+ stats.startTime = startTime;
252
+ stats.endTime = Date.now();
253
+ this.applyPlugins("done", stats);
254
+
255
+ this.applyPluginsAsync("additional-pass", err => {
256
+ if(err) return callback(err);
257
+ this.compile(onCompiled);
258
+ });
259
+ return;
260
+ }
261
+
262
+ this.emitRecords(err => {
263
+ if(err) return callback(err);
264
+
265
+ const stats = new Stats(compilation);
266
+ stats.startTime = startTime;
267
+ stats.endTime = Date.now();
268
+ this.applyPlugins("done", stats);
269
+ return callback(null, stats);
270
+ });
271
+ });
272
+ };
273
+
274
+ this.applyPluginsAsync("before-run", this, err => {
275
+ if(err) return callback(err);
276
+
277
+ this.applyPluginsAsync("run", this, err => {
278
+ if(err) return callback(err);
279
+
280
+ this.readRecords(err => {
281
+ if(err) return callback(err);
282
+
283
+ this.compile(onCompiled);
284
+ });
285
+ });
286
+ });
287
+ }
288
+
289
+ runAsChild(callback) {
290
+ this.compile((err, compilation) => {
291
+ if(err) return callback(err);
292
+
293
+ this.parentCompilation.children.push(compilation);
294
+ Object.keys(compilation.assets).forEach(name => {
295
+ this.parentCompilation.assets[name] = compilation.assets[name];
296
+ });
297
+
298
+ const entries = Object.keys(compilation.entrypoints).map(name => {
299
+ return compilation.entrypoints[name].chunks;
300
+ }).reduce((array, chunks) => {
301
+ return array.concat(chunks);
302
+ }, []);
303
+
304
+ return callback(null, entries, compilation);
305
+ });
306
+ }
307
+
308
+ purgeInputFileSystem() {
309
+ if(this.inputFileSystem && this.inputFileSystem.purge)
310
+ this.inputFileSystem.purge();
311
+ }
312
+
313
+ emitAssets(compilation, callback) {
314
+ let outputPath;
315
+
316
+ const emitFiles = (err) => {
317
+ if(err) return callback(err);
318
+
319
+ require("async").forEach(Object.keys(compilation.assets), (file, callback) => {
320
+
321
+ let targetFile = file;
322
+ const queryStringIdx = targetFile.indexOf("?");
323
+ if(queryStringIdx >= 0) {
324
+ targetFile = targetFile.substr(0, queryStringIdx);
325
+ }
326
+
327
+ const writeOut = (err) => {
328
+ if(err) return callback(err);
329
+ const targetPath = this.outputFileSystem.join(outputPath, targetFile);
330
+ const source = compilation.assets[file];
331
+ if(source.existsAt === targetPath) {
332
+ source.emitted = false;
333
+ return callback();
334
+ }
335
+ let content = source.source();
336
+
337
+ if(!Buffer.isBuffer(content)) {
338
+ content = new Buffer(content, "utf8"); // eslint-disable-line
339
+ }
340
+
341
+ source.existsAt = targetPath;
342
+ source.emitted = true;
343
+ this.outputFileSystem.writeFile(targetPath, content, callback);
344
+ };
345
+
346
+ if(targetFile.match(/\/|\\/)) {
347
+ const dir = path.dirname(targetFile);
348
+ this.outputFileSystem.mkdirp(this.outputFileSystem.join(outputPath, dir), writeOut);
349
+ } else writeOut();
350
+
351
+ }, err => {
352
+ if(err) return callback(err);
353
+
354
+ afterEmit.call(this);
355
+ });
356
+ };
357
+
358
+ this.applyPluginsAsync("emit", compilation, err => {
359
+ if(err) return callback(err);
360
+ outputPath = compilation.getPath(this.outputPath);
361
+ this.outputFileSystem.mkdirp(outputPath, emitFiles);
362
+ });
363
+
364
+ function afterEmit() {
365
+ this.applyPluginsAsyncSeries1("after-emit", compilation, err => {
366
+ if(err) return callback(err);
367
+
368
+ return callback();
369
+ });
370
+ }
371
+
372
+ }
373
+
374
+ emitRecords(callback) {
375
+ if(!this.recordsOutputPath) return callback();
376
+ const idx1 = this.recordsOutputPath.lastIndexOf("/");
377
+ const idx2 = this.recordsOutputPath.lastIndexOf("\\");
378
+ let recordsOutputPathDirectory = null;
379
+ if(idx1 > idx2) recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx1);
380
+ if(idx1 < idx2) recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx2);
381
+ if(!recordsOutputPathDirectory) return writeFile.call(this);
382
+ this.outputFileSystem.mkdirp(recordsOutputPathDirectory, err => {
383
+ if(err) return callback(err);
384
+ writeFile.call(this);
385
+ });
386
+
387
+ function writeFile() {
388
+ this.outputFileSystem.writeFile(this.recordsOutputPath, JSON.stringify(this.records, undefined, 2), callback);
389
+ }
390
+ }
391
+
392
+ readRecords(callback) {
393
+ if(!this.recordsInputPath) {
394
+ this.records = {};
395
+ return callback();
396
+ }
397
+ this.inputFileSystem.stat(this.recordsInputPath, err => {
398
+ // It doesn't exist
399
+ // We can ignore this.
400
+ if(err) return callback();
401
+
402
+ this.inputFileSystem.readFile(this.recordsInputPath, (err, content) => {
403
+ if(err) return callback(err);
404
+
405
+ try {
406
+ this.records = JSON.parse(content.toString("utf-8"));
407
+ } catch(e) {
408
+ e.message = "Cannot parse records: " + e.message;
409
+ return callback(e);
410
+ }
411
+
412
+ return callback();
413
+ });
414
+ });
415
+ }
416
+
417
+ createChildCompiler(compilation, compilerName, compilerIndex, outputOptions, plugins) {
418
+ const childCompiler = new Compiler();
419
+ if(Array.isArray(plugins)) {
420
+ plugins.forEach(plugin => childCompiler.apply(plugin));
421
+ }
422
+ for(const name in this._plugins) {
423
+ if(["make", "compile", "emit", "after-emit", "invalid", "done", "this-compilation"].indexOf(name) < 0)
424
+ childCompiler._plugins[name] = this._plugins[name].slice();
425
+ }
426
+ childCompiler.name = compilerName;
427
+ childCompiler.outputPath = this.outputPath;
428
+ childCompiler.inputFileSystem = this.inputFileSystem;
429
+ childCompiler.outputFileSystem = null;
430
+ childCompiler.resolvers = this.resolvers;
431
+ childCompiler.fileTimestamps = this.fileTimestamps;
432
+ childCompiler.contextTimestamps = this.contextTimestamps;
433
+
434
+ const relativeCompilerName = makePathsRelative(this.context, compilerName);
435
+ if(!this.records[relativeCompilerName]) this.records[relativeCompilerName] = [];
436
+ if(this.records[relativeCompilerName][compilerIndex])
437
+ childCompiler.records = this.records[relativeCompilerName][compilerIndex];
438
+ else
439
+ this.records[relativeCompilerName].push(childCompiler.records = {});
440
+
441
+ childCompiler.options = Object.create(this.options);
442
+ childCompiler.options.output = Object.create(childCompiler.options.output);
443
+ for(const name in outputOptions) {
444
+ childCompiler.options.output[name] = outputOptions[name];
445
+ }
446
+ childCompiler.parentCompilation = compilation;
447
+
448
+ compilation.applyPlugins("child-compiler", childCompiler, compilerName, compilerIndex);
449
+
450
+ return childCompiler;
451
+ }
452
+
453
+ isChild() {
454
+ return !!this.parentCompilation;
455
+ }
456
+
457
+ createCompilation() {
458
+ return new Compilation(this);
459
+ }
460
+
461
+ newCompilation(params) {
462
+ const compilation = this.createCompilation();
463
+ compilation.fileTimestamps = this.fileTimestamps;
464
+ compilation.contextTimestamps = this.contextTimestamps;
465
+ compilation.name = this.name;
466
+ compilation.records = this.records;
467
+ compilation.compilationDependencies = params.compilationDependencies;
468
+ this.applyPlugins("this-compilation", compilation, params);
469
+ this.applyPlugins("compilation", compilation, params);
470
+ return compilation;
471
+ }
472
+
473
+ createNormalModuleFactory() {
474
+ const normalModuleFactory = new NormalModuleFactory(this.options.context, this.resolvers, this.options.module || {});
475
+ this.applyPlugins("normal-module-factory", normalModuleFactory);
476
+ return normalModuleFactory;
477
+ }
478
+
479
+ createContextModuleFactory() {
480
+ const contextModuleFactory = new ContextModuleFactory(this.resolvers, this.inputFileSystem);
481
+ this.applyPlugins("context-module-factory", contextModuleFactory);
482
+ return contextModuleFactory;
483
+ }
484
+
485
+ newCompilationParams() {
486
+ const params = {
487
+ normalModuleFactory: this.createNormalModuleFactory(),
488
+ contextModuleFactory: this.createContextModuleFactory(),
489
+ compilationDependencies: []
490
+ };
491
+ return params;
492
+ }
493
+
494
+ compile(callback) {
495
+ const params = this.newCompilationParams();
496
+ this.applyPluginsAsync("before-compile", params, err => {
497
+ if(err) return callback(err);
498
+
499
+ this.applyPlugins("compile", params);
500
+
501
+ const compilation = this.newCompilation(params);
502
+
503
+ this.applyPluginsParallel("make", compilation, err => {
504
+ if(err) return callback(err);
505
+
506
+ compilation.finish();
507
+
508
+ compilation.seal(err => {
509
+ if(err) return callback(err);
510
+
511
+ this.applyPluginsAsync("after-compile", compilation, err => {
512
+ if(err) return callback(err);
513
+
514
+ return callback(null, compilation);
515
+ });
516
+ });
517
+ });
518
+ });
519
+ }
520
+ }
521
+
522
+ Compiler.Watching = Watching;
523
+ module.exports = Compiler;