From a435c74a00b136fa12607380f577d4850c51ea5b Mon Sep 17 00:00:00 2001 From: James Chapman Date: Tue, 25 Jun 2019 19:02:41 +0100 Subject: [PATCH 1/4] add test case for #9053 --- test/configCases/loaders/issue-9053/a.js | 1 + test/configCases/loaders/issue-9053/b.js | 1 + test/configCases/loaders/issue-9053/index.js | 5 +++++ .../loaders/issue-9053/node_modules/loader1.js | 3 +++ .../loaders/issue-9053/node_modules/loader2.js | 3 +++ test/configCases/loaders/issue-9053/webpack.config.js | 10 ++++++++++ 6 files changed, 23 insertions(+) create mode 100644 test/configCases/loaders/issue-9053/a.js create mode 100644 test/configCases/loaders/issue-9053/b.js create mode 100644 test/configCases/loaders/issue-9053/index.js create mode 100644 test/configCases/loaders/issue-9053/node_modules/loader1.js create mode 100644 test/configCases/loaders/issue-9053/node_modules/loader2.js create mode 100644 test/configCases/loaders/issue-9053/webpack.config.js diff --git a/test/configCases/loaders/issue-9053/a.js b/test/configCases/loaders/issue-9053/a.js new file mode 100644 index 00000000000..3dea10b12a9 --- /dev/null +++ b/test/configCases/loaders/issue-9053/a.js @@ -0,0 +1 @@ +module.exports = require("c.js!=!loader1!./b.js"); diff --git a/test/configCases/loaders/issue-9053/b.js b/test/configCases/loaders/issue-9053/b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/loaders/issue-9053/b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/loaders/issue-9053/index.js b/test/configCases/loaders/issue-9053/index.js new file mode 100644 index 00000000000..b621fef07ab --- /dev/null +++ b/test/configCases/loaders/issue-9053/index.js @@ -0,0 +1,5 @@ +it("should apply inline loaders before matchResource", function() { + var foo = require("./a"); + + expect(foo).toBe("d"); +}); diff --git a/test/configCases/loaders/issue-9053/node_modules/loader1.js b/test/configCases/loaders/issue-9053/node_modules/loader1.js new file mode 100644 index 00000000000..03f22a2e6fc --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader1.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return "module.exports = \"c\";"; +}; diff --git a/test/configCases/loaders/issue-9053/node_modules/loader2.js b/test/configCases/loaders/issue-9053/node_modules/loader2.js new file mode 100644 index 00000000000..8d8b282d603 --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader2.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return "module.exports = \"d\";"; +}; diff --git a/test/configCases/loaders/issue-9053/webpack.config.js b/test/configCases/loaders/issue-9053/webpack.config.js new file mode 100644 index 00000000000..8f3a1378e5e --- /dev/null +++ b/test/configCases/loaders/issue-9053/webpack.config.js @@ -0,0 +1,10 @@ +module.exports = { + module: { + rules: [ + { + test: /c\.js$/, + use: ["loader2"] + } + ] + } +}; From 49dc747a63df1b78e4937f4f94d2156fa96259eb Mon Sep 17 00:00:00 2001 From: James Chapman Date: Tue, 25 Jun 2019 19:26:53 +0100 Subject: [PATCH 2/4] fix loader ordering --- lib/NormalModuleFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index 49c1dbd8058..ed74ac2f938 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -335,7 +335,7 @@ class NormalModuleFactory extends Tapable { ], (err, results) => { if (err) return callback(err); - loaders = results[0].concat(loaders, results[1], results[2]); + loaders = results[0].concat(results[1], loaders, results[2]); process.nextTick(() => { const type = settings.type; const resolveOptions = settings.resolve; From 61d508e9f21b0ec5b112a1fe0dc442b271e57d4b Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Mon, 1 Jul 2019 09:36:20 +0200 Subject: [PATCH 3/4] improve test cases for more edge cases --- test/configCases/loaders/issue-9053/a.js | 1 - test/configCases/loaders/issue-9053/b.js | 2 +- test/configCases/loaders/issue-9053/c.js | 1 + test/configCases/loaders/issue-9053/index.js | 16 ++++++++++++++-- .../loaders/issue-9053/node_modules/loader1.js | 2 +- .../loaders/issue-9053/node_modules/loader2.js | 2 +- .../loaders/issue-9053/node_modules/loader3.js | 3 +++ .../loaders/issue-9053/webpack.config.js | 4 ++++ 8 files changed, 25 insertions(+), 6 deletions(-) delete mode 100644 test/configCases/loaders/issue-9053/a.js create mode 100644 test/configCases/loaders/issue-9053/c.js create mode 100644 test/configCases/loaders/issue-9053/node_modules/loader3.js diff --git a/test/configCases/loaders/issue-9053/a.js b/test/configCases/loaders/issue-9053/a.js deleted file mode 100644 index 3dea10b12a9..00000000000 --- a/test/configCases/loaders/issue-9053/a.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("c.js!=!loader1!./b.js"); diff --git a/test/configCases/loaders/issue-9053/b.js b/test/configCases/loaders/issue-9053/b.js index dfbbeb621fa..af9f2fcd0e6 100644 --- a/test/configCases/loaders/issue-9053/b.js +++ b/test/configCases/loaders/issue-9053/b.js @@ -1 +1 @@ -module.exports = "b"; +module.exports = ["b"]; diff --git a/test/configCases/loaders/issue-9053/c.js b/test/configCases/loaders/issue-9053/c.js new file mode 100644 index 00000000000..da8dc0c1aa3 --- /dev/null +++ b/test/configCases/loaders/issue-9053/c.js @@ -0,0 +1 @@ +module.exports = ["c"]; diff --git a/test/configCases/loaders/issue-9053/index.js b/test/configCases/loaders/issue-9053/index.js index b621fef07ab..0ab03f53784 100644 --- a/test/configCases/loaders/issue-9053/index.js +++ b/test/configCases/loaders/issue-9053/index.js @@ -1,5 +1,17 @@ it("should apply inline loaders before matchResource", function() { - var foo = require("./a"); + var foo = require("c.js!=!loader1!./b.js"); - expect(foo).toBe("d"); + expect(foo).toEqual(["b", "1", "2"]); +}); + +it("should apply config loaders before inline loaders", function() { + var foo = require("loader1!./c.js"); + + expect(foo).toEqual(["c", "2", "1"]); +}); + +it("should not apply config loaders when matchResource is used", function() { + var foo = require("d.js!=!loader1!./c.js"); + + expect(foo).toEqual(["c", "1", "3"]); }); diff --git a/test/configCases/loaders/issue-9053/node_modules/loader1.js b/test/configCases/loaders/issue-9053/node_modules/loader1.js index 03f22a2e6fc..ff626a75267 100644 --- a/test/configCases/loaders/issue-9053/node_modules/loader1.js +++ b/test/configCases/loaders/issue-9053/node_modules/loader1.js @@ -1,3 +1,3 @@ module.exports = function(source) { - return "module.exports = \"c\";"; + return source + '\nmodule.exports.push("1");'; }; diff --git a/test/configCases/loaders/issue-9053/node_modules/loader2.js b/test/configCases/loaders/issue-9053/node_modules/loader2.js index 8d8b282d603..4529e002f8b 100644 --- a/test/configCases/loaders/issue-9053/node_modules/loader2.js +++ b/test/configCases/loaders/issue-9053/node_modules/loader2.js @@ -1,3 +1,3 @@ module.exports = function(source) { - return "module.exports = \"d\";"; + return source + '\nmodule.exports.push("2");'; }; diff --git a/test/configCases/loaders/issue-9053/node_modules/loader3.js b/test/configCases/loaders/issue-9053/node_modules/loader3.js new file mode 100644 index 00000000000..824c6620d3f --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader3.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return source + '\nmodule.exports.push("3");'; +}; diff --git a/test/configCases/loaders/issue-9053/webpack.config.js b/test/configCases/loaders/issue-9053/webpack.config.js index 8f3a1378e5e..b77f86881e4 100644 --- a/test/configCases/loaders/issue-9053/webpack.config.js +++ b/test/configCases/loaders/issue-9053/webpack.config.js @@ -4,6 +4,10 @@ module.exports = { { test: /c\.js$/, use: ["loader2"] + }, + { + test: /d\.js$/, + use: ["loader3"] } ] } From fec4d536a3b8a6ad94d8ccab8016468822456e7c Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Mon, 1 Jul 2019 09:37:35 +0200 Subject: [PATCH 4/4] only affect loader order when match resource is used --- lib/NormalModuleFactory.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index ed74ac2f938..2c2d34b273d 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -335,7 +335,11 @@ class NormalModuleFactory extends Tapable { ], (err, results) => { if (err) return callback(err); - loaders = results[0].concat(results[1], loaders, results[2]); + if (matchResource === undefined) { + loaders = results[0].concat(loaders, results[1], results[2]); + } else { + loaders = results[0].concat(results[1], loaders, results[2]); + } process.nextTick(() => { const type = settings.type; const resolveOptions = settings.resolve;