Skip to content

Commit 0eb6697

Browse files
authored
WIP: fix(dts-plugin): add dynamic-remote-type-hints-plugin to runtimePlugins if not disable (#3758)
1 parent 04d3064 commit 0eb6697

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

.changeset/quiet-bottles-unite.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@module-federation/dts-plugin': patch
3+
'@module-federation/enhanced': patch
4+
'@module-federation/rspack': patch
5+
---
6+
7+
fix(dts-plugin): add dynamic-remote-type-hints-plugin to runtimePlugins if not disable

packages/dts-plugin/src/plugins/DtsPlugin.ts

+18-4
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ export const normalizeDtsOptions = (
3737

3838
export class DtsPlugin implements WebpackPluginInstance {
3939
options: moduleFederationPlugin.ModuleFederationPluginOptions;
40+
clonedOptions: moduleFederationPlugin.ModuleFederationPluginOptions;
4041
constructor(options: moduleFederationPlugin.ModuleFederationPluginOptions) {
4142
this.options = options;
43+
// Create a shallow clone of the options object to avoid mutating the original
44+
this.clonedOptions = { ...options };
4245
}
4346

4447
apply(compiler: Compiler) {
45-
const { options } = this;
46-
47-
// Create a shallow clone of the options object to avoid mutating the original
48-
const clonedOptions = { ...options };
48+
const { options, clonedOptions } = this;
4949

5050
// Clean up query parameters in exposes paths without mutating original
5151
if (options.exposes && typeof options.exposes === 'object') {
@@ -106,4 +106,18 @@ export class DtsPlugin implements WebpackPluginInstance {
106106
fetchRemoteTypeUrlsResolve,
107107
).apply(compiler);
108108
}
109+
110+
addRuntimePlugins() {
111+
const { options, clonedOptions } = this;
112+
if (!clonedOptions.runtimePlugins) {
113+
return;
114+
}
115+
if (!options.runtimePlugins) {
116+
options.runtimePlugins = [];
117+
}
118+
clonedOptions.runtimePlugins.forEach((plugin) => {
119+
options.runtimePlugins.includes(plugin) ||
120+
options.runtimePlugins.push(plugin);
121+
});
122+
}
109123
}

packages/enhanced/src/lib/container/ModuleFederationPlugin.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ class ModuleFederationPlugin implements WebpackPluginInstance {
114114
}
115115

116116
if (options.dts !== false) {
117-
new DtsPlugin(options).apply(compiler);
117+
const dtsPlugin = new DtsPlugin(options);
118+
dtsPlugin.apply(compiler);
119+
dtsPlugin.addRuntimePlugins();
118120
}
119121
if (options.dataPrefetch) {
120122
new PrefetchPlugin(options).apply(compiler);

packages/rspack/src/ModuleFederationPlugin.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ export class ModuleFederationPlugin implements RspackPluginInstance {
114114
let disableDts = options.dts === false;
115115

116116
if (!disableDts) {
117+
const dtsPlugin = new DtsPlugin(options);
117118
// @ts-ignore
118-
new DtsPlugin(options).apply(compiler);
119+
dtsPlugin.apply(compiler);
120+
dtsPlugin.addRuntimePlugins();
119121
}
120122
if (!disableManifest && options.exposes) {
121123
try {

0 commit comments

Comments
 (0)