diff --git a/Plugin.js b/Plugin.js index faccef1..2243725 100644 --- a/Plugin.js +++ b/Plugin.js @@ -1,8 +1,9 @@ -'use strict'; - class ExtractFilePlugin { + apply(compiler) { + compiler.plugin('this-compilation', (compilation) => { + compilation.plugin('normal-module-loader', (loaderContext, module) => { loaderContext[__dirname] = () => { module.meta[__dirname] = true; @@ -11,7 +12,7 @@ class ExtractFilePlugin { compilation.plugin('additional-assets', callback => { compilation.chunks.forEach(chunk => { - chunk.modules.forEach(module => processModule(chunk, module)); + chunk.forEachModule(module => processModule(chunk, module)); }); callback(); @@ -21,22 +22,28 @@ class ExtractFilePlugin { } function processModule(chunk, ourModule) { + if (ourModule.meta && ourModule.meta[__dirname]) { + + let moduleFound = false; + // let's find module, which was issued by ours (proxied module) - chunk.modules.some((module) => { - if (module.reasons.some(reason => reason.module === ourModule)) { + chunk.forEachModule((module) => { + + if (!moduleFound && module.reasons.some(reason => reason.module === ourModule)) { // add assets from that module addAssets(chunk, module); // break cycle - return true; + moduleFound = true; } }); } } function addAssets(chunk, module) { + // add any emitted assets via proxied module to this chunk - for (var file in module.assets) { + for (let file in module.assets) { chunk.files.push(file); } }