diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index 49c1dbd8058..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(loaders, results[1], 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; diff --git a/test/configCases/loaders/issue-9053/b.js b/test/configCases/loaders/issue-9053/b.js new file mode 100644 index 00000000000..af9f2fcd0e6 --- /dev/null +++ b/test/configCases/loaders/issue-9053/b.js @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..0ab03f53784 --- /dev/null +++ b/test/configCases/loaders/issue-9053/index.js @@ -0,0 +1,17 @@ +it("should apply inline loaders before matchResource", function() { + var foo = require("c.js!=!loader1!./b.js"); + + 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 new file mode 100644 index 00000000000..ff626a75267 --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader1.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + 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 new file mode 100644 index 00000000000..4529e002f8b --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader2.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + 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 new file mode 100644 index 00000000000..b77f86881e4 --- /dev/null +++ b/test/configCases/loaders/issue-9053/webpack.config.js @@ -0,0 +1,14 @@ +module.exports = { + module: { + rules: [ + { + test: /c\.js$/, + use: ["loader2"] + }, + { + test: /d\.js$/, + use: ["loader3"] + } + ] + } +};