@fulgurjs/federation 0.6.1 → 0.7.0

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.
@@ -36,7 +36,7 @@
36
36
  - [ ] 零兜底:联邦不可用显式报错(杀 remote 故障注入)
37
37
  - [ ] 装后可用:npm pack → 干净项目 dev+prod(e2e/h7-install-test.sh)
38
38
 
39
- > **目录约定说明(0.6.0 起)**:联邦相关产物统一收在 **`src/fulgurjs/`** 一个文件夹——`types/`(插件每次 dev 自动生成的类型直连与运行时垫片,**勿手改**;src 布局 tsconfig 零配置生效,无 src 布局回退根目录 `.fulgurjs/types/`)与 `exposes/`(联邦启动引导 federatedBoot + 供外部加载的组件,**你的代码**)。宿主侧桥接文件(fulgurjsBridge/fulgurjsPages)同属迁移工具脚手架约定而非插件要求,可按团队习惯重组,只要 vite `exposes` 映射与调用点跟着改。
39
+ > **目录约定说明(0.6.0 起)**:联邦相关产物统一收在 **`src/fulgurjs/`** 一个文件夹(每个应用一份,内附 README 说明归属)——`types/`(插件每次 dev 自动生成的类型直连与运行时类型垫片,**勿手改**;src 布局 tsconfig 零配置生效,无 src 布局回退根目录 `.fulgurjs/types/`)与按角色划分的代码子目录:远程应用为 `exposes/`(联邦启动引导 federatedBoot + 供外部加载的组件),宿主应用为 `host/`(桥接 bridge.ts + 页面路由表 pages.ts)。均为迁移工具脚手架约定而非插件要求,可按团队习惯重组,只要 vite `exposes` 映射与调用点跟着改。
40
40
 
41
41
  ## 三B、首次使用避坑清单(真实迁移踩坑实录,全文见仓库 README「避坑指南」节)
42
42
 
@@ -51,28 +51,30 @@
51
51
  | 7 | 登录异步链未完成就断言 | e2e 偶发被弹回登录页 | 等「登录表单消失」而非固定秒数;后台慢链 ≥15s |
52
52
  | 8 | 多版本组件库 CSS | 后加载覆盖 `:root` 变量 | 主流版本变量一致则无感;升级时留意 |
53
53
  | 9 | 后端缺端点 | 404/401 资源报错 | 代理/NGINX 层加诚实空响应垫片(不伪造业务数据) |
54
- | 10 | 远程页面(exposes 目标文件)静态导入 `virtual:fulgurjs-runtime` | 宿主跨源加载后渲染上下文破坏:resolveComponent / withDirectives / "Missing ref owner" 告警、内容区静默空白 | 改走宿主单例(见下节);插件 dev 下已对此显式报错拦截 |
54
+ | 10 | ~~远程页面(exposes 目标文件)静态导入 `virtual:fulgurjs-runtime`~~ | —— | **0.4.1 起规则已废除**:插件自动把该导入改写为惰性单例代理,远程页面可直接静态导入,写法与宿主一致(详见下节三B-1) |
55
55
 
56
- ### 三B-1、远程页面如何取宿主运行时(跨源单例契约)
56
+ ### 三B-1、远程页面如何取宿主运行时(0.7.0 起更新)
57
57
 
58
- exposes 目标文件(被宿主跨源加载的远程页面/组件)**禁止静态 `import 'virtual:fulgurjs-runtime'`**——
59
- 该导入会改由远程 dev server 求值,在远程模块图内实例化第二份运行时副本,破坏渲染上下文
60
- (插件 dev 下已对此显式报错,错误信息即指向本节)。
61
-
62
- 正确写法(二选一,取到的是同一份页面级单例):
58
+ 0.4.1 起,exposes 目标文件(被宿主跨源加载的远程页面/组件)**可以直接静态导入**
59
+ `virtual:fulgurjs-runtime`——插件自动把远程页面里的该导入改写为**惰性单例代理**:
60
+ 求值期零副作用、调用期转发页面级运行时单例。宿主与远程写法完全一致,无需区分。
63
61
 
64
62
  ```ts
65
- // ① 直接读全局单例(bpm detail 页先例)
66
- const runtime = (globalThis as any).__FULGURJS_RUNTIME__
67
- const mod = await runtime.loadRemote('host-app/UserProfile')
63
+ // 远程页面内,与宿主页面写法完全一致
64
+ import { loadRemote } from 'virtual:fulgurjs-runtime'
65
+ ```
68
66
 
69
- // ② 经独立产物 getRuntime()(最小宿主/无构建场景,见 manual §5.1)
70
- import { getRuntime, version } from '/fulgurjs-runtime.js'
71
- const mod = await getRuntime().loadRemote('mes-bpm/./TaskCard')
67
+ 组件直渲染(**0.7.0 起推荐**)用 `@fulgurjs/federation/vue` 子路径的 `remoteComponent`——
68
+ `defineAsyncComponent + loadRemote` 的标准封装,加载失败显式错误占位(错误码+根因+修法),无任何兜底:
69
+
70
+ ```ts
71
+ import { remoteComponent } from '@fulgurjs/federation/vue'
72
+ const FederatedBusinessForm = remoteComponent('cku-mes-admin/FormRouterPage')
72
73
  ```
73
74
 
74
- 运行时单例带 `version` 字段(与插件包版本同源)用于跨源副本一致性诊断;
75
- 宿主页面(非 exposes 目标)不受此限,可正常静态导入虚拟模块。
75
+ ~~早期版本(≤0.3.x)曾要求远程页面禁静态导入、手工读 `globalThis.__FULGURJS_RUNTIME__`~~——该规则已废除。
76
+ `(globalThis as any).__FULGURJS_RUNTIME__` 直取全局单例仅剩"独立访问远程页 vs 联邦加载"的 realm
77
+ 检测等特殊场景(0.7.0 删除 iframe 乾坤旧通道后,常规集成已无此类需求)。
76
78
 
77
79
  ## 四、乾坤下线顺序
78
80
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fulgurjs/federation",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "description": "Vite Module Federation with full Webpack MF parity. Dev & production, no compromise.",
6
6
  "license": "MIT",
@@ -23,6 +23,11 @@
23
23
  "import": "./dist/config.js",
24
24
  "require": "./dist/config.cjs"
25
25
  },
26
+ "./vue": {
27
+ "types": "./dist/vue.d.ts",
28
+ "import": "./dist/vue.js",
29
+ "require": "./dist/vue.cjs"
30
+ },
26
31
  "./client": {
27
32
  "types": "./client.d.ts"
28
33
  },
@@ -44,7 +49,7 @@
44
49
  "docs/vite-upstream-issue-irregexp.md"
45
50
  ],
46
51
  "scripts": {
47
- "build": "cp ../../README.md README.md && mkdir -p docs && cp ../../docs/manual.html ../../docs/迁移指南.md ../../docs/webpack-mf-对照与缺口.md ../../docs/沙箱边界审计.md ../../docs/P5-vite7-8兼容矩阵.md ../../docs/vite-upstream-issue-irregexp.md docs/ && cp ../../CHANGELOG.md CHANGELOG.md && cp ../../DESIGN.md DESIGN.md && rm -rf examples && cp -r ../../examples examples && esbuild src/runtime/index.ts --bundle --format=esm --target=es2022 --minify --outfile=dist/runtime.js && node scripts/gen-runtime.mjs && tsup src/index.ts src/pages.ts src/config.ts --format esm,cjs --dts --external vite --target node18 --clean && esbuild src/cli.ts --bundle --format=esm --target=node18 --platform=node --outfile=dist/cli.js && esbuild src/runtime/index.ts --bundle --format=esm --target=es2022 --minify --outfile=dist/runtime.js",
52
+ "build": "cp ../../README.md README.md && mkdir -p docs && cp ../../docs/manual.html ../../docs/迁移指南.md ../../docs/webpack-mf-对照与缺口.md ../../docs/沙箱边界审计.md ../../docs/P5-vite7-8兼容矩阵.md ../../docs/vite-upstream-issue-irregexp.md docs/ && cp ../../CHANGELOG.md CHANGELOG.md && cp ../../DESIGN.md DESIGN.md && rm -rf examples && cp -r ../../examples examples && esbuild src/runtime/index.ts --bundle --format=esm --target=es2022 --minify --outfile=dist/runtime.js && node scripts/gen-runtime.mjs && tsup src/index.ts src/pages.ts src/config.ts src/vue.ts --format esm,cjs --dts --external vite --target node18 --clean && esbuild src/cli.ts --bundle --format=esm --target=node18 --platform=node --outfile=dist/cli.js && esbuild src/runtime/index.ts --bundle --format=esm --target=es2022 --minify --outfile=dist/runtime.js",
48
53
  "dev": "tsup --watch",
49
54
  "test": "vitest run",
50
55
  "typecheck": "tsc --noEmit"
@@ -55,12 +60,15 @@
55
60
  },
56
61
  "devDependencies": {
57
62
  "@types/node": "^24.0.0",
63
+ "jsdom": "^24.0.0",
58
64
  "tsup": "^8.4.0",
59
65
  "typescript": "^5.8.0",
60
- "vitest": "^3.1.0"
66
+ "vitest": "^3.1.0",
67
+ "vue": "^3.5.22"
61
68
  },
62
69
  "peerDependencies": {
63
- "vite": ">=5.0.0"
70
+ "vite": ">=5.0.0",
71
+ "vue": ">=3.2.0"
64
72
  },
65
73
  "pnpm": {
66
74
  "onlyBuiltDependencies": [
@@ -90,5 +98,10 @@
90
98
  },
91
99
  "bin": {
92
100
  "fulgurjs": "./dist/cli.js"
101
+ },
102
+ "peerDependenciesMeta": {
103
+ "vue": {
104
+ "optional": true
105
+ }
93
106
  }
94
107
  }