From 66086aa4aaf577510dba5d0491181e5929abcf5d Mon Sep 17 00:00:00 2001 From: "Michael \"Z\" Goddard" Date: Mon, 2 Jul 2018 12:07:21 -0400 Subject: [PATCH] fix: support unresolved loader resolve calls (#396) --- lib/TransformNormalModuleFactoryPlugin.js | 18 +++++++++++------- .../fab.js | 1 + .../fib.js | 3 +++ .../index.js | 3 +++ .../loader.js | 9 +++++++++ .../webpack.config.js | 18 ++++++++++++++++++ .../fib.js | 3 +++ .../index.js | 3 +++ .../loader.js | 9 +++++++++ .../webpack.config.js | 18 ++++++++++++++++++ tests/loaders-webpack-3.js | 11 +++++++++++ 11 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 tests/fixtures/loader-custom-resolve-request-missing-change/fab.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing-change/fib.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing-change/index.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing-change/loader.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing-change/webpack.config.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing/fib.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing/index.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing/loader.js create mode 100644 tests/fixtures/loader-custom-resolve-request-missing/webpack.config.js diff --git a/lib/TransformNormalModuleFactoryPlugin.js b/lib/TransformNormalModuleFactoryPlugin.js index 9653a0b8..a815756b 100644 --- a/lib/TransformNormalModuleFactoryPlugin.js +++ b/lib/TransformNormalModuleFactoryPlugin.js @@ -52,13 +52,17 @@ class NormalModuleFactoryPlugin { context, request, (err, result) => { - module.__hardSource_resolved[ - JSON.stringify({ context, request }) - ] = { - resource: result, - resolveOptions: module.resolveOptions, - }; - callback(err, result); + if (err) { + callback(err, result); + } else { + module.__hardSource_resolved[ + JSON.stringify({ context, request }) + ] = { + resource: result, + resolveOptions: module.resolveOptions, + }; + callback(err, result); + } }, ); }; diff --git a/tests/fixtures/loader-custom-resolve-request-missing-change/fab.js b/tests/fixtures/loader-custom-resolve-request-missing-change/fab.js new file mode 100644 index 00000000..ba0e162e --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing-change/fab.js @@ -0,0 +1 @@ +bar \ No newline at end of file diff --git a/tests/fixtures/loader-custom-resolve-request-missing-change/fib.js b/tests/fixtures/loader-custom-resolve-request-missing-change/fib.js new file mode 100644 index 00000000..bf0205d4 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing-change/fib.js @@ -0,0 +1,3 @@ +module.exports = function(n) { + return n + (n > 0 ? n - 2 : 0); +}; \ No newline at end of file diff --git a/tests/fixtures/loader-custom-resolve-request-missing-change/index.js b/tests/fixtures/loader-custom-resolve-request-missing-change/index.js new file mode 100644 index 00000000..d787238f --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing-change/index.js @@ -0,0 +1,3 @@ +var fib = require('./loader!./fib'); + +console.log(fib(3)); diff --git a/tests/fixtures/loader-custom-resolve-request-missing-change/loader.js b/tests/fixtures/loader-custom-resolve-request-missing-change/loader.js new file mode 100644 index 00000000..ceb56b72 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing-change/loader.js @@ -0,0 +1,9 @@ +module.exports = function(source) { + this.cacheable && this.cacheable(); + const done = this.async(); + new Promise( + (f, e) => this.resolve(this.context, './fab', (er, v) => (er ? e(er) : f(v))) + ) + .then(v => JSON.stringify(v)) + .then(v => done(null, v), done); +}; diff --git a/tests/fixtures/loader-custom-resolve-request-missing-change/webpack.config.js b/tests/fixtures/loader-custom-resolve-request-missing-change/webpack.config.js new file mode 100644 index 00000000..da370314 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing-change/webpack.config.js @@ -0,0 +1,18 @@ +var HardSourceWebpackPlugin = require('../../..'); + +module.exports = { + context: __dirname, + entry: './index.js', + output: { + path: __dirname + '/tmp', + filename: 'main.js', + }, + plugins: [ + new HardSourceWebpackPlugin({ + cacheDirectory: 'cache', + environmentHash: { + root: __dirname + '/../../..', + }, + }), + ], +}; diff --git a/tests/fixtures/loader-custom-resolve-request-missing/fib.js b/tests/fixtures/loader-custom-resolve-request-missing/fib.js new file mode 100644 index 00000000..bf0205d4 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing/fib.js @@ -0,0 +1,3 @@ +module.exports = function(n) { + return n + (n > 0 ? n - 2 : 0); +}; \ No newline at end of file diff --git a/tests/fixtures/loader-custom-resolve-request-missing/index.js b/tests/fixtures/loader-custom-resolve-request-missing/index.js new file mode 100644 index 00000000..d787238f --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing/index.js @@ -0,0 +1,3 @@ +var fib = require('./loader!./fib'); + +console.log(fib(3)); diff --git a/tests/fixtures/loader-custom-resolve-request-missing/loader.js b/tests/fixtures/loader-custom-resolve-request-missing/loader.js new file mode 100644 index 00000000..0166c473 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing/loader.js @@ -0,0 +1,9 @@ +module.exports = function(source) { + this.cacheable && this.cacheable(); + const done = this.async(); + new Promise( + (f, e) => this.resolve(this.context, './fab', (er, v) => (er ? f('unresolved') : f(v))) + ) + .then(v => JSON.stringify(v)) + .then(v => done(null, v), done); +}; diff --git a/tests/fixtures/loader-custom-resolve-request-missing/webpack.config.js b/tests/fixtures/loader-custom-resolve-request-missing/webpack.config.js new file mode 100644 index 00000000..da370314 --- /dev/null +++ b/tests/fixtures/loader-custom-resolve-request-missing/webpack.config.js @@ -0,0 +1,18 @@ +var HardSourceWebpackPlugin = require('../../..'); + +module.exports = { + context: __dirname, + entry: './index.js', + output: { + path: __dirname + '/tmp', + filename: 'main.js', + }, + plugins: [ + new HardSourceWebpackPlugin({ + cacheDirectory: 'cache', + environmentHash: { + root: __dirname + '/../../..', + }, + }), + ], +}; diff --git a/tests/loaders-webpack-3.js b/tests/loaders-webpack-3.js index 9b1c5057..be37614d 100644 --- a/tests/loaders-webpack-3.js +++ b/tests/loaders-webpack-3.js @@ -9,6 +9,8 @@ describeWP(3)('loader webpack 3 use', function() { itCompilesTwice('loader-worker-1dep'); itCompilesTwice('loader-worker-1dep', {exportStats: true}); + itCompilesTwice('loader-custom-resolve-request-missing'); + itCompilesTwice('loader-custom-resolve-request-missing', {exportStats: true}); }); @@ -32,5 +34,14 @@ describeWP(3)('loader webpack 3 use - builds changes', function() { expect(output.run2['main.js'].toString()).to.match(/fab(\/|\\\\|\\\\\\\\)index\.js/); }); + itCompilesChange('loader-custom-resolve-request-missing-change', { + 'fab.js': null, + }, { + 'fab.js': 'bar', + }, function(output) { + expect(output.run1['main.js'].toString()).to.not.match(/fab\.js/); + expect(output.run2['main.js'].toString()).to.match(/fab\.js/); + }); + });