@fulgurjs/federation 5.5.1 → 5.6.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.6.0
4
+
5
+ - **修复:Vite 8(rolldown)生产链路五项(V8-SYNC-FACADE 配套)**
6
+ - **大型应用页面启动死锁**——根因(JeecgBoot 实测定位,运行时插桩实证):TLA 协商门面(`await loadShare`)使 rolldown 把「顶层 await」沿静态依赖传播进消费方模块的惰性初始化包装;应用代码/依赖库自身既有的循环依赖(ant-design-vue 的 useConfigInject ⇄ theme)随即变成两个 async init 互等,永不落定——页面零报错、应用引导永不执行(vite 8.1.4/8.3.2、rolldown 1.1.5/1.2.12 同现;5.5.x 的产物补 async 只修语法层,运行期挂起仍在)。修复:**rolldown 构建路径下,共享绑定门面与命名空间门面改为同步 pin 形态**(与 React 侧 CJS 垫片同构):`getLoadedShare` 命中已协商实例则复用;未命中(含 strictVersion 版本冲突——与 TLA 路径 loadShare→fallback 语义对齐,不抛 MFU-003)时 `pinLoadedShare` 登记本地副本(first-wins + 版本守卫),后续协商收敛同一实例。插件不再向应用图注入任何 TLA,循环依赖回到同步求值;rollup(vite 5–7)路径行为不变。验收:Jeecg A/B/React-C/React宿主 vite 8.3.2(rolldown 1.2.12)生产全场景 5/5(登录、A套B、三层深链刷新直达、A套C 中文 query 深链刷新直达、React宿主套B)零 console 错误;e2e vite8 dev 73/73 + prod 33/33。已知代价(仅 vite 8):门面本地副本静态入图,协商命中他方实例时本地物理 chunk 仍会被模块图拉取(B-2/B-8 双版本场景 vue 本体网络副本 ≤2,优于旧 TLA 形态实测的 3 份;运行时身份仍收敛单一实例)。
7
+ - **remoteEntry 失败重试在 rolldown 产物失效**——generateBundle 的 `__fgR` 包装正则只匹配单/双引号字面量,rolldown 以反引号渲染 `import(反引号字面量)`,包装从未生效:expose chunk 失败后被浏览器模块图负缓存,重试同 URL 直接拒绝("Failed to fetch dynamically imported module")。修复:三种引号都包装。
8
+ - **vite8 依赖预载负缓存阻断同页重试**——vite8 preload 助手的 `<link rel=modulepreload>` 会把 JS 依赖写入模块图,网络失败被负缓存后 `__fgR` 只变换入口 URL 无法恢复依赖 URL(实测:解除阻断后 retry=2 入口 200 而依赖 chunk 零请求、Promise 永不落定)。修复:rolldown 构建下 remoteEntry 各 loader 的 `__vite__mapDeps` 过滤为仅 CSS(保留样式注入语义),JS 依赖改由模块图按需拉取;rollup 保持原生预载。
9
+ - **vite8 manifest exposes 缺项**——expose 目标同时被应用自身静态引用时,rolldown 将其并入其他 chunk(无独立 facadeModuleId),generateBundle 的 expose→chunk 映射落空(manifest 缺 `./Button` 等,preloadRemote/MFU-006 断链)。修复:按 chunk.modules 索引反查兜底(rollup 恒走原路径零影响)。
10
+ - **optimizeDeps 弃用警告**——vite ≥ 8 只下发 `rolldownOptions`(遗留 `esbuildOptions` 键触发 deprecation warning);vite ≤ 7 保持原双键路径。
11
+ - **重设计:V8-ASYNC-FIX 产物补丁(esbuild 定位引导,2026-10-03)**——旧版阶段一为盲正则替换(可命中字符串/注释里的同形文本)、阶段二 AST 兜底实际不可达(标准 parser 对「await 位于非 async 函数」一律早期 SyntaxError,`this.parse` 必然先抛;旧实现另有 `collectBrokenFunctions` 从不填充数组的缺陷,即便可达也返回空)。新版由 esbuild 真实报错位置驱动(精确指向非法 await,字符串/注释内容永不误报):在代码区掩码(轻量 lexer 排除字符串/模板/注释/正则字面量)内回扫定位最内层包裹函数头,按箭头/function 声明/表达式/方法简写形态插入 `async`,每轮插入后立即 esbuild 复验;不支持的形态(getter/setter/生成器/计算键方法)明确失败并带上下文,不产出错误补丁。门面同步化后插件自身产物不再触发该缺陷,本修复保留为「用户自有 TLA 代码 × 循环依赖」触发 rolldown codegen 缺陷的安全网。回归 `tests/async-mark-repair.test.ts` 12 例:含以 rolldown 真实运行时访问器(逐字取自 rolldown-runtime chunk)执行修复产物的运行语义验证(初始化顺序/只初始化一次/循环依赖不永久挂起/rejection 传播/字符串注释正则零改动/不支持形态明确失败)。
12
+ - **质量门禁**:单测 623 → 631(async 补标重设计 12 + optimizeDeps rolldown 分支 1);e2e dev 73/73(vite 5.1.8/6.4.3/7.3.6/8.3.2 四档)+ prod 33/33(vite 6.4.3/8.3.2 两档);React 18.3.1+RR6+vite 8.3.2 dev 34/34 + prod-react 20/20;tarball smoke 通过;两套 TS 0 错误;gzip/错误码 48 三方一致。**已知边界(如实登记)**:React 18 子应用被「声明 react 19 singleton 的宿主」承载(host-bridge-vue × R18 remote-react × vite8 桥接)时,单例 loaded-first 跨大版本收养使 react-dom@18 配到 react@19(`__SECRET_INTERNALS` 不存在)——MF 单例语义使然(vite 5–7 同配置同样触发,此前未测过该组合),正确姿势是宿主/远程版本对齐或声明 requiredVersion+strictVersion。
13
+ ——根因(JeecgBoot 实测定位):TLA 协商门面(`await loadShare`)使 rolldown 把「顶层 await」沿静态依赖传播进消费方模块的惰性初始化包装;应用代码/依赖库自身既有的循环依赖(ant-design-vue 的 useConfigInject ⇄ theme,运行时插桩实证为两个 async init 互等)随即变成永不落定的互等——页面零报错、应用引导永不执行(vite 8.1.4/8.3.2、rolldown 1.1.5/1.2.12 同现;5.5.x 时代的产物补 async 只修了语法层,运行期挂起仍在)。修复:**rolldown 构建路径下,共享绑定门面与命名空间门面改为同步 pin 形态**(与 React 侧 CJS 垫片同构——该路径在 vite8 一直可用):`getLoadedShare` 命中已协商实例则复用;未命中 `pinLoadedShare` 登记本地副本(first-wins + 版本守卫),后续任何 `loadShare` 协商收敛到同一实例(单例不双份)。插件自身不再向应用图注入任何 TLA,循环依赖回到同步求值。rollup(vite 5/6/7)路径行为不变(保留 TLA 形态)。已知行为差异(仅 vite 8 构建路径):自定义 `resolveShare` hook 不再参与静态导入的首次解析(此前协商过的快照仍会被命中);`strictVersion` 版本冲突在静态导入处不再抛 MFU-012 而是回退本地副本。验收:Jeecg A/B/React-C/React宿主 vite 8.3.2(rolldown 1.2.12)生产全场景 5/5(登录、A套B、三层深链刷新、A套C 中文 query 深链刷新直达、React宿主套B),console/pageerror 零错误。
14
+ - **重设计:V8-ASYNC-FIX 产物补丁(esbuild 定位引导,2026-10-03)**——旧版阶段一为盲正则替换(可命中字符串/注释里的同形文本)、阶段二 AST 兜底实际不可达(标准 parser 对「await 位于非 async 函数」一律早期 SyntaxError,`this.parse` 必然先抛;旧实现另有 `collectBrokenFunctions` 从不填充数组的缺陷)。新版由 esbuild 真实报错位置驱动(精确指向非法 await,字符串/注释内容永不误报):在代码区掩码(轻量 lexer 排除字符串/模板/注释/正则字面量)内回扫定位最内层包裹函数头,按箭头/function 声明/表达式/方法简写形态插入 `async`,每轮插入后立即 esbuild 复验;不支持的形态(getter/setter/生成器/计算键方法)明确失败并带上下文,不产出错误补丁。门面同步化后插件自身产物不再触发该缺陷,本修复保留为「用户自有 TLA 代码 × 循环依赖」触发 rolldown codegen 缺陷的安全网。回归 `tests/async-mark-repair.test.ts` 12 例:含以 rolldown 真实运行时访问器(逐字取自 rolldown-runtime chunk)执行修复产物的运行语义验证(初始化顺序/只初始化一次/循环依赖不永久挂起/rejection 传播/字符串注释正则零改动/不支持形态明确失败)。
15
+
16
+ ## 5.5.2
17
+
18
+ - **修复:多远程宿主 react-refresh 发布脚本的错源网络噪声**——发布脚本动态 import「首个 http 远程」的 `/@react-refresh`,多远程(Vue 远程 + React 远程并存)时猜错 origin:JS 层 5.4.2 已容错,但浏览器仍记录一条 404 网络错误(JeecgBoot-A 实测:B(5372,Vue)+C(5373,React) 双远程,A 页控制台恒有一条 5372/@react-refresh 404)。现改为:仅单一 http 远程时才跨源导入(origin 无歧义);多远程时只同步设置 preamble 标志(硬检查语义不变),真实 react-refresh 实例由各 React 远程自带 origin 的 shim 自举并发布页面级单例——A 页 404 噪声归零,React 远程挂载与 HMR 实测不受影响。
19
+
3
20
  ## 5.5.1
4
21
 
5
22
  - **修复:`getLoadedShare` / `pinLoadedShare` / `clearSessionState` 在 `/runtime` 与 `/react` 入口的类型与生成链缺口**——三个函数在内核(`dist/runtime.js`)实际导出且生成脚本向 `runtime-entry.js` 注入了 `clearSessionState`,但 `src/runtime-entry.ts` / `src/react.ts` 源码导出面未包含(发布包 d.ts 因此缺失,TS 消费者不可导入;`getLoadedShare`/`pinLoadedShare` 的 JS 入口导出也缺失)。现统一:源码、d.ts、生成脚本(`gen-runtime-entry.mjs`)三处一致,React 入口补齐同面;导出面守卫测试(`tests/runtime-entry-graph.test.ts`)批准清单同步。包内 `demo` 场景(`demo/shared` 卡片⑫)以真调用覆盖:getLoadedShare 与 loadShare 结果对象严格相等、pinLoadedShare 收敛、clearSessionState 后新代次 onSession 重跑。