Files
youle_cocos/docs/superpowers/specs/2026-09-05-unified-startup-config-design.md
T

4.3 KiB
Raw Blame History

单文件启动配置

已批准方案

用户要求把远程配置地址、debug/release、是否使用本地服务器集中在同一个代码文件,便于发布修改;已确认布尔字段命名 useLocalServer,并回复“可以”授权实施。

唯一可编辑配置入口为已有 cocoscreator_projects/YouleNexus/assets/framework/config/profiles.ts:

export const STARTUP_CONFIG = {
  mode: 'debug',
  gameserver: 'https://tsgames.daoqi88.cn/config/update_jsonv2.txt',
  useLocalServer: true,
  localServers: ['ws://127.0.0.1:3088'],
} as const;

上述四项只定义一处。配置有明确 StartupConfig 类型、只读约束和入口验证;发布时仅修改这里的 mode 和 useLocalServer。应用 mode 不冒充 Creator 的编译 DEBUG 标志;引擎构建选项仍由 Creator 管理。

读取与来源

  • 生产入口不再传 mode 常量;runtime-mode.ts 不读取 URL、不探测全局 DEBUG、不默认 debug。它保留类型和必要的纯模式读取功能,最终模式来自 STARTUP_CONFIG。
  • runtime-config.ts 默认消费 STARTUP_CONFIG。保留显式整体配置注入作为纯测试接缝(options.startupConfig),不保留单独 mode/profile/servers 的第二套来源。
  • URL 的 mode/profile 完全不参与模式和目标选择,包括冲突值或重复项,不因此拒绝网页启动。
  • 原生/H5 的既有 gameconfig 注入解码、身份 query/native/BUILD 来源保持兼容,不把身份搬迁或复制。正常网页无参数即可运行。
  • 旧 PROFILES/ACTIVE_PROFILE/resolveActiveProfile 不再作为生产配置来源;删除不再使用的选择逻辑,避免维护两套配置。仅用于旧 facade 或账号存储命名的派生 profile 标签不构成配置开关。

模式与服务器选择

debug/release 与 useLocalServer 是两个独立字段,四种组合都读取远程 JSON,按已完成的原工程层级规则解析并仅保存在内存。

  • useLocalServer=true:成功读取并验证远程根/层级后采用配置中的 localServers,不要求未使用的远程 TCP 字段存在。
  • useLocalServer=false:使用 game_server_tcp 或 player_server_tcp,缺失/非法显式失败,不使用 visitor TCP 或本地兜底。
  • mode=release 不再隐式强制远程地址,否则两个字段不独立。实际发版应明确设 release/false。
  • 本地地址必须有效、无认证信息/片段且为 loopback(127.0.0.0/8、localhost 或 ::1);缺少配置显式失败,消费方不得补值。

入口和诊断边界

LocalPlatformLogin 不再硬编码 mode,也不要求 profile=local。保留 cc/env.DEBUG 与 H5 保护:它是本地诊断场景,未授权将它变成完整生产启动场景。进入诊断前验证配置的 mode=debug、useLocalServer=true,并沿已有严格回环目标、停止/失败生命周期检查工作。无参数 Creator 网页预览应进入 login/ready。

本地账号缓存的 namespace 保持原 local 标签,避免无关账号重建;标签可保留为内部常量,不再从 URL 读取。

旧 LoginFlow 仅做调用接口兼容调整:移除 mode/profile 硬编码和配置失败后的地址/身份兜底,失败时停止;不重做 UI 接线、不称旧场景已接入新 Runtime。其其他旧逻辑留在后续入口迁移批次。

验收及范围

  1. 默认无参数读取统一配置;冲突的 mode/profile URL 不改变代码配置。
  2. 四种 mode/useLocalServer 组合、无效配置、远程读取失败、缺失远程地址和原生 gameconfig 注入有行为测试;任何失败无连接兜底。
  3. 原 get_paravalue、内存唯一引用与无远程持久化要求保持通过。
  4. 显式枚举纯 TS 测试,指定两项架构测试、类型和边界检查;每项实现 TDD、独立规格/质量和最终审查。
  5. funplay MCP 核实主 checkout 项目,刷新既有 TS 后用 http://127.0.0.1:7456/(实际端口为准)无参数预览,真实读取远程配置并进入可登录页,最终目标本地。验证后停止,不扩展 RPC 验收。
  6. 使用当前分支,不建 worktree。保留原有52项改动,不改服务器或任何 .scene/.prefab/.anim/.meta,不新增 assets 文件。

当前真实远程 JSON 对 BUILD 身份仍缺少 game/player TCP;useLocalServer=false 的实际启动限制保留,不通过改身份、选子游戏或修改远程服务来掩盖。