diff --git a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs index 1777cc7c9d5..7661f314806 100644 --- a/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs +++ b/crates/rspack_plugin_javascript/src/dependency/esm/harmony_export_imported_specifier_dependency.rs @@ -230,6 +230,7 @@ impl HarmonyExportImportedSpecifierDependency { ); // dbg!( // self.request(), + // &ignored_exports, // &exports, // &imported_module_identifier, // &checked, @@ -526,7 +527,7 @@ impl HarmonyExportImportedSpecifierDependency { let init_fragment = self .get_reexport_fragment( ctxt, - "reexport default from dynamic".to_string(), + "reexport default from dynamic", key, &import_var, ValueKey::Null, @@ -544,7 +545,7 @@ impl HarmonyExportImportedSpecifierDependency { let init_fragment = self .get_reexport_fragment( ctxt, - "reexport default export from named module".to_string(), + "reexport default export from named module", key, &import_var, ValueKey::Str("".into()), @@ -563,7 +564,7 @@ impl HarmonyExportImportedSpecifierDependency { let init_fragment = self .get_reexport_fragment( ctxt, - "reexport module object".to_string(), + "reexport module object", key, &import_var, ValueKey::Str("".into()), @@ -592,7 +593,7 @@ impl HarmonyExportImportedSpecifierDependency { let init_fragment = self .get_reexport_fragment( ctxt, - "reexport non-default export from non-harmony".to_string(), + "reexport non-default export from non-harmony", key, "undefined", ValueKey::Str("".into()), @@ -650,13 +651,7 @@ impl HarmonyExportImportedSpecifierDependency { .id .get_used_name(mg, None, UsedName::Vec(ids)); let init_fragment = self - .get_reexport_fragment( - ctxt, - "reexport safe".to_string(), - key, - &import_var, - used_name.into(), - ) + .get_reexport_fragment(ctxt, "reexport safe", key, &import_var, used_name.into()) .boxed(); fragments.push(init_fragment); } @@ -725,7 +720,7 @@ impl HarmonyExportImportedSpecifierDependency { fn get_reexport_fragment( &self, ctxt: &mut TemplateContext, - comment: String, + comment: &str, key: String, name: &str, value_key: ValueKey, diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/harmony_export_dependency_parser_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/harmony_export_dependency_parser_plugin.rs index e0bc04b6a9a..093f9599d7f 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/harmony_export_dependency_parser_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/harmony_export_dependency_parser_plugin.rs @@ -418,6 +418,10 @@ impl JavascriptParserPlugin for HarmonyExportDependencyParserPlugin { parser.javascript_options, ), ))); + parser + .build_info + .harmony_named_exports + .insert(export.clone()); } else { parser .dependencies diff --git a/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/a.js b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/a.js new file mode 100644 index 00000000000..6de86a5cd6a --- /dev/null +++ b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/a.js @@ -0,0 +1,2 @@ +export const A = '1'; +export const A2 = '2'; \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/b.js b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/b.js new file mode 100644 index 00000000000..be5c6b9e1c8 --- /dev/null +++ b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/b.js @@ -0,0 +1,4 @@ +import { A } from './a.js' +export { A }; + +export * from './a.js' \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/index.js b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/index.js new file mode 100644 index 00000000000..108826b5c49 --- /dev/null +++ b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/index.js @@ -0,0 +1,7 @@ +import fs from 'fs'; +import { A } from './b.js'; +it("should not generate duplicated harmony exports when using named exports and named exports from", () => { + A; + let file = fs.readFileSync(__filename, "utf-8") + expect(file.split(`A: function() { return /* reexport safe */`)).toHaveLength(3) +}) diff --git a/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/rspack.config.js b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/rspack.config.js new file mode 100644 index 00000000000..f1afd4c151e --- /dev/null +++ b/packages/rspack-test-tools/tests/configCases/parsing/rspack-issue-6934/rspack.config.js @@ -0,0 +1,3 @@ +module.exports = { + mode: "development" +}