From e0a16d95c88f011b934f583d7bbff6965d017fc6 Mon Sep 17 00:00:00 2001 From: xuhongbin Date: Thu, 11 Sep 2025 11:59:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(module-federation):=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=BF=90=E8=A1=8C=E6=97=B6=E9=85=8D=E7=BD=AE=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96EMP=E8=BF=90=E8=A1=8C=E6=97=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构EMP运行时模块,使用@module-federation/runtime作为基础 更新node引擎要求至18.x 优化EMP运行时实例管理,改为使用createInstance 调整tsup配置和package.json依赖顺序 --- package.json | 2 +- packages/emp-module-federation/package.json | 8 +-- packages/emp-module-federation/src/runtime.ts | 1 + packages/emp-module-federation/tsup.config.ts | 2 +- packages/emp-share/package.json | 4 +- packages/emp-share/src/runtime/index-bakup.ts | 57 +++++++++++++++++++ packages/emp-share/src/runtime/index.ts | 29 ++++++---- pnpm-lock.yaml | 3 + projects/mf-host/emp.config.ts | 2 +- projects/mf-host/src/App.tsx | 2 +- 10 files changed, 88 insertions(+), 22 deletions(-) create mode 100644 packages/emp-module-federation/src/runtime.ts create mode 100644 packages/emp-share/src/runtime/index-bakup.ts diff --git a/package.json b/package.json index 7b381523..1c1a332e 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "biome": "biome" }, "engines": { - "node": ">=16.0.0", + "node": ">=18.0.0", "pnpm": ">=8" }, "devDependencies": { diff --git a/packages/emp-module-federation/package.json b/packages/emp-module-federation/package.json index 62f6df70..eeacfb67 100644 --- a/packages/emp-module-federation/package.json +++ b/packages/emp-module-federation/package.json @@ -1,6 +1,6 @@ { "name": "@empjs/module-federation", - "version": "0.18.4-1", + "version": "0.18.4-2", "description": "emp module-federation", "license": "MIT", "type": "module", @@ -67,11 +67,11 @@ "node": ">=16.0.0" }, "author": "Ken", - "devDependencies": {}, "dependencies": { - "@module-federation/sdk": "0.18.4", "@module-federation/error-codes": "0.18.4", + "@module-federation/rspack": "0.18.4", + "@module-federation/runtime": "^0.18.4", "@module-federation/runtime-core": "0.18.4", - "@module-federation/rspack": "0.18.4" + "@module-federation/sdk": "0.18.4" } } diff --git a/packages/emp-module-federation/src/runtime.ts b/packages/emp-module-federation/src/runtime.ts new file mode 100644 index 00000000..c260dd6b --- /dev/null +++ b/packages/emp-module-federation/src/runtime.ts @@ -0,0 +1 @@ +export * from '@module-federation/runtime' diff --git a/packages/emp-module-federation/tsup.config.ts b/packages/emp-module-federation/tsup.config.ts index 14c72afc..cff74043 100644 --- a/packages/emp-module-federation/tsup.config.ts +++ b/packages/emp-module-federation/tsup.config.ts @@ -5,7 +5,7 @@ export default defineConfig(({watch}) => { return { // entry: ['src/runtime/index.ts', 'src/sdk.ts', 'src/rspack.ts'], entry: { - runtime: 'src/runtime/index.ts', + runtime: 'src/runtime.ts', sdk: 'src/sdk.ts', rspack: 'src/rspack.ts', }, diff --git a/packages/emp-share/package.json b/packages/emp-share/package.json index 07861206..85e8bc12 100644 --- a/packages/emp-share/package.json +++ b/packages/emp-share/package.json @@ -95,8 +95,8 @@ }, "author": "Ken", "dependencies": { - "core-js": "^3.45.1", - "@empjs/module-federation": "workspace:*" + "@empjs/module-federation": "workspace:*", + "core-js": "^3.45.1" }, "devDependencies": { "@empjs/cli": "workspace:*", diff --git a/packages/emp-share/src/runtime/index-bakup.ts b/packages/emp-share/src/runtime/index-bakup.ts new file mode 100644 index 00000000..fcac182a --- /dev/null +++ b/packages/emp-share/src/runtime/index-bakup.ts @@ -0,0 +1,57 @@ +import {deepAssign} from 'src/helper' +import {shareGlobalName} from 'src/helper/config' +import type {EMPShareRuntimeType, EmpRuntimeOptions, InitOptionsType, LoadRemoteType} from 'src/types' + +type EmpInitOptionsType = Partial +let globalLib = window[shareGlobalName] || {} +// 根据 injectGlobalValToHtml 提前把库赋值到 EMPRuntime +const win: any = window +const {EMPShareGlobalVal} = win || {} +if (EMPShareGlobalVal && EMPShareGlobalVal.runtimeLib) { + globalLib = win[EMPShareGlobalVal.runtimeLib] +} + +export class EMPRuntime { + public libs: EMPShareRuntimeType = globalLib + public initOptions!: InitOptionsType + public options: EmpRuntimeOptions = { + showLog: false, + } + public shareGlobalName = shareGlobalName + private isInit = false + constructor(op?: EMPShareRuntimeType) { + if (op) this.setup(op) + } + /** + * 实例化 adapter libs + */ + public setup(o?: EMPShareRuntimeType | string) { + if (o) { + if (typeof o === 'string') o = window[o] + this.libs = o as any + } + if (!this.libs.MFRuntime || !this.libs.MFSDK) { + throw new Error('MFRuntime and MFSDK Required!') + } + } + public init(options: EmpInitOptionsType = {}) { + if (this.isInit) return + let op: InitOptionsType = { + name: 'empRuntimeProject', + remotes: [], + // plugins: [catchErrorNextPlugin(this.options.showLog)], + } + op = deepAssign(op, options) + this.libs.MFRuntime.init(op) + this.isInit = true + } + public load(...args: LoadRemoteType) { + return this.libs.MFRuntime.loadRemote(...args) as Promise + } + public register = this.libs?.MFRuntime.registerRemotes + public preload = this.libs?.MFRuntime.preloadRemote + public loadShare = this.libs?.MFRuntime.loadShare + public preloadRemote = this.libs?.MFRuntime.preloadRemote +} +// +export default new EMPRuntime() diff --git a/packages/emp-share/src/runtime/index.ts b/packages/emp-share/src/runtime/index.ts index fcac182a..ecb44302 100644 --- a/packages/emp-share/src/runtime/index.ts +++ b/packages/emp-share/src/runtime/index.ts @@ -1,3 +1,4 @@ +import {ModuleFederation} from '@empjs/module-federation/runtime' import {deepAssign} from 'src/helper' import {shareGlobalName} from 'src/helper/config' import type {EMPShareRuntimeType, EmpRuntimeOptions, InitOptionsType, LoadRemoteType} from 'src/types' @@ -18,13 +19,10 @@ export class EMPRuntime { showLog: false, } public shareGlobalName = shareGlobalName - private isInit = false constructor(op?: EMPShareRuntimeType) { if (op) this.setup(op) } - /** - * 实例化 adapter libs - */ + public mfInstance?: ModuleFederation public setup(o?: EMPShareRuntimeType | string) { if (o) { if (typeof o === 'string') o = window[o] @@ -35,23 +33,30 @@ export class EMPRuntime { } } public init(options: EmpInitOptionsType = {}) { - if (this.isInit) return + if (this.mfInstance) return this.mfInstance let op: InitOptionsType = { name: 'empRuntimeProject', remotes: [], // plugins: [catchErrorNextPlugin(this.options.showLog)], } op = deepAssign(op, options) - this.libs.MFRuntime.init(op) - this.isInit = true + this.mfInstance = this.libs.MFRuntime.createInstance(op) } public load(...args: LoadRemoteType) { - return this.libs.MFRuntime.loadRemote(...args) as Promise + return this.mfInstance?.loadRemote(...args) as Promise + } + public register(...args: Parameters['registerRemotes']>) { + return this.mfInstance?.registerRemotes(...args) + } + public preload(...args: Parameters['preloadRemote']>) { + return this.mfInstance?.preloadRemote(...args) + } + public loadShare(...args: Parameters['loadShare']>) { + return this.mfInstance?.loadShare(...args) + } + public preloadRemote(...args: Parameters['preloadRemote']>) { + return this.mfInstance?.preloadRemote(...args) } - public register = this.libs?.MFRuntime.registerRemotes - public preload = this.libs?.MFRuntime.preloadRemote - public loadShare = this.libs?.MFRuntime.loadShare - public preloadRemote = this.libs?.MFRuntime.preloadRemote } // export default new EMPRuntime() diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 760a6c81..364c8191 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -285,6 +285,9 @@ importers: '@module-federation/rspack': specifier: 0.18.4 version: 0.18.4(@rspack/core@1.5.3)(typescript@5.9.2) + '@module-federation/runtime': + specifier: ^0.18.4 + version: 0.18.4 '@module-federation/runtime-core': specifier: 0.18.4 version: 0.18.4 diff --git a/projects/mf-host/emp.config.ts b/projects/mf-host/emp.config.ts index 53470cbb..191c7525 100644 --- a/projects/mf-host/emp.config.ts +++ b/projects/mf-host/emp.config.ts @@ -84,7 +84,7 @@ export default defineConfig(store => { // }, }, debug: { - // showRsconfig: true, + // showRsconfig: 'log.json', clearLog: false, }, chain(config) { diff --git a/projects/mf-host/src/App.tsx b/projects/mf-host/src/App.tsx index 5cf290a5..09bd43b8 100644 --- a/projects/mf-host/src/App.tsx +++ b/projects/mf-host/src/App.tsx @@ -24,7 +24,7 @@ function App(o: AppType) { {/* */} -

EMP 3.0 React {version}

+

EMP 3.0 React {version}

{o.from ?

{o.from}

: ''} {o.nameformRemote ?

{o.nameformRemote}

: ''} From 4f4dddee9fe16c9b81aecff8f556a521a70640c3 Mon Sep 17 00:00:00 2001 From: xuhongbin Date: Thu, 11 Sep 2025 17:50:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor(module-federation):=20=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E5=88=B0=E5=AE=98=E6=96=B9=20@module-federation=20?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新模块联邦相关依赖从 @empjs 到官方 @module-federation 包 添加 increment 属性到 AppType 类型定义 启用 dts 类型生成配置 --- packages/cli/tsconfig/react.json | 3 ++- packages/emp-share/package.json | 4 +++- packages/emp-share/src/helper/moduleFederation.ts | 7 ++++--- packages/emp-share/src/helper/rspack.ts | 2 +- packages/emp-share/src/runtime/index.ts | 2 +- pnpm-lock.yaml | 12 +++++++++--- projects/mf-app/emp.config.ts | 4 +++- projects/mf-app/src/App.tsx | 2 +- projects/mf-host/emp.config.ts | 12 ++++++------ projects/mf-host/src/App.tsx | 1 + 10 files changed, 31 insertions(+), 18 deletions(-) diff --git a/packages/cli/tsconfig/react.json b/packages/cli/tsconfig/react.json index 944ede3a..289f9eab 100644 --- a/packages/cli/tsconfig/react.json +++ b/packages/cli/tsconfig/react.json @@ -1,6 +1,7 @@ { "extends": ["./base"], "compilerOptions": { - "types": ["@empjs/cli/types/react"] + "types": ["@empjs/cli/types/react"], + "jsx": "react-jsx" } } diff --git a/packages/emp-share/package.json b/packages/emp-share/package.json index 85e8bc12..b0078e30 100644 --- a/packages/emp-share/package.json +++ b/packages/emp-share/package.json @@ -95,7 +95,9 @@ }, "author": "Ken", "dependencies": { - "@empjs/module-federation": "workspace:*", + "@module-federation/rspack": "0.18.4", + "@module-federation/runtime": "^0.18.4", + "@module-federation/sdk": "0.18.4", "core-js": "^3.45.1" }, "devDependencies": { diff --git a/packages/emp-share/src/helper/moduleFederation.ts b/packages/emp-share/src/helper/moduleFederation.ts index 437ddc64..d1cf31d2 100644 --- a/packages/emp-share/src/helper/moduleFederation.ts +++ b/packages/emp-share/src/helper/moduleFederation.ts @@ -1,7 +1,8 @@ -import * as MFRuntime from '@empjs/module-federation/runtime' -import * as MFSDK from '@empjs/module-federation/sdk' +import * as MFRuntime from '@module-federation/runtime' +import * as MFSDK from '@module-federation/sdk' export {MFRuntime, MFSDK} // export type FederationRuntimePlugin = MFRuntime.FederationRuntimePlugin -import type {ModuleFederationRuntimePlugin} from '@empjs/module-federation/runtime' +import type {ModuleFederationRuntimePlugin} from '@module-federation/runtime' export type FederationRuntimePlugin = ModuleFederationRuntimePlugin +export type {ModuleFederationRuntimePlugin} diff --git a/packages/emp-share/src/helper/rspack.ts b/packages/emp-share/src/helper/rspack.ts index b6150a61..eec50e82 100644 --- a/packages/emp-share/src/helper/rspack.ts +++ b/packages/emp-share/src/helper/rspack.ts @@ -1 +1 @@ -export {ModuleFederationPlugin} from '@empjs/module-federation/rspack' +export {ModuleFederationPlugin} from '@module-federation/rspack' diff --git a/packages/emp-share/src/runtime/index.ts b/packages/emp-share/src/runtime/index.ts index ecb44302..091eb565 100644 --- a/packages/emp-share/src/runtime/index.ts +++ b/packages/emp-share/src/runtime/index.ts @@ -1,4 +1,4 @@ -import {ModuleFederation} from '@empjs/module-federation/runtime' +import type {ModuleFederation} from '@module-federation/runtime' import {deepAssign} from 'src/helper' import {shareGlobalName} from 'src/helper/config' import type {EMPShareRuntimeType, EmpRuntimeOptions, InitOptionsType, LoadRemoteType} from 'src/types' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 364c8191..5f9f1548 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -316,9 +316,15 @@ importers: packages/emp-share: dependencies: - '@empjs/module-federation': - specifier: workspace:* - version: link:../emp-module-federation + '@module-federation/rspack': + specifier: 0.18.4 + version: 0.18.4(@rspack/core@1.5.3)(typescript@5.9.2) + '@module-federation/runtime': + specifier: ^0.18.4 + version: 0.18.4 + '@module-federation/sdk': + specifier: 0.18.4 + version: 0.18.4 core-js: specifier: ^3.45.1 version: 3.45.1 diff --git a/projects/mf-app/emp.config.ts b/projects/mf-app/emp.config.ts index 066e51b6..2da2ba83 100644 --- a/projects/mf-app/emp.config.ts +++ b/projects/mf-app/emp.config.ts @@ -1,7 +1,6 @@ import {defineConfig} from '@empjs/cli' import pluginReact from '@empjs/plugin-react' import pluginRspackEmpShare, {externalReact} from '@empjs/share/rspack' -import getConfig from '../mf-host/emp.runtime' export default defineConfig(store => { // const ip = store.getLanIp() // const {empRuntime, polyfillCdn} = getConfig(ip, store) @@ -43,6 +42,9 @@ export default defineConfig(store => { return o }, }, + dts: { + consumeTypes: true, + }, // experiments: { // federationRuntime: 'hoisted', // }, diff --git a/projects/mf-app/src/App.tsx b/projects/mf-app/src/App.tsx index 15fb50c8..2b54c35f 100644 --- a/projects/mf-app/src/App.tsx +++ b/projects/mf-app/src/App.tsx @@ -5,7 +5,7 @@ import Bound from './Bound' const App = () => (
- +

mf-app

diff --git a/projects/mf-host/emp.config.ts b/projects/mf-host/emp.config.ts index 191c7525..bb74d240 100644 --- a/projects/mf-host/emp.config.ts +++ b/projects/mf-host/emp.config.ts @@ -23,18 +23,18 @@ export default defineConfig(store => { // requiredVersion: '18', // }, // }, - experiments: { - asyncStartup: true, - }, + // experiments: { + // asyncStartup: true, + // }, exposes: { './App': './src/App', './CountComp': './src/CountComp', './Section': './src/component/Section', }, manifest: true, - // dts: { - // generateTypes: true, - // }, + dts: { + generateTypes: true, + }, // dev: { // disableHotTypesReload: false, // disableDynamicRemoteTypeHints: false, diff --git a/projects/mf-host/src/App.tsx b/projects/mf-host/src/App.tsx index 09bd43b8..d69ab1d2 100644 --- a/projects/mf-host/src/App.tsx +++ b/projects/mf-host/src/App.tsx @@ -11,6 +11,7 @@ type AppType = { version?: string component?: any nameformRemote?: string + increment?: number } console.log('test console') From c12db5d1e9567c8351d5a50f58c495e40d8ceaf7 Mon Sep 17 00:00:00 2001 From: xuhongbin Date: Thu, 11 Sep 2025 18:34:50 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(emp-share):=20=E6=B7=BB=E5=8A=A0mfRunt?= =?UTF-8?q?ime=E6=A8=A1=E5=9D=97=E5=B9=B6=E6=9B=B4=E6=96=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增mfRuntime模块入口文件 - 更新tsup配置以包含新模块 - 调整runtime-18-app的emp配置 - 更新package.json版本和导出配置 --- packages/emp-share/package.json | 13 ++++++++++++- packages/emp-share/src/runtime/mfRuntime.ts | 1 + packages/emp-share/tsup.config.ts | 1 + projects/runtime-18-app/.mf/typesGenerate.log | 8 ++++++++ projects/runtime-18-app/emp.config.ts | 12 ++++++++---- 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 packages/emp-share/src/runtime/mfRuntime.ts create mode 100644 projects/runtime-18-app/.mf/typesGenerate.log diff --git a/packages/emp-share/package.json b/packages/emp-share/package.json index b0078e30..412119d5 100644 --- a/packages/emp-share/package.json +++ b/packages/emp-share/package.json @@ -1,6 +1,6 @@ { "name": "@empjs/share", - "version": "3.10.0", + "version": "3.10.0-beta.5", "description": "emp share and runtime", "license": "MIT", "type": "module", @@ -37,6 +37,16 @@ "default": "./dist/runtime.cjs" } }, + "./mfRuntime": { + "import": { + "types": "./dist/mfRuntime.d.ts", + "default": "./dist/mfRuntime.js" + }, + "require": { + "types": "./dist/mfRuntime.d.cts", + "default": "./dist/mfRuntime.cjs" + } + }, "./adapter": { "import": { "types": "./dist/adapter.d.ts", @@ -76,6 +86,7 @@ "*": { ".": ["./dist/index.d.ts"], "runtime": ["./dist/runtime.d.ts"], + "mfRuntime": ["./dist/mfRuntime.d.ts"], "adapter": ["./dist/adapter.d.ts"], "adapterVue": ["./dist/adapter.d.ts"], "rspack": ["./dist/rspack.d.ts"], diff --git a/packages/emp-share/src/runtime/mfRuntime.ts b/packages/emp-share/src/runtime/mfRuntime.ts new file mode 100644 index 00000000..c260dd6b --- /dev/null +++ b/packages/emp-share/src/runtime/mfRuntime.ts @@ -0,0 +1 @@ +export * from '@module-federation/runtime' diff --git a/packages/emp-share/tsup.config.ts b/packages/emp-share/tsup.config.ts index 794f9859..088262d2 100644 --- a/packages/emp-share/tsup.config.ts +++ b/packages/emp-share/tsup.config.ts @@ -6,6 +6,7 @@ export default defineConfig(({watch}): Options[] => { entry: { index: 'src/index.ts', runtime: 'src/runtime/index.ts', + mfRuntime: 'src/runtime/mfRuntime.ts', adapter: 'src/adapter/index.ts', rspack: 'src/plugins/rspack/index.ts', adapterVue: 'src/adapter/vue.ts', diff --git a/projects/runtime-18-app/.mf/typesGenerate.log b/projects/runtime-18-app/.mf/typesGenerate.log new file mode 100644 index 00000000..88bbd5b5 --- /dev/null +++ b/projects/runtime-18-app/.mf/typesGenerate.log @@ -0,0 +1,8 @@ +[2025-09-11T18:34:25.121] [WARN] Module Federation DTS - Connection closed with code 1006. +[2025-09-11T18:34:25.122] [INFO] Module Federation DTS - start reconnecting to server after 1s. +[2025-09-11T18:34:26.126] [INFO] Module Federation DTS - Publisher:runtime_app Trying to connect to ws://172.29.96.250:16322... +[2025-09-11T18:34:26.140] [FATAL] Module Federation DTS - Failed to connect to ws://172.29.96.250:16322... +[2025-09-11T18:34:26.141] [WARN] Module Federation DTS - Connection closed with code 1006. +[2025-09-11T18:34:26.141] [INFO] Module Federation DTS - start reconnecting to server after 1s. +[2025-09-11T18:34:26.218] [WARN] Module Federation DTS - Creating new background broker... +[2025-09-11T18:34:26.384] [INFO] StartBroker - startBroker... 6819 diff --git a/projects/runtime-18-app/emp.config.ts b/projects/runtime-18-app/emp.config.ts index 2f926cd5..c6f4152e 100644 --- a/projects/runtime-18-app/emp.config.ts +++ b/projects/runtime-18-app/emp.config.ts @@ -10,11 +10,11 @@ export default defineConfig(store => { pluginRspackEmpShare({ name: `runtime_app`, manifest: true, - experiments: { - asyncStartup: true, - }, + // experiments: { + // asyncStartup: true, + // }, exposes: { - './Title': './src/Title', + // './Title': './src/Title', }, empRuntime: { framework: { @@ -26,6 +26,10 @@ export default defineConfig(store => { }, setExternals: externalReact, }, + // dts: { + // generateTypes: false, + // consumeTypes: true, + // }, }), ], build: {