diff --git a/src/index.js b/src/index.js index 4f584441..57d915d6 100644 --- a/src/index.js +++ b/src/index.js @@ -146,6 +146,7 @@ class MiniCssExtractPlugin { )}` ); } + const identifierCountMap = new Map(); for (const line of content) { const count = identifierCountMap.get(line.identifier) || 0; diff --git a/src/loader.js b/src/loader.js index cd8fefbc..9801d590 100644 --- a/src/loader.js +++ b/src/loader.js @@ -59,6 +59,7 @@ export function pitch(request) { compilation.hooks.normalModuleLoader.tap( `${pluginName} loader`, (loaderContext, module) => { + loaderContext.emitFile = this.emitFile; loaderContext[MODULE_TYPE] = false; // eslint-disable-line no-param-reassign if (module.request === request) { // eslint-disable-next-line no-param-reassign diff --git a/test/TestMemoryFS.test.js b/test/TestMemoryFS.test.js new file mode 100644 index 00000000..f2344d9c --- /dev/null +++ b/test/TestMemoryFS.test.js @@ -0,0 +1,39 @@ +import path from 'path'; + +import MemoryFS from 'memory-fs'; +import webpack from 'webpack'; + +const assetsNames = (json) => json.assets.map((asset) => asset.name); + +describe('TestMemoryFS', () => { + it('should preserve asset even if not emitted', (done) => { + const casesDirectory = path.resolve(__dirname, 'cases'); + const directoryForCase = path.resolve(casesDirectory, 'simple-publicpath'); + const webpackConfig = require(path.resolve( + directoryForCase, + 'webpack.config.js' + )); + const compiler = webpack({ + ...webpackConfig, + mode: 'development', + context: directoryForCase, + }); + compiler.outputFileSystem = new MemoryFS(); + compiler.run((err1, stats1) => { + if (err1) { + done(err1); + return; + } + compiler.run((err2, stats2) => { + if (err2) { + done(err2); + return; + } + expect(assetsNames(stats1.toJson())).toEqual( + assetsNames(stats2.toJson()) + ); + done(); + }); + }); + }); +});