From 9b63f0a327de32f94a01cb31a850e979ab3d00f5 Mon Sep 17 00:00:00 2001 From: hardfist Date: Tue, 11 Feb 2025 19:24:43 +0800 Subject: [PATCH 1/4] fix(core): fix module external not treated as async --- crates/rspack_core/src/external_module.rs | 5 ++++- crates/rspack_core/src/module.rs | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/rspack_core/src/external_module.rs b/crates/rspack_core/src/external_module.rs index 5581182baca8..809c49fbf2a0 100644 --- a/crates/rspack_core/src/external_module.rs +++ b/crates/rspack_core/src/external_module.rs @@ -542,7 +542,10 @@ impl Module for ExternalModule { match resolved_external_type { "this" => self.build_info.strict = false, "system" => self.build_meta.exports_type = BuildMetaExportsType::Namespace, - "module" => self.build_meta.exports_type = BuildMetaExportsType::Namespace, + "module" => { + self.build_meta.exports_type = BuildMetaExportsType::Namespace; + self.build_meta.has_top_level_await = true; + } "script" | "promise" => self.build_meta.has_top_level_await = true, "import" => { self.build_meta.has_top_level_await = true; diff --git a/crates/rspack_core/src/module.rs b/crates/rspack_core/src/module.rs index 65dd19282d0b..4163024b0078 100644 --- a/crates/rspack_core/src/module.rs +++ b/crates/rspack_core/src/module.rs @@ -168,6 +168,7 @@ impl Display for ExportsArgument { #[serde(rename_all = "camelCase")] pub struct BuildMeta { pub strict_esm_module: bool, + // same as is_async https://github.com/webpack/webpack/blob/3919c844eca394d73ca930e4fc5506fb86e2b094/lib/Module.js#L107 pub has_top_level_await: bool, pub esm: bool, pub exports_type: BuildMetaExportsType, From 41f379cba2ae4fd399c1af2e40338687dab72cc4 Mon Sep 17 00:00:00 2001 From: hardfist Date: Tue, 11 Feb 2025 20:22:50 +0800 Subject: [PATCH 2/4] fix: enable async only when module is false --- crates/rspack_core/src/external_module.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/rspack_core/src/external_module.rs b/crates/rspack_core/src/external_module.rs index 809c49fbf2a0..3cb63b2f5e4d 100644 --- a/crates/rspack_core/src/external_module.rs +++ b/crates/rspack_core/src/external_module.rs @@ -533,8 +533,8 @@ impl Module for ExternalModule { async fn build( &mut self, - _build_context: BuildContext, - _: Option<&Compilation>, + build_context: BuildContext, + options: Option<&Compilation>, ) -> Result { let resolved_external_type = self.resolve_external_type(); @@ -544,7 +544,10 @@ impl Module for ExternalModule { "system" => self.build_meta.exports_type = BuildMetaExportsType::Namespace, "module" => { self.build_meta.exports_type = BuildMetaExportsType::Namespace; - self.build_meta.has_top_level_await = true; + + if !build_context.compiler_options.output.module { + self.build_meta.has_top_level_await = true; + } } "script" | "promise" => self.build_meta.has_top_level_await = true, "import" => { From e165e096b7b177ffb790cf705e0939036d0ca5ff Mon Sep 17 00:00:00 2001 From: hardfist Date: Wed, 12 Feb 2025 10:40:13 +0800 Subject: [PATCH 3/4] chore: fix clippy --- crates/rspack_core/src/external_module.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rspack_core/src/external_module.rs b/crates/rspack_core/src/external_module.rs index 3cb63b2f5e4d..3ee206decc0f 100644 --- a/crates/rspack_core/src/external_module.rs +++ b/crates/rspack_core/src/external_module.rs @@ -534,7 +534,7 @@ impl Module for ExternalModule { async fn build( &mut self, build_context: BuildContext, - options: Option<&Compilation>, + _: Option<&Compilation>, ) -> Result { let resolved_external_type = self.resolve_external_type(); From 051fe79d0bfdde064927147166153222f5184e12 Mon Sep 17 00:00:00 2001 From: hardfist Date: Wed, 12 Feb 2025 10:49:07 +0800 Subject: [PATCH 4/4] reafctor: align build_info.module --- crates/rspack_core/src/external_module.rs | 5 +++-- crates/rspack_core/src/module.rs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/rspack_core/src/external_module.rs b/crates/rspack_core/src/external_module.rs index 3ee206decc0f..0b4732e1bbe7 100644 --- a/crates/rspack_core/src/external_module.rs +++ b/crates/rspack_core/src/external_module.rs @@ -536,6 +536,7 @@ impl Module for ExternalModule { build_context: BuildContext, _: Option<&Compilation>, ) -> Result { + self.build_info.module = build_context.compiler_options.output.module; let resolved_external_type = self.resolve_external_type(); // TODO add exports_type for request @@ -544,8 +545,8 @@ impl Module for ExternalModule { "system" => self.build_meta.exports_type = BuildMetaExportsType::Namespace, "module" => { self.build_meta.exports_type = BuildMetaExportsType::Namespace; - - if !build_context.compiler_options.output.module { + // align with https://github.com/webpack/webpack/blob/3919c844eca394d73ca930e4fc5506fb86e2b094/lib/ExternalModule.js#L597 + if !self.build_info.module { self.build_meta.has_top_level_await = true; } } diff --git a/crates/rspack_core/src/module.rs b/crates/rspack_core/src/module.rs index 4163024b0078..36f81d9a02f5 100644 --- a/crates/rspack_core/src/module.rs +++ b/crates/rspack_core/src/module.rs @@ -68,6 +68,7 @@ pub struct BuildInfo { pub top_level_declarations: Option>, pub module_concatenation_bailout: Option, pub assets: HashMap, + pub module: bool, } impl Default for BuildInfo { @@ -87,6 +88,7 @@ impl Default for BuildInfo { top_level_declarations: None, module_concatenation_bailout: None, assets: Default::default(), + module: false, } } }