From a6865ccca3fbb68f0d3c8a0173d546d49b537709 Mon Sep 17 00:00:00 2001 From: Steven Pribilinskiy Date: Thu, 20 Jul 2017 21:12:26 +0300 Subject: [PATCH] Fix `Chunk.modules` DeprecationWarning in Webpack 3.x Updates to Chunk.mapModules is not backwards compatible with Webpack 2.x due to breaking changes in webpack/webpack#4764 Following should be added to `README`: ### Install ``` # for webpack 3 npm install --save-dev extract-text-webpack-plugin # for webpack 1, 2 npm install --save-dev extract-text-webpack-plugin@0.1.0 ``` --- Plugin.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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); } }