Skip to content

Commit

Permalink
fix: generate code correctly for dynamically importing the same file (w…
Browse files Browse the repository at this point in the history
  • Loading branch information
inottn authored Oct 14, 2024
1 parent af9acfd commit 69e3bc3
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 7 deletions.
9 changes: 5 additions & 4 deletions crates/rspack_core/src/context_module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1102,12 +1102,13 @@ fn create_identifier(options: &ContextModuleOptions) -> Identifier {
}
id += "|groupOptions: {";
if let Some(o) = group.prefetch_order {
id += "prefetchOrder: ";
id += &o.to_string();
id.push_str(&format!("prefetchOrder: {},", o));
}
if let Some(o) = group.preload_order {
id += "preloadOrder: ";
id += &o.to_string();
id.push_str(&format!("preloadOrder: {},", o));
}
if let Some(o) = group.fetch_priority {
id.push_str(&format!("fetchPriority: {},", o));
}
id += "}";
}
Expand Down
30 changes: 27 additions & 3 deletions crates/rspack_plugin_javascript/src/dependency/context/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ mod require_resolve_context_dependency;
pub use common_js_require_context_dependency::CommonJsRequireContextDependency;
pub use import_context_dependency::ImportContextDependency;
pub use import_meta_context_dependency::ImportMetaContextDependency;
use itertools::Itertools;
pub use require_context_dependency::RequireContextDependency;
pub use require_resolve_context_dependency::RequireResolveContextDependency;
use rspack_core::{
module_raw, ContextDependency, ContextMode, ContextOptions, RealDependencyLocation,
module_raw, ContextDependency, ContextMode, ContextOptions, GroupOptions, RealDependencyLocation,
TemplateContext, TemplateReplaceSource,
};

Expand All @@ -37,9 +38,32 @@ fn create_resource_identifier_for_context_dependency(
.map(|x| x.to_source_string())
.unwrap_or_default();
let mode = options.mode.as_str();
// TODO: need `RawChunkGroupOptions`
let referenced_exports = options
.referenced_exports
.as_ref()
.map(|x| x.iter().map(|x| format!(r#""{x}""#)).join(","))
.unwrap_or_default();
let mut group_options = String::new();

if let Some(GroupOptions::ChunkGroup(group)) = &options.group_options {
if let Some(chunk_name) = &group.name {
group_options += chunk_name;
}
group_options += " {";
if let Some(o) = group.prefetch_order {
group_options.push_str(&format!("prefetchOrder: {},", o));
}
if let Some(o) = group.preload_order {
group_options.push_str(&format!("preloadOrder: {},", o));
}
if let Some(o) = group.fetch_priority {
group_options.push_str(&format!("fetchPriority: {},", o));
}
group_options += "}";
}

let id = format!(
"context{context}|ctx request{request} {recursive} `{regexp} {include} {exclude} ``{mode} `"
"context{context}|ctx request{request} {recursive} {regexp} {include} {exclude} {mode} {group_options} {referenced_exports}"
);
id
}
Expand Down
9 changes: 9 additions & 0 deletions tests/webpack-test/cases/context/issue-18752/folder/file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export function generateSummary() {
return 1;
}
export function entityActionQueue() {
return 2;
}
export function bar() {
return 3;
}
18 changes: 18 additions & 0 deletions tests/webpack-test/cases/context/issue-18752/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
it("should work with importing the same file twice and destructuring", async () => {
const type = "file";
const { generateSummary } = await import(
/* webpackInclude: /[/\\]folder[/\\](?!.*\.test).*\.m?js$/ */
/* webpackChunkName: "chunk-name" */
/* webpackMode: "lazy-once" */
`./folder/${type}.js`
);
expect(typeof generateSummary).toBe("function");

const { entityActionQueue } = await import(
/* webpackInclude: /[/\\]folder[/\\](?!.*\.test).*\.m?js$/ */
/* webpackChunkName: "chunk-name" */
/* webpackMode: "lazy-once" */
`./folder/${type}.js`
);
expect(typeof entityActionQueue).toBe("function");
});

0 comments on commit 69e3bc3

Please sign in to comment.