From c6934e48ff4e06bc79448adc2c45ad59e28c453c Mon Sep 17 00:00:00 2001 From: Jack Zhao Date: Mon, 21 May 2018 23:37:48 -0700 Subject: [PATCH 1/4] scope hoisting --- lib/plugin.js | 10 +++++--- package.json | 2 ++ spec/plugin.integration.spec.js | 45 +++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/lib/plugin.js b/lib/plugin.js index 047f2ba..d21f96b 100644 --- a/lib/plugin.js +++ b/lib/plugin.js @@ -40,10 +40,12 @@ ManifestPlugin.prototype.apply = function(compiler) { var outputName = path.relative(outputFolder, outputFile); var moduleAsset = function (module, file) { - moduleAssets[file] = path.join( - path.dirname(file), - path.basename(module.userRequest) - ); + if (module.userRequest) { + moduleAssets[file] = path.join( + path.dirname(file), + path.basename(module.userRequest) + ); + } }; var emit = function(compilation, compileCallback) { diff --git a/package.json b/package.json index 4f4de87..f73b534 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,10 @@ "file-loader": "^1.1.11", "jest": "^22.4.3", "memory-fs": "^0.2.0", + "react": "^16.3.2", "rimraf": "^2.6.1", "style-loader": "^0.8.3", + "svgr": "^1.9.2", "webpack": "^3.5.2" }, "files": [ diff --git a/spec/plugin.integration.spec.js b/spec/plugin.integration.spec.js index 4a62a78..82570fa 100644 --- a/spec/plugin.integration.spec.js +++ b/spec/plugin.integration.spec.js @@ -436,3 +436,48 @@ describe('ManifestPlugin with memory-fs', function() { }); }); }); + +describe('scoped hoisting', function() { + var compiler; + var hashes; + + beforeAll(function () { + fse.outputFileSync(path.join(__dirname, 'output/scoped-hoisting/index.js'), 'import { ReactComponent } from "./logo.svg";'); + fse.outputFileSync(path.join(__dirname, 'output/scoped-hoisting/logo.svg'), ''); + + hashes = []; + }); + + afterAll(() => { + compiler.close() + }) + + it('outputs a manifest', function(done) { + compiler = webpackCompile({ + context: __dirname, + entry: './output/scoped-hoisting/index.js', + module: { + rules: [ + { + test: /\.svg$/, + use: ['svgr/webpack', 'file-loader'] + }, + ], + }, + output: { + filename: '[name].[hash].js', + path: path.join(__dirname, 'output/scoped-hoisting') + }, + plugins: [ + new webpack.optimize.ModuleConcatenationPlugin(), + new ManifestPlugin(), + ] + }, {}, function(stats) { + var manifest = JSON.parse(fse.readFileSync(path.join(__dirname, 'output/scoped-hoisting/manifest.json'))) + + expect(manifest).toBeDefined(); + expect(manifest['main.js']).toEqual('main.'+ stats.hash +'.js'); + return done(); + }); + }); +}); From a63ca43eabc1a90fa89001dc0bc360657cfcab51 Mon Sep 17 00:00:00 2001 From: Jack Zhao Date: Tue, 22 May 2018 00:39:43 -0700 Subject: [PATCH 2/4] webpack 2 --- spec/plugin.integration.spec.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/spec/plugin.integration.spec.js b/spec/plugin.integration.spec.js index 82570fa..0e813ae 100644 --- a/spec/plugin.integration.spec.js +++ b/spec/plugin.integration.spec.js @@ -453,6 +453,12 @@ describe('scoped hoisting', function() { }) it('outputs a manifest', function(done) { + const plugins = [ + new ManifestPlugin(), + ]; + if (webpack.optimize.ModuleConcatenationPlugin) { + plugins.unshift(new webpack.optimize.ModuleConcatenationPlugin()); + } compiler = webpackCompile({ context: __dirname, entry: './output/scoped-hoisting/index.js', @@ -468,10 +474,7 @@ describe('scoped hoisting', function() { filename: '[name].[hash].js', path: path.join(__dirname, 'output/scoped-hoisting') }, - plugins: [ - new webpack.optimize.ModuleConcatenationPlugin(), - new ManifestPlugin(), - ] + plugins, }, {}, function(stats) { var manifest = JSON.parse(fse.readFileSync(path.join(__dirname, 'output/scoped-hoisting/manifest.json'))) From fbc58c70626ced5cee3dbf344730713115cc5b14 Mon Sep 17 00:00:00 2001 From: Jack Zhao Date: Tue, 22 May 2018 09:38:16 -0700 Subject: [PATCH 3/4] review comments --- spec/plugin.integration.spec.js | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/spec/plugin.integration.spec.js b/spec/plugin.integration.spec.js index 0e813ae..73fa7fc 100644 --- a/spec/plugin.integration.spec.js +++ b/spec/plugin.integration.spec.js @@ -438,26 +438,23 @@ describe('ManifestPlugin with memory-fs', function() { }); describe('scoped hoisting', function() { - var compiler; - var hashes; - beforeAll(function () { fse.outputFileSync(path.join(__dirname, 'output/scoped-hoisting/index.js'), 'import { ReactComponent } from "./logo.svg";'); fse.outputFileSync(path.join(__dirname, 'output/scoped-hoisting/logo.svg'), ''); - - hashes = []; }); - afterAll(() => { - compiler.close() - }) - it('outputs a manifest', function(done) { - const plugins = [ - new ManifestPlugin(), - ]; - if (webpack.optimize.ModuleConcatenationPlugin) { - plugins.unshift(new webpack.optimize.ModuleConcatenationPlugin()); + let plugins; + if (webpack.version && webpack.version.slice(0, 1) === '2') { + plugins = [ + new ManifestPlugin(), + ]; + } else { + // ModuleConcatenationPlugin works with webpack 3, 4. + plugins = [ + new webpack.optimize.ModuleConcatenationPlugin(), + new ManifestPlugin(), + ]; } compiler = webpackCompile({ context: __dirname, From b9d5ef151d4bca65bab743f4f0f4bb70a6978aa1 Mon Sep 17 00:00:00 2001 From: Jack Zhao Date: Tue, 22 May 2018 09:48:22 -0700 Subject: [PATCH 4/4] webpack 2 fix --- spec/plugin.integration.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/plugin.integration.spec.js b/spec/plugin.integration.spec.js index 73fa7fc..5a20f5a 100644 --- a/spec/plugin.integration.spec.js +++ b/spec/plugin.integration.spec.js @@ -445,14 +445,14 @@ describe('scoped hoisting', function() { it('outputs a manifest', function(done) { let plugins; - if (webpack.version && webpack.version.slice(0, 1) === '2') { + if (webpack.optimize.ModuleConcatenationPlugin) { + // ModuleConcatenationPlugin works with webpack 3, 4. plugins = [ + new webpack.optimize.ModuleConcatenationPlugin(), new ManifestPlugin(), ]; } else { - // ModuleConcatenationPlugin works with webpack 3, 4. plugins = [ - new webpack.optimize.ModuleConcatenationPlugin(), new ManifestPlugin(), ]; }