Skip to content

Commit 3bba7b2

Browse files
committed
feat: add injectUsedExports option
1 parent 007bb81 commit 3bba7b2

File tree

5 files changed

+40
-42
lines changed

5 files changed

+40
-42
lines changed

crates/rspack_binding_api/src/raw_options/raw_builtins/raw_mf.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ impl From<RawOptimizeSharedConfig> for OptimizeSharedConfig {
219219
#[napi(object)]
220220
pub struct RawOptimizeDependencyReferencedExportsPluginOptions {
221221
pub shared: Vec<RawOptimizeSharedConfig>,
222-
pub ignored_runtime: Option<Vec<String>>,
222+
pub inject_used_exports: Option<bool>,
223223
}
224224

225225
impl From<RawOptimizeDependencyReferencedExportsPluginOptions>
@@ -232,7 +232,7 @@ impl From<RawOptimizeDependencyReferencedExportsPluginOptions>
232232
.into_iter()
233233
.map(|config| config.into())
234234
.collect(),
235-
ignored_runtime: value.ignored_runtime.unwrap_or_default(),
235+
inject_used_exports: value.inject_used_exports.unwrap_or(true),
236236
}
237237
}
238238
}

crates/rspack_plugin_mf/src/sharing/optimize_dependency_referenced_exports_plugin.rs

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub struct OptimizeSharedConfig {
3333
#[derive(Debug, Clone)]
3434
pub struct OptimizeDependencyReferencedExportsPluginOptions {
3535
pub shared: Vec<OptimizeSharedConfig>,
36-
pub ignored_runtime: Vec<String>,
36+
pub inject_used_exports: bool,
3737
}
3838

3939
#[derive(Debug, Clone)]
@@ -45,13 +45,14 @@ struct SharedEntryData {
4545
#[derive(Debug, Clone)]
4646
pub struct OptimizeDependencyReferencedExportsPlugin {
4747
shared_map: FxHashMap<String, SharedEntryData>,
48-
ignored_runtime: FxHashSet<String>,
4948
shared_referenced_exports: Arc<RwLock<FxHashMap<String, FxHashMap<String, FxHashSet<String>>>>>,
49+
inject_used_exports: bool,
5050
}
5151

5252
impl OptimizeDependencyReferencedExportsPlugin {
5353
pub fn new(options: OptimizeDependencyReferencedExportsPluginOptions) -> Self {
5454
let mut shared_map = FxHashMap::default();
55+
let inject_used_exports = options.inject_used_exports.clone();
5556
for config in options.shared.into_iter().filter(|c| c.treeshake) {
5657
let atoms = config
5758
.used_exports
@@ -66,13 +67,12 @@ impl OptimizeDependencyReferencedExportsPlugin {
6667
);
6768
}
6869

69-
let ignored_runtime = options.ignored_runtime.into_iter().collect();
7070
let shared_referenced_exports = Arc::new(RwLock::new(FxHashMap::<
7171
String,
7272
FxHashMap<String, FxHashSet<String>>,
7373
>::default()));
7474

75-
Self::new_inner(shared_map, ignored_runtime, shared_referenced_exports)
75+
Self::new_inner(shared_map, shared_referenced_exports, inject_used_exports)
7676
}
7777

7878
fn apply_custom_exports(&self) {
@@ -267,11 +267,11 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
267267
let exports_info = module_graph_mut.get_exports_info(module_id);
268268
let exports_info_data = exports_info.as_data_mut(&mut module_graph_mut);
269269

270-
for (runtime, exports) in runtime_reference_exports.iter() {
270+
for (_runtime, exports) in runtime_reference_exports.iter() {
271271
for export_name in exports {
272272
let export_atom = Atom::from(export_name.as_str());
273273
if let Some(export_info) = exports_info_data.named_exports_mut(&export_atom) {
274-
let runtime_spec = RuntimeSpec::from_iter([runtime.clone().into()]);
274+
// let runtime_spec = RuntimeSpec::from_iter([runtime.clone().into()]);
275275
// let status =
276276
// export_info.set_used(rspack_core::UsageState::Used, Some(&runtime_spec));
277277
// set used by runtime when set_owned_used_in_unknown_way remove
@@ -304,29 +304,23 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
304304
if can_update_module_used_stage {
305305
// mark used exports for dependencies and blocks dependencies
306306
// create a helper closure to update dependency's export info
307-
runtime_reference_exports
308-
.iter()
309-
.for_each(|(runtime_name, _)| {
310-
let runtime_spec = RuntimeSpec::from_iter([runtime_name.clone().into()]);
311-
for export_info in exports_info_data.exports_mut().values_mut() {
312-
export_info.set_used_conditionally(
313-
Box::new(|used| *used == rspack_core::UsageState::Unknown),
314-
rspack_core::UsageState::Unused,
315-
None,
316-
);
317-
let export_used_status: rspack_core::UsageState =
318-
export_info.get_used(Some(&runtime_spec));
319-
export_info.set_can_mangle_provide(Some(false));
320-
export_info.set_can_mangle_use(Some(false));
321-
}
322-
exports_info_data
323-
.other_exports_info_mut()
324-
.set_used_conditionally(
325-
Box::new(|used| *used == rspack_core::UsageState::Unknown),
326-
rspack_core::UsageState::Unused,
327-
None,
328-
);
329-
});
307+
// set used by runtime when set_owned_used_in_unknown_way remove
308+
for export_info in exports_info_data.exports_mut().values_mut() {
309+
export_info.set_used_conditionally(
310+
Box::new(|used| *used == rspack_core::UsageState::Unknown),
311+
rspack_core::UsageState::Unused,
312+
None,
313+
);
314+
export_info.set_can_mangle_provide(Some(false));
315+
export_info.set_can_mangle_use(Some(false));
316+
}
317+
exports_info_data
318+
.other_exports_info_mut()
319+
.set_used_conditionally(
320+
Box::new(|used| *used == rspack_core::UsageState::Unknown),
321+
rspack_core::UsageState::Unused,
322+
None,
323+
);
330324
}
331325
}
332326
}
@@ -492,10 +486,12 @@ impl Plugin for OptimizeDependencyReferencedExportsPlugin {
492486
.compilation_hooks
493487
.optimize_dependencies
494488
.tap(optimize_dependencies::new(self));
495-
ctx
496-
.compilation_hooks
497-
.additional_tree_runtime_requirements
498-
.tap(additional_tree_runtime_requirements::new(self));
489+
if self.inject_used_exports {
490+
ctx
491+
.compilation_hooks
492+
.additional_tree_runtime_requirements
493+
.tap(additional_tree_runtime_requirements::new(self));
494+
}
499495
Ok(())
500496
}
501497
}

packages/rspack/etc/core.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5373,7 +5373,7 @@ export const optimize: Optimize;
53735373

53745374
// @public (undocumented)
53755375
class OptimizeDependencyReferencedExportsPlugin extends RspackBuiltinPlugin {
5376-
constructor(sharedOptions: [string, SharedConfig][], ignoredRuntime?: string[]);
5376+
constructor(sharedOptions: [string, SharedConfig][], injectUsedExports?: Boolean);
53775377
// (undocumented)
53785378
name: BuiltinPluginName;
53795379
// (undocumented)

packages/rspack/src/sharing/OptimizeDependencyReferencedExportsPlugin.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ type OptimizeSharedConfig = {
1515

1616
type OptimizeDependencyReferencedExportsOptions = {
1717
shared: OptimizeSharedConfig[];
18-
ignoredRuntime: string[];
18+
injectUsedExports?: Boolean;
1919
};
2020

2121
export class OptimizeDependencyReferencedExportsPlugin extends RspackBuiltinPlugin {
2222
name = BuiltinPluginName.OptimizeDependencyReferencedExportsPlugin;
2323
private sharedOptions: [string, SharedConfig][];
24-
private ignoredRuntime: string[];
24+
private injectUsedExports: Boolean;
2525

2626
constructor(
2727
sharedOptions: [string, SharedConfig][],
28-
ignoredRuntime?: string[]
28+
injectUsedExports?: Boolean
2929
) {
3030
super();
3131
this.sharedOptions = sharedOptions;
32-
this.ignoredRuntime = ignoredRuntime ?? [];
32+
this.injectUsedExports = injectUsedExports ?? true;
3333
}
3434

3535
private buildOptions(): OptimizeDependencyReferencedExportsOptions {
@@ -42,7 +42,7 @@ export class OptimizeDependencyReferencedExportsPlugin extends RspackBuiltinPlug
4242
);
4343
return {
4444
shared,
45-
ignoredRuntime: this.ignoredRuntime
45+
injectUsedExports: this.injectUsedExports
4646
};
4747
}
4848

tests/rspack-test/configCases/sharing/treeshake-share/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ it("should generate share container bundle with expected content", async () => {
1111
);
1212
const bundleContent = fs.readFileSync(bundlePath, "utf-8");
1313
expect(bundleContent).toContain("Button");
14+
expect(bundleContent).not.toContain("List");
1415
// add extra usedExports by maunally
1516
expect(bundleContent).toContain("Badge");
16-
expect(bundleContent).not.toContain("List");
17+
18+
expect(__webpack_require__.federation.usedExports['ui-lib']['main'].sort()).toEqual([ 'Badge', 'Button' ])
1719
});

0 commit comments

Comments
 (0)