diff --git a/lib/css/CssParser.js b/lib/css/CssParser.js index b4a92116b..87bf9e79e 100644 --- a/lib/css/CssParser.js +++ b/lib/css/CssParser.js @@ -1030,6 +1030,11 @@ class CssParser extends Parser { module.buildInfo.strict = true; module.buildMeta.exportsType = this.namedExports ? "namespace" : "default"; + + if (!this.namedExports) { + module.buildMeta.defaultObject = "redirect"; + } + module.addDependency(new StaticExportsDependency([], true)); return state; } diff --git a/test/configCases/css/default-exports-parser-options/index.js b/test/configCases/css/default-exports-parser-options/index.js new file mode 100644 index 000000000..033c4b52e --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/index.js @@ -0,0 +1,19 @@ +import * as style1 from "./style.module.css?namespace"; +import style2 from "./style.module.css?default"; +import { foo } from "./style.module.css?named"; + +it("should able to import with default and named exports", () => { + expect(style1.default).toEqual(nsObj({ foo: '-_style_module_css_namespace-foo' })); + expect(style1.foo).toEqual("-_style_module_css_namespace-foo"); + expect(style2).toEqual(nsObj({ foo: '-_style_module_css_default-foo' })); + expect(foo).toEqual("-_style_module_css_named-foo"); +}); + +it("should able to import with different default and namex dynamic export", (done) => { + import("./style.module.css?namespace").then((style1) => { + expect(style1.default).toEqual(nsObj({ foo: '-_style_module_css_namespace-foo' })); + expect(style1.foo).toEqual('-_style_module_css_namespace-foo'); + + done(); + }, done) +}); diff --git a/test/configCases/css/default-exports-parser-options/style.module.css b/test/configCases/css/default-exports-parser-options/style.module.css new file mode 100644 index 000000000..cedf0a6d1 --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/style.module.css @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/default-exports-parser-options/webpack.config.js b/test/configCases/css/default-exports-parser-options/webpack.config.js new file mode 100644 index 000000000..b7d7852b0 --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/webpack.config.js @@ -0,0 +1,20 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + devtool: false, + module: { + rules: [ + { + test: /\.css/, + parser: { + namedExports: false + }, + type: "css/module" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/named-exports-parser-options/index.js b/test/configCases/css/named-exports-parser-options/index.js index de682299d..ae9c150bb 100644 --- a/test/configCases/css/named-exports-parser-options/index.js +++ b/test/configCases/css/named-exports-parser-options/index.js @@ -15,7 +15,10 @@ it("should able to import with different namedExports (async)", (done) => { import("./style.module.css?named"), ]).then(([style1, style2, style3]) => { expect(style1).toEqual(nsObj({ class: '-_style_module_css-class' })); - expect(style2).toEqual(nsObj({ default: nsObj({ class: '-_style_module_css_default-class' }) })); + expect(style2).toEqual(nsObj({ + class: "-_style_module_css_default-class", + default: nsObj({ class: '-_style_module_css_default-class' }) + })); expect(style3).toEqual(nsObj({ class: '-_style_module_css_named-class' })); done() }, done)