@fulgurjs/federation 0.9.1-test.1 → 2.0.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,70 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.0(2026-09-22)
4
+
5
+ ### 破坏性变更(公开 API 去掉冗余品牌前缀,无兼容别名)
6
+
7
+ 背景:包名与子路径已承担命名空间职责(`@fulgurjs/federation/context` 等),标识符再挂 `Fulgurjs`
8
+ 前缀属纯冗余,且长度失控(`provideFulgurjsAppContext` 达 26 字符)。本版统一去前缀,**旧名直接移除**。
9
+
10
+ | 子路径 | 旧名 | 新名 |
11
+ |---|---|---|
12
+ | `/context` | `provideFulgurjsAppContext` | `provideAppContext` |
13
+ | | `getFulgurjsAppContext` | `getAppContext` |
14
+ | | `requireFulgurjsAppContext` | `requireAppContext` |
15
+ | | `FulgurjsAppContext` | `AppContext` |
16
+ | `/pages` | `defineFulgurjsPages` | `definePages` |
17
+ | | `validateFulgurjsPages` | `validatePages` |
18
+ | | `FulgurjsPagesOptions` / `FulgurjsPageRouteLike` | `PagesOptions` / `PageRouteLike` |
19
+ | `/config` | `defineFulgurjsConfig` | `defineRepoConfig` |
20
+ | | `loadFulgurjsConfig` | `loadRepoConfig` |
21
+ | | `FulgurjsRepoConfig` / `FulgurjsAppConfig` / `FulgurjsUserConfig` | `RepoConfig` / `AppConfig` / `UserConfig` |
22
+ | | `FulgurjsHostConfig` / `FulgurjsRemoteConfig` / `FulgurjsDeployConfig` | `HostConfig` / `RemoteConfig` / `DeployConfig` |
23
+ | | `FulgurjsPageEntry` / `FulgurjsRemoteAddress` | `PageEntry` / `RemoteAddress` |
24
+ | 主入口 | `FulgurjsOptions` | `FederationOptions` |
25
+ | 运行时 | `FulgurjsRuntime`(类型) | `FgRuntime` |
26
+ | | `FulgurjsError`(内部类,仅经 `err.name` 可见) | `FgError` |
27
+
28
+ 两处命名取舍:
29
+
30
+ - `defineRepoConfig` 而非 `defineConfig`——避开与 vite 的 `defineConfig` 撞名(`fulgurjs.config.ts`
31
+ 描述的是「一个仓库的多个应用」)。
32
+ - 运行时错误 `err.name` 由 `FulgurjsError` 变为 `FgError`:该类不在导出面(用户从不 import,
33
+ 只经 `err.code` / `err.name` 观察),若有按 `name` 匹配错误的监控配置需同步。`err.code`(MFU-xxx 等)
34
+ 语义与取值不变。
35
+
36
+ ### 刻意保持不变的品牌元素
37
+
38
+ - **跨应用单例键** `globalThis.__FULGURJS_RUNTIME__` / `__FULGURJS_APP_CONFIG__` / `__FULGURJS_SCOPE__`:
39
+ 跨版本互操作契约——改了会让新旧版本互相看不见对方的运行时与 context 存储。
40
+ - 虚拟模块 `virtual:fulgurjs-runtime`、CLI `fulgurjs`、配置文件 `fulgurjs.config.ts`、错误码前缀 `[fulgurjs:MFU-001]`。
41
+ - 运行时函数名(`loadRemote` / `loadShare` / `preloadRemote` / `registerRemote(s)` / `initSharing` /
42
+ `getContainer` / `getRuntime` / `unwrapDefault` / `parseSpec`):对齐 webpack Module Federation 命名,便于迁移对照。
43
+
44
+ ### 迁移
45
+
46
+ 按上表把旧名替换为新名即可,语义一一对应、无行为变化。注意 `provide/get/requireFulgurjsAppContext`
47
+ 三个是「含前缀的完整函数名」,新名为 `provide/get/requireAppContext`(去的是 `Fulgurjs` 与 `AppContext`
48
+ 之间的品牌词,`AppContext` 保留)。
49
+
50
+ ## 1.0.0(2026-09-22)
51
+
52
+ ### 破坏性变更(正式定版,API 面冻结)
53
+
54
+ - **删除旧配置 API**:`provideFulgurjsAppConfig` / `getFulgurjsAppConfig` 从 runtime、虚拟门面
55
+ (`virtual:fulgurjs-runtime` 委托模块)、`client.d.ts` 类型面全部移除——跨应用传值**唯一通道**为
56
+ `@fulgurjs/federation/context` 的 `provideFulgurjsAppContext` / `getFulgurjsAppContext` /
57
+ `requireFulgurjsAppContext`。存储本体即全局镜像对象 `window.__FULGURJS_APP_CONFIG__`(不再经
58
+ runtime 转发),runtime 包体相应缩减。
59
+ - 迁移:全局搜索 `provideFulgurjsAppConfig` / `getFulgurjsAppConfig` 替换为 context 子路径对应函数
60
+ (语义一一对应,仅函数名与导入路径变化)。
61
+
62
+ ### 清理(无历史遗留)
63
+
64
+ - **移除 `docs/manual.html`**(早期手册的历史存档,其引用的截图已不在仓库)——README 为唯一权威文档。
65
+ - 设计文档状态勘误:D.2 / D.4 / D.5 已实施项的状态标记修正(原标注"待执行/未实现")。
66
+
67
+
3
68
  ## 0.9.0(2026-09-21)
4
69
 
5
70
  ### 新增(发布可靠性 + IDE 边界 + 配置面)
package/DESIGN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **品牌**:fulgurjs,拉丁语「闪电 · 辉光」,取自作者名中「烨」字的意译。
4
4
  > 系列规划:`@fulgurjs/federation`(模块联邦)→ `@fulgurjs/micro`、`@fulgurjs/dts` …
5
- > 内外命名统一 `fulgurjs`(`virtual:fulgurjs-*` 虚拟模块、`window.__FULGURJS_*` 调试出口、`FulgurjsError` / MFU 错误码)。
5
+ > 内外命名统一 `fulgurjs`(`virtual:fulgurjs-*` 虚拟模块、`window.__FULGURJS_*` 调试出口、`FgError` / MFU 错误码)。
6
6
 
7
7
  > 状态:已实现并验证(2026-09-13)。测试结果:单测 76/76、fixtures dev e2e 10/10、容错/HMR-L3 2/2、fixtures prod e2e 8/8(隔离 NGINX 8999)、testbed dev 实测全通、testbed prod(本地 NGINX 测试站点)最小宿主消费真实远程产物实测通过;runtime gzip 4.4KB。已知问题见手册 §7。
8
8
  > 日期:2026-09-12
@@ -158,9 +158,9 @@ remote 样式改动立即生效;host 自身业务 HMR 不受影响。
158
158
  - **dev 与 prod(NGINX)两套截图各自备齐**,手册按环境归档引用
159
159
  - 手动冒烟(如后台接口连通、NGINX reload)同样截图留证
160
160
 
161
- ## 7. 交付物:HTML 使用手册(测试完成后编写)
161
+ ## 7. 文档交付物
162
162
 
163
- 单文件 HTML(`docs/manual.html`,双击浏览器打开即可浏览全部功能,无外部服务依赖):
163
+ **唯一权威文档 = 仓库根 `README.md`**(随 npm 包发布,GitHub 与 npm 双端可读);迁移路径见 `docs/迁移指南.md`。内容组织:
164
164
 
165
165
  1. **功能总览**:§2 配置对齐表直接入册——每个 webpack 选项/运行时语义一行,标注 **与 webpack 原版一致性**(✅ 完全一致 / 🔶 适配差异 + 差异说明),明确回答"是否和 webpack 一模一样"
166
166
  2. **快速开始**:安装、remote/host 配置完整代码块(高亮),配 vite.config 实际文件截图
package/README.md CHANGED
@@ -32,10 +32,10 @@
32
32
  - **HMR 全链路**:remote 改动 → host 页面热更,L1 组件热替换 / L2 状态保留 / L3 错误覆盖与恢复
33
33
  - **零报错纪律**:配置问题启动瞬间三段式报错;联邦失败显式抛错(错误码 + 可执行修复建议),**无任何静默兜底路径**
34
34
  - **CLI(主包内置 bin)**:`fulgurjs init`——`fulgurjs.config.ts` 单配置驱动的迁移生成器(模板 = 真实工程验证形态:vite 配置/路由表/桥/联邦启动器/NGINX conf 全量编码,锚点补丁幂等可续跑);`fulgurjs doctor`——部署面体检(remoteEntry/manifest/HTML 缓存头与形态、CORS、chunk 抽样可达、版本 skew 预演、`--dev` 端口探测)
35
- - **跨应用传值与方法引用**:`@fulgurjs/federation/context` 子路径——`provideFulgurjsAppContext` / `getFulgurjsAppContext` / `requireFulgurjsAppContext`(缺键 `CC-001` 三段式、独立直开远程页 `CC-002` 显式)。宿主桥一次写入页面级单例(user/token/getToken/store/hostApp/locale/events 标准字段 + 项目扩展位),远程 boot 显式校验消费;方法引用两条通道 = context 携带函数引用(热路径直调)+ exposes 方法模块 `loadRemote('remote/api')`(低频重逻辑)。旧名 `provideFulgurjsAppConfig/getFulgurjsAppConfig` 保留为 deprecated 别名(存储同一份)。数据语义 = 传输层快照 + 函数引用,非响应式(与乾坤 props 同语义;"实时"靠函数引用拉取 / 宿主 pinia 共享 / 登录刷新三通道)
35
+ - **跨应用传值与方法引用**:`@fulgurjs/federation/context` 子路径——`provideAppContext` / `getAppContext` / `requireAppContext`(缺键 `CC-001` 三段式、独立直开远程页 `CC-002` 显式)。宿主桥一次写入页面级单例(user/token/getToken/store/hostApp/locale/events 标准字段 + 项目扩展位),远程 boot 显式校验消费;方法引用两条通道 = context 携带函数引用(热路径直调)+ exposes 方法模块 `loadRemote('remote/api')`(低频重逻辑)。数据语义 = 传输层快照 + 函数引用,非响应式(与乾坤 props 同语义;"实时"靠函数引用拉取 / 宿主 pinia 共享 / 登录刷新三通道)
36
36
  - **Vue 直渲染**:`remoteComponent('remote/X')`(`@fulgurjs/federation/vue` 子路径)——`defineAsyncComponent + loadRemote` 的标准封装,加载失败显式错误占位(错误码+根因+修法),runtime.js 零框架依赖零体积增量
37
37
  - **CSP 友好**:原生 ESM 加载路径全程无 `eval` / `new Function`,可在严格 CSP(无 `unsafe-eval`)下运行
38
- - **全链路错误码体系(32 码)**:CFG/DEV/BLD/MFU/CC 五段 + 手册 §8 码表防漂移校验
38
+ - **全链路错误码体系(30 码)**:CFG/DEV/BLD/MFU/CC 五段 + 手册 §8 码表防漂移校验
39
39
 
40
40
  ## 安装
41
41
 
@@ -147,7 +147,7 @@ npx fulgurjs doctor --base http://localhost:5173 --apps app-a --dev
147
147
 
148
148
  ## API 参考
149
149
 
150
- 以下覆盖插件的全部公开 API,签名与默认值与源码一致——**本 README 为唯一权威文档**(仓库内 `docs/manual.html` 为早期补充手册,部分内容基于较早形态,仅作参考)。
150
+ 以下覆盖插件的全部公开 API,签名与默认值与源码一致——**本 README 为唯一权威文档**。
151
151
 
152
152
  ### 1. `federation(options)` — Vite 插件(宿主/远程同一份 API)
153
153
 
@@ -162,7 +162,7 @@ import { federation } from '@fulgurjs/federation'
162
162
  | `name` | `string` **必填** | — | 容器名。同页面宿主/远程必须唯一(也是 uniqueName);须匹配 `/^[a-zA-Z][\w.-]*$/` |
163
163
  | `filename` | `string` | `'fulgurjs-remoteEntry.js'` | prod 容器入口文件名(固定文件名,CDN 可长缓存) |
164
164
  | `exposes` | `Record<string, string \| { import: string; name?: string }>` | — | 对外暴露模块:键 `'./X'`,值源文件路径;`name` 为稳定 chunk 文件名 |
165
- | `remotes` | `Record<string, string \| RemoteConfig \| (() => Promise<any>)>` | — | 消费的远程,三种形态见下表 |
165
+ | `remotes` | `Record<string, string \| RemoteEntryConfig \| (() => Promise<any>)>` | — | 消费的远程,三种形态见下表 |
166
166
  | `shared` | `string[] \| Record<string, string \| SharedHint>` | — | 共享依赖;字符串简写 = requiredVersion(缺省从本应用 package.json 推断) |
167
167
  | `shareScope` | `string` | `'default'` | 默认共享作用域名 |
168
168
  | `remoteType` | `string` | `'module'` | 仅支持 `'module'`(传其它值告警并回落) |
@@ -229,7 +229,7 @@ shared: {
229
229
 
230
230
  ```ts
231
231
  // 宿主页面、远程页面,写法完全一致
232
- import { loadRemote, provideFulgurjsAppConfig } from 'virtual:fulgurjs-runtime'
232
+ import { loadRemote } from 'virtual:fulgurjs-runtime'
233
233
  ```
234
234
 
235
235
  > 仍可绕过代理直取全局单例(等价,调试用):`(globalThis as any).__FULGURJS_RUNTIME__`。
@@ -244,13 +244,11 @@ import { loadRemote, provideFulgurjsAppConfig } from 'virtual:fulgurjs-runtime'
244
244
  | `loadShare` | `(name: string, opts?) => Promise<命名空间>` | 共享模块协商(最高版本胜出/已加载优先/singleton 收敛)。opts:`{ requiredVersion?, singleton?, strictVersion?, shareKey?, shareScope?, fallback? }` |
245
245
  | `preloadRemote` | `(spec: string, opts?: { mode?: 'preload' \| 'prefetch' }) => Promise<void>` | 按 manifest 精确预载该远程全部 expose chunk + CSS(prefetch = 空闲时低优先级) |
246
246
  | `getContainer` | `(name: string) => Promise<容器>` | 取远程容器(触发加载 + init),容器协议 `{ name, init, get }` |
247
- | `registerRemote` / `registerRemotes` | `(config \| list) => void` | 运行时注册远程(promise remote / 动态地址)。RemoteConfig:`{ name, entry, shareScope?, timeout?, retries?, fallback?, breaker? }` |
247
+ | `registerRemote` / `registerRemotes` | `(config \| list) => void` | 运行时注册远程(promise remote / 动态地址)。`RemoteInput`:`{ name, entry, shareScope?, timeout?, retries?, fallback?, breaker? }` |
248
248
  | `registerShare` | `(scope, name, version, get, opts?) => void` | 手工注册共享模块(一般由 init 模块自动完成) |
249
249
  | `initSharing` | `(scopeName?) => ShareScopeMap` | 初始化共享作用域(一般由 init 模块自动完成) |
250
250
  | `registerPlugins` | `(plugins: RuntimePlugin[]) => void` | 注册运行时插件(见下) |
251
- | `provideFulgurjsAppConfig` | `(config: Record<string, any>) => void` | **@deprecated** 改用 `@fulgurjs/federation/context` 的 `provideFulgurjsAppContext`(存储同一份;见 §9) |
252
- | `getFulgurjsAppConfig` | `() => Record<string, any>` | **@deprecated** 改用 `@fulgurjs/federation/context` 的 `getFulgurjsAppContext`(存储同一份;见 §9) |
253
- | `getRuntime` | `() => FulgurjsRuntime` | 取运行时单例本体(与 `__FULGURJS_RUNTIME__` 同一实例) |
251
+ | `getRuntime` | `() => FgRuntime` | 取运行时单例本体(与 `__FULGURJS_RUNTIME__` 同一实例) |
254
252
  | `version` | `string` | 运行时/插件版本(跨源副本一致性诊断用) |
255
253
  | `unwrapDefault` | `(ns: any) => any` | ESM/CJS default interop 工具 |
256
254
 
@@ -292,15 +290,15 @@ export default {
292
290
  | `window.__FULGURJS_APP_CONFIG__` | W4 全局配置镜像 |
293
291
  | `window` 事件 `fulgurjs:error` | `CustomEvent<{ remote, error }>`,所有远程加载/共享错误都会发出 |
294
292
 
295
- ### 3. `defineFulgurjsPages` — 宿主页面路由表(`@fulgurjs/federation/pages`)
293
+ ### 3. `definePages` — 宿主页面路由表(`@fulgurjs/federation/pages`)
296
294
 
297
295
  宿主把「URL 路径 → 远程 exposes 键」的映射表交给它校验,带参路由的静默冲突在启动期报错而不是运行时加载错组件:
298
296
 
299
297
  ```ts
300
- import { defineFulgurjsPages } from '@fulgurjs/federation/pages'
298
+ import { definePages } from '@fulgurjs/federation/pages'
301
299
  import remoteSchema from 'virtual:fulgurjs-remote-schema' // dev 自动生成;build 恒为空(诚实降级)
302
300
 
303
- export const PAGES = defineFulgurjsPages(
301
+ export const PAGES = definePages(
304
302
  [
305
303
  { route: '/remote-a/home', name: 'RemoteAHome', title: '首页' },
306
304
  // 带参路由:缺省推导 spec = 去首段 + 剥 :参 段;与其它条目冲突时 ERROR,
@@ -326,14 +324,14 @@ export const PAGES = defineFulgurjsPages(
326
324
  | R4 | ERROR | 静态路由被更靠前的带参路由遮蔽(先到先得)/路由完全重复 |
327
325
  | R5 | WARN | name 重复(vue-router 命名跳转歧义) |
328
326
 
329
- `validateFulgurjsPages(pages, options)` 为独立导出:返回违例清单不抛错,便于自测。
327
+ `validatePages(pages, options)` 为独立导出:返回违例清单不抛错,便于自测。
330
328
 
331
329
  ### 4. `fulgurjs.config.ts` — CLI 单配置文件(`@fulgurjs/federation/config`)
332
330
 
333
331
  ```ts
334
- import { defineFulgurjsConfig } from '@fulgurjs/federation/config'
332
+ import { defineRepoConfig } from '@fulgurjs/federation/config'
335
333
 
336
- export default defineFulgurjsConfig({
334
+ export default defineRepoConfig({
337
335
  root: process.cwd(), // 工程根(monorepo 根或单应用仓库根)
338
336
  apps: [
339
337
  {
@@ -366,7 +364,7 @@ export default defineFulgurjsConfig({
366
364
  | `fulgurjs init --config <path>` | 校验配置(CFG 三段式报错)+ 输出各应用 `federation()` 粘贴块、NGINX no-cache 站点模板、8 条通用核对清单 |
367
365
  | `fulgurjs doctor --base <URL> --apps <a,b,c>` | 部署体检:remoteEntry/manifest/index.html 的 200/no-cache/JS 形态、CORS、chunk 抽样可达、版本 skew 预演。`--dev` 检查 dev 容器入口;`--json` 输出 JSON(CI 断言);`--chunk-sample N` 控制抽样数(默认 16)。**退出码:有 FAIL 即 1**,可直接做 CI 门禁 |
368
366
 
369
- ### 6. 错误码总表(32 个)
367
+ ### 6. 错误码总表(30 个)
370
368
 
371
369
  | 段 | 码 | 含义 |
372
370
  |---|---|---|
@@ -380,11 +378,9 @@ export default defineFulgurjsConfig({
380
378
  | | `CFG-008` | shared 非法组合(eager+import:false / shareKey 重复声明) |
381
379
  | DEV 开发期 | `DEV-001` | remote dev server 不可达(manifest 拉取失败) |
382
380
  | | `DEV-002` | remote dev manifest 为空或格式不识别 |
383
- | | `DEV-003` | shared 键被 optimizeDeps.exclude(已撤回,码表保留) |
384
381
  | | `DEV-004` | 已知 UMD-only 依赖不在 optimizeDeps.include(预构建内联本地 vue 风险) |
385
382
  | | `DEV-005` | remotes dev URL 端口无监听 |
386
383
  | | `DEV-006` | 宿主/远程插件版本不一致 |
387
- | | `DEV-008` | 远程页面静态导入 virtual:fulgurjs-runtime(破坏渲染上下文) |
388
384
  | | `DEV-009` | 门面/虚拟模块 404(.vite 缓存漂移,需清缓存重启) |
389
385
  | | `DEV-010` | dev 冷启动预构建窗口提示(首轮 30~60s 瞬态,非故障) |
390
386
  | BLD 构建期 | `BLD-001` | expose 源文件解析失败 |
@@ -400,10 +396,10 @@ export default defineFulgurjsConfig({
400
396
  | | `MFU-008` | 未知远程 |
401
397
  | | `MFU-009` | 加载到的模块没有任何导出 |
402
398
  | | `MFU-010` | singleton 共享版本漂移(使用作用域版本,告警) |
403
- | CC 跨应用上下文 | `CC-001` | AppContext 必需字段缺失(三段式:got/expected/example,修法指向宿主桥 `provideFulgurjsAppContext`) |
399
+ | CC 跨应用上下文 | `CC-001` | AppContext 必需字段缺失(三段式:got/expected/example,修法指向宿主桥 `provideAppContext`) |
404
400
  | | `CC-002` | 运行时单例不可用(独立直开远程页;修法 = 经宿主联邦加载,时序契约 bridge → federatedBoot → loadRemote) |
405
401
 
406
- 错误排查三段式文案与「配置出错?报错看得懂」一节(下文)为准;`fulgurjs doctor` 可提前把部署面的 MFU-001 类问题拦在上线前。
402
+ 错误排查三段式文案见「配置出错?报错看得懂」一节(下文);`fulgurjs doctor` 可提前把部署面的 MFU-001 类问题拦在上线前。
407
403
 
408
404
  ### 7. 产物与端点约定
409
405
 
@@ -445,15 +441,15 @@ const FederatedAmisForm = remoteComponent('demo-host/AmisFormRouterPage', {
445
441
  - `vue` 为**可选 peerDependency**(`peerDependenciesMeta.optional`):仅使用 `./vue` 子路径时才需要安装 Vue;runtime.js 保持框架无关(不 import vue),体积零增量;
446
442
  - 运行时实例经 `globalThis.__FULGURJS_RUNTIME__` 页面级单例复用,与 `virtual:fulgurjs-runtime` 的导入殊途同归,无需额外接线。
447
443
 
448
- ### 9. `FulgurjsAppContext` — 跨应用传值与方法引用(`@fulgurjs/federation/context`)
444
+ ### 9. `AppContext` — 跨应用传值与方法引用(`@fulgurjs/federation/context`)
449
445
 
450
446
  宿主向子应用传值、子应用向宿主反向注册方法,一律走这条一等公民通道(对标乾坤 `props`,但带类型与错误契约)——不再各自挂 `window.*` 裸口子。
451
447
 
452
448
  ```ts
453
449
  // —— 宿主桥(host/src/fulgurjs/host/bridge.ts):登录完成后一次性提供 ——
454
- import { provideFulgurjsAppContext } from '@fulgurjs/federation/context'
450
+ import { provideAppContext } from '@fulgurjs/federation/context'
455
451
 
456
- provideFulgurjsAppContext({
452
+ provideAppContext({
457
453
  user, // 宿主登录用户原始形态
458
454
  getToken, // 取最新 token(拉取式防过期)
459
455
  store: piniaInstance, // 宿主 pinia:子应用 useUserStore(ctx.store) 共享响应式状态
@@ -464,18 +460,18 @@ provideFulgurjsAppContext({
464
460
  })
465
461
 
466
462
  // —— 远程 boot(exposes/federatedBoot.ts):显式校验消费 ——
467
- import { requireFulgurjsAppContext } from '@fulgurjs/federation/context'
463
+ import { requireAppContext } from '@fulgurjs/federation/context'
468
464
 
469
- const { store, user, hostApp } = requireFulgurjsAppContext('store', 'user', 'hostApp')
465
+ const { store, user, hostApp } = requireAppContext('store', 'user', 'hostApp')
470
466
  // 缺任一键 → [fulgurjs:CC-001] 三段式抛错(got / expected / example 指向宿主桥);
471
467
  // 页面无运行时单例(独立直开远程页)→ [fulgurjs:CC-002] 显式,修法 = 经宿主联邦加载。
472
468
 
473
469
  // —— 远程页面读点 ——
474
- import { getFulgurjsAppContext } from '@fulgurjs/federation/context'
475
- const dict = getFulgurjsAppContext().events?.main?.getDictItems?.('sex')
470
+ import { getAppContext } from '@fulgurjs/federation/context'
471
+ const dict = getAppContext().events?.main?.getDictItems?.('sex')
476
472
 
477
473
  // —— 子应用反向注册方法给宿主(页面 onUnmounted 时记得摘除,见迁移指南「页面卸载清理清单」)——
478
- getFulgurjsAppContext().events!.bpm = { formEvent, formSubmitEvent }
474
+ getAppContext().events!.bpm = { formEvent, formSubmitEvent }
479
475
  ```
480
476
 
481
477
  标准字段表:
@@ -494,7 +490,7 @@ getFulgurjsAppContext().events!.bpm = { formEvent, formSubmitEvent }
494
490
 
495
491
  - `provide` = 顶层 merge(后写覆盖,幂等可多次);约定「宿主先写标准字段,远程只增不改宿主键」;嵌套对象(如 `events`)是**引用共享**,子应用挂属性即时可见(同 realm 直引用);
496
492
  - 时序契约:**bridge(provide)→ federatedBoot(require)→ 页面 loadRemote**——违反即在 boot 处显式失败(CC-001),不静默;
497
- - 数据语义 = **传输层快照 + 函数引用,非响应式**(与乾坤 props 同语义)。"实时"由三条正规通道承担:① `getToken()` / `events.main.*` 函数引用每次调用执行宿主最新闭包;② `context.store` 把宿主 pinia 递给子应用(共享响应式实例);③ 登录态变更 = 重新登录 = 页面刷新 = bridge 重跑全新 context。context 本体不做 Vue reactive(runtime 框架无关 + gzip 红线 + 跨包 proxy 双份陷阱);"中途变更需通知"的场景 0.9 预留 `onAppContextChange` 订阅。
493
+ - 数据语义 = **传输层快照 + 函数引用,非响应式**(与乾坤 props 同语义)。"实时"由三条正规通道承担:① `getToken()` / `events.main.*` 函数引用每次调用执行宿主最新闭包;② `context.store` 把宿主 pinia 递给子应用(共享响应式实例);③ 登录态变更 = 重新登录 = 页面刷新 = bridge 重跑全新 context。context 本体不做 Vue reactive(runtime 框架无关 + gzip 红线 + 跨包 proxy 双份陷阱);"中途变更需通知"的场景:等真实需求出现再设计(当前无此场景,不预留空 API)。
498
494
 
499
495
  方法引用两条通道:
500
496
 
@@ -522,7 +518,7 @@ const { getDictItems } = await loadRemote('demo-host/api')
522
518
  const res = await getDictItems('sex')
523
519
  ```
524
520
 
525
- 存储说明:context 与全局镜像 `window.__FULGURJS_APP_CONFIG__` 是**同一份**存储——旧名 `provideFulgurjsAppConfig / getFulgurjsAppConfig`(`virtual:fulgurjs-runtime`)继续可用但已标 `@deprecated`,请统一使用 context 子路径。
521
+ 存储说明:context 的存储本体即全局镜像对象 `window.__FULGURJS_APP_CONFIG__`(页面级单例,跨 bundle 副本共享同一份;调试面板可直接查看)。
526
522
 
527
523
  ### 9.1 乾坤功能融合:保活 / 骨架屏 / 空闲预载 / 诊断面板(宿主与模板侧能力)
528
524
 
@@ -705,7 +701,6 @@ const Panel = await loadRemote('shop/Panel', {
705
701
 
706
702
  ## 文档
707
703
 
708
- - [`docs/manual.html`](https://github.com/chenmingye/fulgurjs-federation/blob/master/docs/manual.html) — 早期使用手册(历史存档,不再随 npm 包发布):webpack 逐项对齐总表与部分实测截图;**当前形态以本 README 为准**
709
704
  - [`docs/迁移指南.md`](https://github.com/chenmingye/fulgurjs-federation/blob/master/docs/迁移指南.md) — qiankun 微前端 → 联邦的真实迁移案例(七步法 + 验收清单)
710
705
  - [`docs/webpack-mf-对照与缺口.md`](https://github.com/chenmingye/fulgurjs-federation/blob/master/docs/webpack-mf-对照与缺口.md) — webpack MF 逐项对照与明确不支持清单
711
706
  - [`docs/沙箱边界审计.md`](https://github.com/chenmingye/fulgurjs-federation/blob/master/docs/沙箱边界审计.md) — CSS / 全局变量 / 公共依赖三维度互扰实测
@@ -714,15 +709,25 @@ const Panel = await loadRemote('shop/Panel', {
714
709
  ## 开发与测试
715
710
 
716
711
  ```bash
717
- pnpm install
718
- pnpm test # 单测(148)+ fixtures dev e2e(10)+ prod e2e(8)
719
- pnpm test:unit # 仅单测
720
- pnpm test:dev # 仅 dev e2e(Vite 6/7/8 矩阵见 CI)
721
- pnpm test:prod # 仅 prod e2e
712
+ # 各子项目独立安装(根目录不是 workspace);插件需先 build,
713
+ # fixtures 经 link: 消费插件 dist,而 dist 运行时依赖就地安装在插件目录
714
+ pnpm --dir packages/plugin install && pnpm --dir packages/plugin build
715
+ for app in fixtures/host-vue fixtures/remote-a fixtures/remote-b e2e; do pnpm --dir "$app" install; done
716
+
717
+ pnpm test:unit # 单测(188)
718
+ pnpm test:dev # dev e2e(10)
719
+ pnpm test:prod # prod e2e(8,需 NGINX,见 e2e/scripts/prod-setup.sh)
720
+ pnpm test # unit + dev + prod 全跑
721
+ pnpm --dir e2e exec playwright test --project=dev --project=fault # dev + 容错 e2e(12)
722
722
  bash e2e/h7-install-test.sh # H7 装后实测:pack → 干净目录 → dev+prod 双引擎断言
723
723
  ```
724
724
 
725
- CI(GitHub Actions):单测 + fixtures e2e(Vite 6.4.3 / 7.3.6 / 8.3.0 矩阵)+ runtime gzip 5KB 红线守卫,每次推送自动运行。
725
+ CI(GitHub Actions,每次推送/PR 自动运行)两个作业:
726
+
727
+ - `test`:单测 + 双口径 typecheck(pinned / latest)+ build 门禁(runtime gzip ≤ 6144B、错误码三方一致性);
728
+ - `e2e`:fixtures e2e(dev + fault 共 12 例)× Vite 6.4.3 / 7.3.6 / 8.3.0 兼容矩阵。
729
+
730
+ prod e2e 需 NGINX,不进 CI(本地或真实项目 testbed 验证)。
726
731
 
727
732
  ## License
728
733
 
package/client.d.ts CHANGED
@@ -2,8 +2,9 @@
2
2
  * virtual:fulgurjs-runtime 客户端类型声明。
3
3
  *
4
4
  * 用法(二选一):
5
- * 1. dev 启动后插件自动在 src/fulgurjs-types/fulgurjs-runtime.d.ts 生成加载垫片——
6
- * 只要 tsconfig include 了该目录(远程模块类型直连本就要求),运行时类型零配置生效;
5
+ * 1. dev 启动后插件自动在类型目录(默认 src/fulgurjs/types/,无 src 布局回退 .fulgurjs/types/)
6
+ * 生成 fulgurjs-runtime.d.ts 加载垫片——只要 tsconfig include 了该目录
7
+ * (远程模块类型直连本就要求),运行时类型零配置生效;
7
8
  * 2. tsconfig.json → compilerOptions.types 加 "@fulgurjs/federation/client"(对齐 vite/client 模式)。
8
9
  *
9
10
  * ⚠️ 本文件必须是 script 形态(顶层不得出现 import/export)——环境模块声明
@@ -64,7 +65,7 @@ declare module 'virtual:fulgurjs-runtime' {
64
65
  * 此处仅类型随虚拟模块声明供 type-only import);读写约定:宿主桥先写标准字段,
65
66
  * 远程 boot 只增不改宿主键;嵌套对象(如 events)引用共享。
66
67
  */
67
- export interface FulgurjsAppContext {
68
+ export interface AppContext {
68
69
  /** 宿主登录用户原始形态(只读约定) */
69
70
  user: Record<string, any>
70
71
  /** 取最新 token(拉取式防过期;0.8.2 起 bridge 不再传一次性 token 快照) */
@@ -82,9 +83,9 @@ declare module 'virtual:fulgurjs-runtime' {
82
83
  }
83
84
 
84
85
  /** 运行时单例(与 globalThis.__FULGURJS_RUNTIME__ 同一实例,方法面冻结) */
85
- export interface FulgurjsRuntime {
86
+ export interface FgRuntime {
86
87
  shareScopeMap: Record<string, Record<string, Record<string, ShareEntry>>>
87
- initSharing(scopeName?: string): FulgurjsRuntime['shareScopeMap']
88
+ initSharing(scopeName?: string): FgRuntime['shareScopeMap']
88
89
  registerShare(
89
90
  scopeName: string,
90
91
  name: string,
@@ -100,17 +101,13 @@ declare module 'virtual:fulgurjs-runtime' {
100
101
  getContainer(name: string): Promise<{ name: string; init: (scope: unknown) => void | Promise<void>; get: (module: string) => Promise<any> }>
101
102
  preloadRemote(spec: string, opts?: PreloadRemoteOptions): Promise<void>
102
103
  parseSpec(spec: string): { remote: string; module: string }
103
- /** @deprecated 0.8.0 起改用 '@fulgurjs/federation/context' 的 provideFulgurjsAppContext(存储同一份,新名语义更准) */
104
- provideFulgurjsAppConfig(config: Record<string, any>): void
105
- /** @deprecated 0.8.0 起改用 '@fulgurjs/federation/context' 的 getFulgurjsAppContext(存储同一份,新名语义更准) */
106
- getFulgurjsAppConfig(): Record<string, any>
107
104
  }
108
105
 
109
106
  export const version: string
110
- export const runtime: FulgurjsRuntime
111
- export const shareScopeMap: FulgurjsRuntime['shareScopeMap']
112
- export function getRuntime(): FulgurjsRuntime
113
- export function initSharing(scopeName?: string): FulgurjsRuntime['shareScopeMap']
107
+ export const runtime: FgRuntime
108
+ export const shareScopeMap: FgRuntime['shareScopeMap']
109
+ export function getRuntime(): FgRuntime
110
+ export function initSharing(scopeName?: string): FgRuntime['shareScopeMap']
114
111
  export function registerShare(
115
112
  scopeName: string,
116
113
  name: string,
@@ -128,13 +125,9 @@ declare module 'virtual:fulgurjs-runtime' {
128
125
  ): Promise<{ name: string; init: (scope: unknown) => void | Promise<void>; get: (module: string) => Promise<any> }>
129
126
  export function preloadRemote(spec: string, opts?: PreloadRemoteOptions): Promise<void>
130
127
  export function parseSpec(spec: string): { remote: string; module: string }
131
- /** @deprecated 0.8.0 起改用 '@fulgurjs/federation/context' 的 provideFulgurjsAppContext(存储同一份,新名语义更准) */
132
- export function provideFulgurjsAppConfig(config: Record<string, any>): void
133
- /** @deprecated 0.8.0 起改用 '@fulgurjs/federation/context' 的 getFulgurjsAppContext(存储同一份,新名语义更准) */
134
- export function getFulgurjsAppConfig(): Record<string, any>
135
128
  /** 兜底解包:命名空间有 default 取 default,否则原样返回 */
136
129
  export function unwrapDefault<T>(ns: { default?: T } | T): T
137
130
  /** 与 globalThis.__FULGURJS_RUNTIME__ 同一实例(方法面冻结) */
138
- const runtimeDefault: FulgurjsRuntime
131
+ const runtimeDefault: FgRuntime
139
132
  export default runtimeDefault
140
133
  }
@@ -1,10 +1,10 @@
1
1
  // src/runtime/errors.ts
2
- var FulgurjsError = class extends Error {
2
+ var FgError = class extends Error {
3
3
  code;
4
4
  details;
5
5
  constructor(code, message, details) {
6
6
  super(`[fulgurjs:${code}] ${message}`);
7
- this.name = "FulgurjsError";
7
+ this.name = "FgError";
8
8
  this.code = code;
9
9
  this.details = details;
10
10
  }
@@ -33,6 +33,6 @@ var ErrorCodes = {
33
33
  };
34
34
 
35
35
  export {
36
- FulgurjsError,
36
+ FgError,
37
37
  ErrorCodes
38
38
  };
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var RUNTIME_VERSION = "0.9.1-test.1";
2
+ var RUNTIME_VERSION = "2.0.0";
3
3
 
4
4
  export {
5
5
  RUNTIME_VERSION
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ var __export = (target, all) => {
10
10
  };
11
11
 
12
12
  // src/config.ts
13
- async function loadFulgurjsConfig(configPath) {
13
+ async function loadRepoConfig(configPath) {
14
14
  const { pathToFileURL, fileURLToPath } = await import("node:url");
15
15
  const { createRequire } = await import("node:module");
16
16
  const fs2 = await import("node:fs");
@@ -187,7 +187,7 @@ function appSummary(app) {
187
187
  return lines.join("\n");
188
188
  }
189
189
  async function inspectConfig(configPath) {
190
- const cfg = await loadFulgurjsConfig(configPath);
190
+ const cfg = await loadRepoConfig(configPath);
191
191
  const out = [];
192
192
  out.push(`${MARK} \u914D\u7F6E\u6821\u9A8C\u901A\u8FC7\uFF1Aroot=${cfg.root}\uFF0Capps=${cfg.apps.length}`);
193
193
  out.push("\u5E94\u7528\u6458\u8981\uFF1A");
@@ -205,8 +205,8 @@ async function inspectConfig(configPath) {
205
205
  out.push("2. expose \u4E00\u5F8B\u6307\u5411\u72EC\u7ACB\u9875\uFF08\u9875\u9762\u4ECE\u8DEF\u7531\u53D6\u53C2\uFF09\uFF1B\u7EC4\u4EF6\u9700\u8981\u5FC5\u586B props \u65F6\u7ED9\u9ED8\u8BA4\u503C\uFF08BLD-003\uFF09");
206
206
  out.push("3. shared \u91CC vue / vue-router / pinia \u5EFA\u8BAE singleton: true\u2014\u2014\u8DE8\u5E94\u7528\u5FC5\u987B\u540C\u5B9E\u4F8B\uFF08\u5168\u5C40\u54CD\u5E94\u6027\u3001getActivePinia\u3001\u8DEF\u7531\u6CE8\u5165\uFF09");
207
207
  out.push("4. \u8FDC\u7A0B\u7684\u5168\u5C40\u526F\u4F5C\u7528\uFF08\u5168\u5C40\u7EC4\u4EF6/\u6307\u4EE4/\u542F\u52A8\u671F\u521D\u59CB\u5316\uFF09\u5C01\u88C5\u4E3A\u542F\u52A8\u5668\u6A21\u5757\u5E76 expose\uFF0C\u5BBF\u4E3B\u5728 loadRemote \u9875\u9762\u524D\u8C03\u7528\uFF1B");
208
- out.push(" \u8DE8\u5E94\u7528\u5168\u5C40\u914D\u7F6E\uFF08locale/size \u7B49\uFF09\u7528\u8FD0\u884C\u65F6 provideFulgurjsAppConfig / getFulgurjsAppConfig \u534F\u5546\uFF0C\u4E0D\u8981\u5404\u526F\u672C\u624B\u5DE5\u6CE8\u5165");
209
- out.push("5. \u8FDC\u7A0B\u9875\u9762\u53D6\u5BBF\u4E3B\u8FD0\u884C\u65F6\u4E00\u5F8B\u8D70 globalThis.__FULGURJS_RUNTIME__ / getRuntime()\uFF0C\u7981\u6B62\u9759\u6001\u5BFC\u5165\u865A\u62DF\u8FD0\u884C\u65F6\uFF08DEV-008\uFF09");
208
+ out.push(" \u8DE8\u5E94\u7528\u4F20\u503C\uFF08locale/store/\u4E8B\u4EF6\u7B49\uFF09\u7EDF\u4E00\u8D70 @fulgurjs/federation/context\uFF1A\u5BBF\u4E3B provideAppContext \u4E00\u6B21\u5199\u5165\uFF0C\u8FDC\u7A0B boot \u7528 getAppContext / requireAppContext \u6D88\u8D39");
209
+ out.push("5. \u8FDC\u7A0B\u9875\u9762\u53EF\u76F4\u63A5\u9759\u6001\u5BFC\u5165 virtual:fulgurjs-runtime\uFF08\u63D2\u4EF6\u81EA\u52A8\u6539\u5199\u4E3A\u60F0\u6027\u5355\u4F8B\u59D4\u6258\uFF09\uFF1B\u7279\u9700\u76F4\u53D6\u5168\u5C40\u5355\u4F8B\u65F6\u7528 getRuntime()");
210
210
  out.push('6. dev \u51B7\u542F\u52A8\u9996\u8F6E 30~60s \u6709\u9884\u6784\u5EFA\u7A97\u53E3\uFF08\u77AC\u65F6 504/"ce"\uFF0CDEV-010\uFF09\uFF1A\u5148\u771F\u5B9E\u6253\u5F00\u9875\u9762\u9884\u70ED\u518D\u505A\u65AD\u8A00');
211
211
  out.push("7. \u90E8\u7F72\u540E\u4F53\u68C0\uFF1Afulgurjs doctor --base <URL> --apps <\u5E94\u7528...>\uFF08\u7F13\u5B58\u5934/\u8D44\u6E90\u5F62\u6001/CORS/chunk \u53EF\u8FBE/\u7248\u672C skew\uFF09");
212
212
  out.push("8. \u90E8\u7F72\u8BED\u4E49\uFF1AremoteEntry/manifest/index.html \u5FC5\u987B no-cache\uFF08\u4E25\u7981 immutable\uFF09\uFF1B\u5E26 hash \u7684 assets \u957F\u7F13\u5B58");
@@ -221,9 +221,9 @@ var init_init = __esm({
221
221
  STARTER_CONFIG = `// fulgurjs.config.ts \u2014\u2014 @fulgurjs/federation \u63A5\u5165\u914D\u7F6E\uFF08\u5355\u6587\u4EF6\u9A71\u52A8\uFF0C\u53EF\u5165\u5E93\u3001\u53EF\u590D\u8DD1\uFF09
222
222
  // \u7528\u6CD5\uFF1Anpx fulgurjs init --config fulgurjs.config.ts \u6821\u9A8C\u914D\u7F6E\u5E76\u8F93\u51FA\u53EF\u7C98\u8D34\u6837\u677F\u4E0E\u6838\u5BF9\u6E05\u5355
223
223
  // npx fulgurjs doctor --base http://<\u7AD9\u70B9> --apps <\u5E94\u7528\u76EE\u5F55\u540D...> \u90E8\u7F72\u4F53\u68C0
224
- import { defineFulgurjsConfig } from '@fulgurjs/federation/config'
224
+ import { defineRepoConfig } from '@fulgurjs/federation/config'
225
225
 
226
- export default defineFulgurjsConfig({
226
+ export default defineRepoConfig({
227
227
  // \u5DE5\u7A0B\u6839\u76EE\u5F55\uFF08monorepo \u6839\u6216\u5355\u5E94\u7528\u4ED3\u5E93\u6839\uFF09
228
228
  root: process.cwd(),
229
229
  apps: [
package/dist/config.cjs CHANGED
@@ -30,15 +30,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/config.ts
31
31
  var config_exports = {};
32
32
  __export(config_exports, {
33
- defineFulgurjsConfig: () => defineFulgurjsConfig,
34
- loadFulgurjsConfig: () => loadFulgurjsConfig
33
+ defineRepoConfig: () => defineRepoConfig,
34
+ loadRepoConfig: () => loadRepoConfig
35
35
  });
36
36
  module.exports = __toCommonJS(config_exports);
37
37
  var import_meta = {};
38
- function defineFulgurjsConfig(config) {
38
+ function defineRepoConfig(config) {
39
39
  return config;
40
40
  }
41
- async function loadFulgurjsConfig(configPath) {
41
+ async function loadRepoConfig(configPath) {
42
42
  const { pathToFileURL, fileURLToPath } = await import("url");
43
43
  const { createRequire } = await import("module");
44
44
  const fs = await import("fs");
@@ -109,6 +109,6 @@ async function loadFulgurjsConfig(configPath) {
109
109
  }
110
110
  // Annotate the CommonJS export names for ESM import in node:
111
111
  0 && (module.exports = {
112
- defineFulgurjsConfig,
113
- loadFulgurjsConfig
112
+ defineRepoConfig,
113
+ loadRepoConfig
114
114
  });
package/dist/config.d.cts CHANGED
@@ -3,7 +3,7 @@
3
3
  * 主包内置 bin + 单配置文件驱动,可入库可复跑)。
4
4
  * init 只消费该配置生成通用样板(见 init.ts);插件运行时(federation())不读取本文件。
5
5
  */
6
- interface FulgurjsPageEntry {
6
+ interface PageEntry {
7
7
  /** 宿主路由路径(参数段用 :xx) */
8
8
  route: string;
9
9
  /** 路由 name(命名跳转依赖) */
@@ -13,25 +13,25 @@ interface FulgurjsPageEntry {
13
13
  /** 页签标题 */
14
14
  title?: string;
15
15
  }
16
- interface FulgurjsRemoteAddress {
16
+ interface RemoteAddress {
17
17
  dev: string;
18
18
  prod: string;
19
19
  }
20
- interface FulgurjsHostConfig {
20
+ interface HostConfig {
21
21
  /** 页面路由表 */
22
- pages: FulgurjsPageEntry[];
22
+ pages: PageEntry[];
23
23
  /** 路由前缀 → 远程名 */
24
24
  remotePrefixes: Record<string, string>;
25
25
  /** 消费的远程地址(键 = import 前缀;裸 URL,对象形式不支持 name@ 前缀) */
26
- remotes: Record<string, FulgurjsRemoteAddress>;
26
+ remotes: Record<string, RemoteAddress>;
27
27
  }
28
- interface FulgurjsRemoteConfig {
28
+ interface RemoteConfig {
29
29
  /** exposes:./键 → 源文件(独立页) */
30
30
  exposes: Record<string, string>;
31
31
  /** 反向消费的远程(双向联邦时;dev 下自身源码参与协商需 devSharedSelf: true) */
32
- remotes?: Record<string, FulgurjsRemoteAddress>;
32
+ remotes?: Record<string, RemoteAddress>;
33
33
  }
34
- interface FulgurjsAppConfig {
34
+ interface AppConfig {
35
35
  /** 相对 root 的应用目录 */
36
36
  path: string;
37
37
  /** 联邦容器名 */
@@ -43,30 +43,30 @@ interface FulgurjsAppConfig {
43
43
  /** 部署目录名(缺省取 base 去斜杠) */
44
44
  deployDir?: string;
45
45
  /** 宿主角色 */
46
- host?: FulgurjsHostConfig;
46
+ host?: HostConfig;
47
47
  /** 远程角色 */
48
- remote?: FulgurjsRemoteConfig;
48
+ remote?: RemoteConfig;
49
49
  /** 该应用的 shared 表(缺省建议 vue/vue-router/pinia singleton,见 init 输出的样板) */
50
50
  shared?: Record<string, {
51
51
  singleton?: boolean;
52
52
  requiredVersion?: string;
53
53
  }>;
54
54
  }
55
- interface FulgurjsDeployConfig {
55
+ interface DeployConfig {
56
56
  /** NGINX 站点根(样板输出用,可选) */
57
57
  webRoot?: string;
58
58
  /** 监听端口(样板输出用,可选) */
59
59
  listen?: number;
60
60
  }
61
- interface FulgurjsRepoConfig {
61
+ interface RepoConfig {
62
62
  /** 工程根(monorepo 根或单应用仓库根) */
63
63
  root: string;
64
- apps: FulgurjsAppConfig[];
65
- deploy?: FulgurjsDeployConfig;
64
+ apps: AppConfig[];
65
+ deploy?: DeployConfig;
66
66
  }
67
- type FulgurjsUserConfig = Partial<FulgurjsRepoConfig>;
67
+ type UserConfig = Partial<RepoConfig>;
68
68
  /** 用户配置文件入口:仅做类型收窄(identity),不引入运行时逻辑 */
69
- declare function defineFulgurjsConfig(config: FulgurjsUserConfig): FulgurjsUserConfig;
69
+ declare function defineRepoConfig(config: UserConfig): UserConfig;
70
70
  /**
71
71
  * 加载 fulgurjs.config.ts(或 .js/.json)。
72
72
  * - 配置内的 `@fulgurjs/federation/config` 导入被重写为本包 dist/config.js 绝对路径——
@@ -74,6 +74,6 @@ declare function defineFulgurjsConfig(config: FulgurjsUserConfig): FulgurjsUserC
74
74
  * - TS 走 Node 原生类型剥离(Node ≥23.6 默认开启;配置文件须用可擦除语法——纯对象无 enum/namespace);
75
75
  * 老版本 Node 回退 esbuild 转译(先试配置工程,再试 CLI 自带依赖树)。
76
76
  */
77
- declare function loadFulgurjsConfig(configPath: string): Promise<FulgurjsRepoConfig>;
77
+ declare function loadRepoConfig(configPath: string): Promise<RepoConfig>;
78
78
 
79
- export { type FulgurjsAppConfig, type FulgurjsDeployConfig, type FulgurjsHostConfig, type FulgurjsPageEntry, type FulgurjsRemoteAddress, type FulgurjsRemoteConfig, type FulgurjsRepoConfig, type FulgurjsUserConfig, defineFulgurjsConfig, loadFulgurjsConfig };
79
+ export { type AppConfig, type DeployConfig, type HostConfig, type PageEntry, type RemoteAddress, type RemoteConfig, type RepoConfig, type UserConfig, defineRepoConfig, loadRepoConfig };