Skip to content

Commit 08740a0

Browse files
authored
fix: should use userOptions.shared to apply hooks (#2476)
1 parent d259a37 commit 08740a0

File tree

4 files changed

+50
-41
lines changed

4 files changed

+50
-41
lines changed

.changeset/forty-olives-hammer.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@module-federation/runtime': patch
3+
---
4+
5+
fix: should use userOptions.shared to apply hooks

packages/runtime/src/core.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { DEFAULT_SCOPE } from './constant';
2828
import { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';
2929
import { SharedHandler } from './shared';
3030
import { RemoteHandler } from './remote';
31+
import { formatShareConfigs } from './utils/share';
3132

3233
export class FederationHost {
3334
options: Options;
@@ -210,10 +211,7 @@ export class FederationHost {
210211
globalOptions: Options,
211212
userOptions: UserOptions,
212213
): Options {
213-
const { shared, shareInfos } = this.sharedHandler.formatShareConfigs(
214-
globalOptions,
215-
userOptions,
216-
);
214+
const { shared } = formatShareConfigs(globalOptions, userOptions);
217215
const { userOptions: userOptionsRes, options: globalOptionsRes } =
218216
this.hooks.lifecycle.beforeInit.emit({
219217
origin: this,
@@ -227,7 +225,10 @@ export class FederationHost {
227225
userOptionsRes,
228226
);
229227

230-
this.sharedHandler.registerShared(shareInfos, userOptions);
228+
const { shared: handledShared } = this.sharedHandler.registerShared(
229+
globalOptionsRes,
230+
userOptionsRes,
231+
);
231232

232233
const plugins = [...globalOptionsRes.plugins];
233234

@@ -244,7 +245,7 @@ export class FederationHost {
244245
...userOptions,
245246
plugins,
246247
remotes,
247-
shared,
248+
shared: handledShared,
248249
};
249250

250251
this.hooks.lifecycle.init.emit({

packages/runtime/src/shared/index.ts

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -59,36 +59,13 @@ export class SharedHandler {
5959
this._setGlobalShareScopeMap(host.options);
6060
}
6161

62-
formatShareConfigs(globalOptions: Options, userOptions: UserOptions) {
63-
const shareInfos = formatShareConfigs(
64-
userOptions.shared || {},
65-
userOptions.name,
62+
// register shared in shareScopeMap
63+
registerShared(globalOptions: Options, userOptions: UserOptions) {
64+
const { shareInfos, shared } = formatShareConfigs(
65+
globalOptions,
66+
userOptions,
6667
);
6768

68-
const shared = {
69-
...globalOptions.shared,
70-
};
71-
72-
Object.keys(shareInfos).forEach((shareKey) => {
73-
if (!shared[shareKey]) {
74-
shared[shareKey] = shareInfos[shareKey];
75-
} else {
76-
shareInfos[shareKey].forEach((newUserSharedOptions) => {
77-
const isSameVersion = shared[shareKey].find(
78-
(sharedVal) => sharedVal.version === newUserSharedOptions.version,
79-
);
80-
if (!isSameVersion) {
81-
shared[shareKey].push(newUserSharedOptions);
82-
}
83-
});
84-
}
85-
});
86-
87-
return { shared, shareInfos };
88-
}
89-
90-
// register shared in shareScopeMap
91-
registerShared(shareInfos: ShareInfos, userOptions: UserOptions) {
9269
const sharedKeys = Object.keys(shareInfos);
9370
sharedKeys.forEach((sharedKey) => {
9471
const sharedVals = shareInfos[sharedKey];
@@ -111,6 +88,11 @@ export class SharedHandler {
11188
}
11289
});
11390
});
91+
92+
return {
93+
shareInfos,
94+
shared,
95+
};
11496
}
11597

11698
async loadShare<T>(

packages/runtime/src/utils/share.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
ShareScopeMap,
99
LoadShareExtraOptions,
1010
UserOptions,
11+
Options,
1112
} from '../type';
1213
import { warn, error } from './logger';
1314
import { satisfy } from './semver';
@@ -55,20 +56,40 @@ export function formatShare(
5556
}
5657

5758
export function formatShareConfigs(
58-
shareArgs: UserOptions['shared'],
59-
from: string,
60-
): ShareInfos {
61-
if (!shareArgs) {
62-
return {};
63-
}
64-
return Object.keys(shareArgs).reduce((res, pkgName) => {
59+
globalOptions: Options,
60+
userOptions: UserOptions,
61+
) {
62+
const shareArgs = userOptions.shared || {};
63+
const from = userOptions.name;
64+
65+
const shareInfos = Object.keys(shareArgs).reduce((res, pkgName) => {
6566
const arrayShareArgs = arrayOptions(shareArgs[pkgName]);
6667
res[pkgName] = res[pkgName] || [];
6768
arrayShareArgs.forEach((shareConfig) => {
6869
res[pkgName].push(formatShare(shareConfig, from, pkgName));
6970
});
7071
return res;
7172
}, {} as ShareInfos);
73+
74+
const shared = {
75+
...globalOptions.shared,
76+
};
77+
78+
Object.keys(shareInfos).forEach((shareKey) => {
79+
if (!shared[shareKey]) {
80+
shared[shareKey] = shareInfos[shareKey];
81+
} else {
82+
shareInfos[shareKey].forEach((newUserSharedOptions) => {
83+
const isSameVersion = shared[shareKey].find(
84+
(sharedVal) => sharedVal.version === newUserSharedOptions.version,
85+
);
86+
if (!isSameVersion) {
87+
shared[shareKey].push(newUserSharedOptions);
88+
}
89+
});
90+
}
91+
});
92+
return { shared, shareInfos };
7293
}
7394

7495
export function versionLt(a: string, b: string): boolean {

0 commit comments

Comments
 (0)