51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
let ConcatenatedModule;
|
|
try {
|
|
// eslint-disable-next-line global-require,import/no-unresolved,import/no-extraneous-dependencies
|
|
ConcatenatedModule = require('webpack/lib/optimize/ConcatenatedModule');
|
|
// eslint-disable-next-line no-empty
|
|
} catch (e) {}
|
|
|
|
/**
|
|
* Get all modules from main & child compilations.
|
|
* Merge modules from ConcatenatedModule (when webpack.optimize.ModuleConcatenationPlugin is used)
|
|
* @param {Compilation} compilation
|
|
* @return {NormalModule[]}
|
|
*/
|
|
function getAllModules(compilation) {
|
|
let modules = compilation.modules;
|
|
|
|
// Look up in child compilations
|
|
if (compilation.children.length > 0) {
|
|
const childModules = compilation.children.map(getAllModules)
|
|
.reduce((acc, compilationModules) => acc.concat(compilationModules), []);
|
|
|
|
modules = modules.concat(childModules);
|
|
}
|
|
|
|
// Merge modules from ConcatenatedModule
|
|
if (ConcatenatedModule) {
|
|
const concatenatedModules = modules
|
|
.filter(m => m instanceof ConcatenatedModule)
|
|
.reduce((acc, m) => {
|
|
/**
|
|
* @see https://git.io/v7XDu
|
|
* In webpack@3.5.1 `modules` public property was removed
|
|
* To workaround this private `_orderedConcatenationList` property is used to collect modules
|
|
*/
|
|
const subModules = 'modules' in m
|
|
? m.modules
|
|
: m._orderedConcatenationList.map(entry => entry.module);
|
|
|
|
return acc.concat(subModules);
|
|
}, []);
|
|
|
|
if (concatenatedModules.length > 0) {
|
|
modules = modules.concat(concatenatedModules);
|
|
}
|
|
}
|
|
|
|
return modules;
|
|
}
|
|
|
|
module.exports = getAllModules;
|