diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index f02e5712849..a15ec4fa4ff 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -509,6 +509,11 @@ class NormalModuleFactory extends ModuleFactory { issuerLayer: contextInfo.issuerLayer || "" }); for (const r of result) { + // https://github.com/webpack/webpack/issues/16466 + // if a request exists PrePostAutoLoaders, should disable modifying Rule.type + if (r.type === "type" && noPrePostAutoLoaders) { + continue; + } if (r.type === "use") { if (!noAutoLoaders && !noPrePostAutoLoaders) { useLoaders.push(r.value); diff --git a/test/configCases/rule-set/oneOf/css-loader.js b/test/configCases/rule-set/oneOf/css-loader.js new file mode 100644 index 00000000000..d315e602993 --- /dev/null +++ b/test/configCases/rule-set/oneOf/css-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { + return "module.exports='__css__'" +} \ No newline at end of file diff --git a/test/configCases/rule-set/oneOf/index.css b/test/configCases/rule-set/oneOf/index.css new file mode 100644 index 00000000000..3cf023e854b --- /dev/null +++ b/test/configCases/rule-set/oneOf/index.css @@ -0,0 +1,3 @@ +body { + color: red; +} \ No newline at end of file diff --git a/test/configCases/rule-set/oneOf/index.js b/test/configCases/rule-set/oneOf/index.js new file mode 100644 index 00000000000..8b362b5374e --- /dev/null +++ b/test/configCases/rule-set/oneOf/index.js @@ -0,0 +1,4 @@ +it("should return the content processed by css-loader instead of asset/resource", function () { + var a1 = require("./index.css"); + expect(a1).toEqual("__css__"); +}); diff --git a/test/configCases/rule-set/oneOf/style-loader.js b/test/configCases/rule-set/oneOf/style-loader.js new file mode 100644 index 00000000000..599a4ad615e --- /dev/null +++ b/test/configCases/rule-set/oneOf/style-loader.js @@ -0,0 +1,16 @@ +/** @type {import("../../../../types").LoaderDefinition<{ get(): string }>} */ +module.exports.pitch = function (request) { + return ` + var content = require(${stringifyRequest(this, `!!${request}`)}); + module.exports = content; + ` +}; + +function stringifyRequest(loaderContext, request) { + return JSON.stringify( + loaderContext.utils.contextify( + loaderContext.context || loaderContext.rootContext, + request + ) + ) +} \ No newline at end of file diff --git a/test/configCases/rule-set/oneOf/webpack.config.js b/test/configCases/rule-set/oneOf/webpack.config.js new file mode 100644 index 00000000000..1e19a358be6 --- /dev/null +++ b/test/configCases/rule-set/oneOf/webpack.config.js @@ -0,0 +1,24 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.css$/, + oneOf: [ + { + use: ["./style-loader", "./css-loader"], + issuer: /\.(js)$/ + }, + { + type: "asset/resource", + issuer: /\.(css|scss|sass)$/ + } + ] + } + ] + } +};