@module-federation/bridge-vue3 0.0.0-next-20241010040057 → 0.0.0-next-20241010084324
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -20
- package/dist/index.cjs.js +59 -3
- package/dist/index.es.js +2397 -86
- package/package.json +4 -3
- package/project.json +2 -2
- package/src/create.ts +1 -1
- package/src/lifecycle.ts +29 -0
- package/src/provider.ts +2 -0
- package/src/remoteApp.tsx +18 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/bridge-vue3",
|
|
3
3
|
"author": "zhouxiao <codingzx@gmail.com>",
|
|
4
|
-
"version": "0.0.0-next-
|
|
4
|
+
"version": "0.0.0-next-20241010084324",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -23,10 +23,11 @@
|
|
|
23
23
|
],
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"vue": "=3",
|
|
26
|
-
"vue-router": "=3"
|
|
26
|
+
"vue-router": "=3",
|
|
27
|
+
"@module-federation/runtime": "0.0.0-next-20241010084324"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
|
-
"@module-federation/bridge-shared": "0.0.0-next-
|
|
30
|
+
"@module-federation/bridge-shared": "0.0.0-next-20241010084324"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@vitejs/plugin-vue": "^5.0.4",
|
package/project.json
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
4
|
"sourceRoot": "packages/bridge/vue3-bridge/src",
|
|
5
5
|
"projectType": "library",
|
|
6
|
-
"tags": ["type:pkg"],
|
|
7
6
|
"targets": {
|
|
8
7
|
"build": {
|
|
9
8
|
"executor": "nx:run-commands",
|
|
@@ -11,5 +10,6 @@
|
|
|
11
10
|
"commands": ["npm run build --prefix packages/bridge/vue3-bridge"]
|
|
12
11
|
}
|
|
13
12
|
}
|
|
14
|
-
}
|
|
13
|
+
},
|
|
14
|
+
"tags": ["type:pkg"]
|
|
15
15
|
}
|
package/src/create.ts
CHANGED
package/src/lifecycle.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getInstance } from '@module-federation/runtime';
|
|
2
|
+
import helper from '@module-federation/runtime/helpers';
|
|
3
|
+
|
|
4
|
+
function registerBridgeLifeCycle() {
|
|
5
|
+
const { registerPlugins, pluginHelper } = helper.global;
|
|
6
|
+
const host = getInstance();
|
|
7
|
+
const pluginSystem = new pluginHelper.PluginSystem({
|
|
8
|
+
beforeBridgeRender: new pluginHelper.SyncHook<
|
|
9
|
+
[Record<string, any>],
|
|
10
|
+
void
|
|
11
|
+
>(),
|
|
12
|
+
beforeBridgeDestroy: new pluginHelper.SyncHook<
|
|
13
|
+
[Record<string, any>],
|
|
14
|
+
void
|
|
15
|
+
>(),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
if (host) {
|
|
19
|
+
registerPlugins<typeof pluginSystem.lifecycle, typeof pluginSystem>(
|
|
20
|
+
host?.options?.plugins,
|
|
21
|
+
[pluginSystem],
|
|
22
|
+
);
|
|
23
|
+
return pluginSystem;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { registerBridgeLifeCycle };
|
package/src/provider.ts
CHANGED
|
@@ -14,6 +14,7 @@ export function createBridgeComponent(bridgeInfo: any) {
|
|
|
14
14
|
LoggerInstance.log(`createBridgeComponent render Info`, info);
|
|
15
15
|
const app = Vue.createApp(bridgeInfo.rootComponent);
|
|
16
16
|
rootMap.set(info.dom, app);
|
|
17
|
+
bridgeInfo?.renderLifecycle?.(info);
|
|
17
18
|
const appOptions = bridgeInfo.appOptions({
|
|
18
19
|
basename: info.basename,
|
|
19
20
|
memoryRoute: info.memoryRoute,
|
|
@@ -46,6 +47,7 @@ export function createBridgeComponent(bridgeInfo: any) {
|
|
|
46
47
|
destroy(info: { dom: HTMLElement }) {
|
|
47
48
|
LoggerInstance.log(`createBridgeComponent destroy Info`, info);
|
|
48
49
|
const root = rootMap.get(info?.dom);
|
|
50
|
+
bridgeInfo?.destroyLifecycle?.(info);
|
|
49
51
|
root?.unmount();
|
|
50
52
|
},
|
|
51
53
|
};
|
package/src/remoteApp.tsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ref, onMounted, onBeforeUnmount, watch, defineComponent } from 'vue';
|
|
2
|
+
import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
|
|
2
3
|
import { useRoute } from 'vue-router';
|
|
4
|
+
import { registerBridgeLifeCycle } from './lifecycle';
|
|
3
5
|
import { LoggerInstance } from './utils';
|
|
4
|
-
import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
|
|
5
6
|
|
|
6
7
|
export default defineComponent({
|
|
7
8
|
name: 'RemoteApp',
|
|
@@ -16,6 +17,7 @@ export default defineComponent({
|
|
|
16
17
|
const providerInfoRef = ref(null);
|
|
17
18
|
const pathname = ref('');
|
|
18
19
|
const route = useRoute();
|
|
20
|
+
const bridgeHook = registerBridgeLifeCycle();
|
|
19
21
|
|
|
20
22
|
const renderComponent = () => {
|
|
21
23
|
const providerReturn = props.providerInfo?.();
|
|
@@ -30,6 +32,12 @@ export default defineComponent({
|
|
|
30
32
|
`createRemoteComponent LazyComponent render >>>`,
|
|
31
33
|
renderProps,
|
|
32
34
|
);
|
|
35
|
+
|
|
36
|
+
if (bridgeHook && bridgeHook?.lifecycle?.beforeBridgeRender) {
|
|
37
|
+
bridgeHook?.lifecycle?.beforeBridgeRender.emit({
|
|
38
|
+
...renderProps,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
33
41
|
providerReturn.render(renderProps);
|
|
34
42
|
};
|
|
35
43
|
|
|
@@ -61,6 +69,15 @@ export default defineComponent({
|
|
|
61
69
|
...props,
|
|
62
70
|
});
|
|
63
71
|
watchStopHandle();
|
|
72
|
+
if (bridgeHook && bridgeHook?.lifecycle?.beforeBridgeRender) {
|
|
73
|
+
bridgeHook?.lifecycle?.beforeBridgeDestroy.emit({
|
|
74
|
+
name: props.moduleName,
|
|
75
|
+
dom: rootRef.value,
|
|
76
|
+
basename: props.basename,
|
|
77
|
+
memoryRoute: props.memoryRoute,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
64
81
|
(providerInfoRef.value as any)?.destroy({ dom: rootRef.value });
|
|
65
82
|
});
|
|
66
83
|
|