Skip to content

fix(deploy): 模块挂载回归 §5.3 zone 路径制(B 方案)+ hello 页面 ESM 修复(T3) - #61

Merged
HandyWote merged 4 commits into
m0/devfrom
fix/task-a
Sep 8, 2026
Merged

fix(deploy): 模块挂载回归 §5.3 zone 路径制(B 方案)+ hello 页面 ESM 修复(T3)#61
HandyWote merged 4 commits into
m0/devfrom
fix/task-a

Conversation

@HandyWote

Copy link
Copy Markdown
Contributor

关联

Ref #59(issue 主体 + T3 修复)。真源:docs/PRODUCT_SPEC.md §5.3 单域名路径路由。

待定案①处理:config.ts 不加 zone 字段(按定案)——模块 zone 路由 pattern 直接用 config.domain 全值,zone 解析交由 wrangler 按 pattern 匹配;此假设已在 README 注明「待真机验证」。

改动

文件 改动
deploy/cloudflare/src/assemble.ts 模块 routes 回归 zone 路径 <domain>/m/<id>/*(无 custom_domain 标记);core 主域 custom_domain:true 保留不动;修正 10405 失实注释(OAuth 对 zone 路由授权不足)与「绝对 URL 头重写」虚构表述;抽 buildModuleSdkAssets(IIFE + ESM 双产物)
deploy/cloudflare/src/smoke.ts moduleSubdomain 参数与子域分支,模块探测回归 <baseUrl>/m/<id>/api/health
deploy/cloudflare/src/steps.ts moduleSubdomain flag;步骤④日志改回「绑 <domain>/m/<id>/* 路由(zone 路径)」;http: 注入口标注 @internal 仅测试用
modules/hello/src/index.ts 页面 import 改 ./sdk/module-sdk.esm.jsT3:线上 sdk.js 为 IIFE 无顶层 export,ESM 具名导入报 SyntaxError)
测试 three-way-consistency.test.ts(三方一致性红测,修复前 HEAD 上红)、smoke.test.ts(真实 smokeCheck 两模式 URL/行为断言)、assemble.test.ts(routes 整对象 toEqual + ESM 产物可具名 import 回归测)
deploy/cloudflare/README.md 部署凭证段补 API Token 权限清单(Account: Workers Scripts/D1/R2 Edit;Zone: Workers Routes Edit)+ 10405 背景 + zone 假设注记

验收对照表(issue #59

验收项 结果 证据
真机重部署 unself.demo.handywote.top/m/hello/* 三类 200 ⏳ 待真机 本 PR 为代码/测试层;真机步骤需主会话在 CF 账号执行
iframe 装载正常握手(#57 ⏳ 待真机 三方一致性测覆盖 entry==route==smoke;真机握手待验
冒烟全绿且探测 URL = 主域路径 ✅ 代码+单测 smoke.test.ts 断言两模式 URL 整数组;steps.test.ts 输出 ✓ module:hello → https://x.example/m/hello/api/health
三方一致性红测绿;#56/#57/#58 三链有防线 three-way-consistency.test.ts 修复前 2 用例红(子域 custom_domain)→ 修后绿
pnpm -r typecheck && pnpm -r test && pnpm -r build 全绿 本机全绿,199 用例(contracts 23 / ui 2 / module-sdk 32 / shell 39 / deploy 37 / core-api 56 / hello 10)
#16 七步剧本真机重跑按条录结果 ⏳ 待真机 同上

测试

pnpm -r typecheck   # 8 包全绿
pnpm -r test        # 199 passed
pnpm -r build       # 8 包全绿

T3 回归测为行为级:真实 esbuild 构建 ESM 产物后动态 import,断言 typeof createModuleSDK === 'function' 且导出集为 createD1Storage/createModuleSDK/decodeJwtPayload/verifyModuleToken;IIFE 产物断言无顶层 export。

备注

  • 本 PR 分支线性(基于 origin/m0/dev@57a2d73 的 4 个小步提交),请用 rebase 合并。
  • config.ts/unself.config.jsonc 未改(待定案①按「不加 zone 字段」执行)。

- moduleWranglerConfig:模块 routes 改 <domain>/m/<id>/*(无 custom_domain 标记
  = zone 路径路由),与 core 主域同域按前缀分发;core 主域 custom_domain 保留不动
- smokeCheck:删 moduleSubdomain 参数与子域分支,模块探测回归
  <baseUrl>/m/<id>/api/health(domain/workers.dev 两模式同形)
- steps:删 moduleSubdomain flag;步骤④日志成真(绑 <domain>/m/<id>/* 路由);
  http 注入口标注 @internal 仅测试用(生产走真实 smokeCheck)
- 修正失实注释:10405 背景(OAuth 对 zone 路由授权不足,需 API Token 带
  Zone: Workers Routes Edit);删「绝对 URL 头重写」虚构表述
- assemble 抽 buildModuleSdkAssets(IIFE + ESM 双产物,供页面 ESM 具名导入)

Ref #59

Signed-off-by: HandyWote <huangyinghui01@corp.netease.com>
- three-way-consistency:同一 config 下「registry entry 装载点 == wrangler route
  路由点 == 步骤⑨冒烟探测点」host+前缀一致;core 主域 custom_domain、模块 zone
  路径路由形态整对象断言(修复前 HEAD 上红)
- smoke.test.ts:真实 smokeCheck + stub fetch,domain/workers.dev 两模式 URL
  整数组断言 + ok/detail 行为断言(响应体缺 ok、HTTP 503、不可达)
- assemble.test.ts:模块 routes 改整对象 toEqual;新增 buildModuleSdkAssets
  回归测(ESM 产物可 import 具名 createModuleSDK,IIFE 无顶层 export)

Ref #59

Signed-off-by: HandyWote <huangyinghui01@corp.netease.com>
装配产物中 sdk/module-sdk.js 是 esbuild IIFE,无顶层 export——浏览器 ESM 具名导入
报 SyntaxError、脚本死、握手失败(线上实锤)。module-sdk.esm.js 是同包二次打包的
ESM 产物(assemble.ts 已生成),具名 createModuleSDK 可用;测试断言同步。

Ref #59

Signed-off-by: HandyWote <huangyinghui01@corp.netease.com>
- 部署凭证以 API Token 为主路径:Account: Workers Scripts/D1/R2 Edit;
  Zone(config.domain 所属 zone): Workers Routes Edit
- 补 10405 背景:wrangler login 的 OAuth 对 zone 路由授权不足,必须用 API Token
- 注记待真机验证的假设:zone 路由 pattern 直接用 config.domain 全值,
  zone 解析交由 wrangler 按 pattern 匹配(多级子域推不出 zone,故不引入 zone 字段)

Ref #59

Signed-off-by: HandyWote <huangyinghui01@corp.netease.com>
@HandyWote
HandyWote merged commit 2484316 into m0/dev Sep 8, 2026
1 check passed
@HandyWote
HandyWote deleted the fix/task-a branch September 8, 2026 10:49
HandyWote added a commit that referenced this pull request Sep 8, 2026
真机首次部署被 wrangler schema 拦下:routes[] 元素形态是
{ pattern, custom_domain, zone_id | zone_name, ... },zone 路由无
zone_id/zone_name 直接拒收(#61 的测试断言了不合法形态——T5 假
Wrangler 类盲区实证)。修法:

- assemble.ts:core/module 两个配置生成器接受 zoneName,routes 对象
  带 zone_name(wrangler 按 zone 名解析,无需 zone_id)
- steps.ts:部署前经 API 逐级上溯探测 zone(resolveZone 注入口),
  探测失败硬报错(zone 路由必需);zone 结果复用给 DNS 自愈步骤,
  避免二次 API 调用
- 测试:assemble/三方一致性断言同步 zone_name 形态;steps 测试全面
  改用 configOverride(隔离部署者本地 domain 状态——此前 domain 填充
  导致非 domain 用例误走 zone 探测路径,一并修掉)

Signed-off-by: huangyinghui <18666119673@163.com>
HandyWote added a commit that referenced this pull request Sep 8, 2026
真机首次部署被 wrangler schema 拦下:routes[] 元素形态是
{ pattern, custom_domain, zone_id | zone_name, ... },zone 路由无
zone_id/zone_name 直接拒收(#61 的测试断言了不合法形态——T5 假
Wrangler 类盲区实证)。修法:

- assemble.ts:core/module 两个配置生成器接受 zoneName,routes 对象
  带 zone_name(wrangler 按 zone 名解析,无需 zone_id)
- steps.ts:部署前经 API 逐级上溯探测 zone(resolveZone 注入口),
  探测失败硬报错(zone 路由必需);zone 结果复用给 DNS 自愈步骤,
  避免二次 API 调用
- 测试:assemble/三方一致性断言同步 zone_name 形态;steps 测试全面
  改用 configOverride(隔离部署者本地 domain 状态——此前 domain 填充
  导致非 domain 用例误走 zone 探测路径,一并修掉)

Signed-off-by: huangyinghui <18666119673@163.com>
HandyWote added a commit that referenced this pull request Sep 9, 2026
真机首次部署被 wrangler schema 拦下:routes[] 元素形态是
{ pattern, custom_domain, zone_id | zone_name, ... },zone 路由无
zone_id/zone_name 直接拒收(#61 的测试断言了不合法形态——T5 假
Wrangler 类盲区实证)。修法:

- assemble.ts:core/module 两个配置生成器接受 zoneName,routes 对象
  带 zone_name(wrangler 按 zone 名解析,无需 zone_id)
- steps.ts:部署前经 API 逐级上溯探测 zone(resolveZone 注入口),
  探测失败硬报错(zone 路由必需);zone 结果复用给 DNS 自愈步骤,
  避免二次 API 调用
- 测试:assemble/三方一致性断言同步 zone_name 形态;steps 测试全面
  改用 configOverride(隔离部署者本地 domain 状态——此前 domain 填充
  导致非 domain 用例误走 zone 探测路径,一并修掉)

Signed-off-by: huangyinghui <18666119673@163.com>
HandyWote added a commit that referenced this pull request Sep 9, 2026
真机首次部署被 wrangler schema 拦下:routes[] 元素形态是
{ pattern, custom_domain, zone_id | zone_name, ... },zone 路由无
zone_id/zone_name 直接拒收(#61 的测试断言了不合法形态——T5 假
Wrangler 类盲区实证)。修法:

- assemble.ts:core/module 两个配置生成器接受 zoneName,routes 对象
  带 zone_name(wrangler 按 zone 名解析,无需 zone_id)
- steps.ts:部署前经 API 逐级上溯探测 zone(resolveZone 注入口),
  探测失败硬报错(zone 路由必需);zone 结果复用给 DNS 自愈步骤,
  避免二次 API 调用
- 测试:assemble/三方一致性断言同步 zone_name 形态;steps 测试全面
  改用 configOverride(隔离部署者本地 domain 状态——此前 domain 填充
  导致非 domain 用例误走 zone 探测路径,一并修掉)

Signed-off-by: huangyinghui <18666119673@163.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant