UNPKG

1.59 kBJavaScriptView Raw
1let ConcatenatedModule;
2try {
3 // eslint-disable-next-line global-require,import/no-unresolved,import/no-extraneous-dependencies
4 ConcatenatedModule = require('webpack/lib/optimize/ConcatenatedModule');
5 // eslint-disable-next-line no-empty
6} catch (e) {}
7
8/**
9 * Get all modules from main & child compilations.
10 * Merge modules from ConcatenatedModule (when webpack.optimize.ModuleConcatenationPlugin is used)
11 * @param {Compilation} compilation
12 * @return {NormalModule[]}
13 */
14function getAllModules(compilation) {
15 let modules = compilation.modules;
16
17 // Look up in child compilations
18 if (compilation.children.length > 0) {
19 const childModules = compilation.children.map(getAllModules)
20 .reduce((acc, compilationModules) => acc.concat(compilationModules), []);
21
22 modules = modules.concat(childModules);
23 }
24
25 // Merge modules from ConcatenatedModule
26 if (ConcatenatedModule) {
27 const concatenatedModules = modules
28 .filter(m => m instanceof ConcatenatedModule)
29 .reduce((acc, m) => {
30 /**
31 * @see https://git.io/v7XDu
32 * In webpack@3.5.1 `modules` public property was removed
33 * To workaround this private `_orderedConcatenationList` property is used to collect modules
34 */
35 const subModules = 'modules' in m
36 ? m.modules
37 : m._orderedConcatenationList.map(entry => entry.module);
38
39 return acc.concat(subModules);
40 }, []);
41
42 if (concatenatedModules.length > 0) {
43 modules = modules.concat(concatenatedModules);
44 }
45 }
46
47 return modules;
48}
49
50module.exports = getAllModules;