问题13:之前保持了《将本地开发环境,预览生产环境,GitHub Pages环境的根URL完美隔离的解决方案.md》和之后新增的 CI 工作流 deploy-custom-domain.yml。我当前在项目仓库的github pages里面配置了自定义域名envjs.fun, 现在可以成功通过自定义域名访问博客。同时我发现当我访问原来的github pages地址时,它会自动跳转到自定义域名地址。
基于这种情况,是否可以或有必要依然同时保持这4种环境(本地开发,预览生产,github pages,自定义域名)的BASE_PATH的隔离思路?



这是一个很好的问题。让我分析一下当前情况:


当前状态分析

环境 访问地址 状态
本地开发 http://localhost:5173 ✅ 正常
预览生产 http://localhost:4173 ✅ 正常
GitHub Pages https://stuffren.github.io/chunking-blog/ ⚠️ 自动跳转到 envjs.fun
自定义域名 https://envjs.fun/ ✅ 正常

关键发现:GitHub Pages 原地址已经自动跳转到自定义域名,说明 GitHub 的自定义域名配置已经生效,并且启用了域名重定向。


是否还有必要保持 4 环境隔离?

答案:有必要,但可以简化

原因如下:

1. 本地开发和预览生产环境仍然需要隔离

环境 为什么需要独立 BASE_PATH
本地开发 (npm run dev) Vite 开发服务器运行在根路径,需要 /
预览生产 (npm run preview) Vite 预览服务器运行在根路径,需要 /
GitHub Pages 现在已跳转到自定义域名,实际上不再独立提供服务
自定义域名 根域名部署,需要 /

2. GitHub Pages 环境实际上已"失效"

由于 stuffren.github.io/chunking-blog/ 自动跳转到 envjs.fun,这意味着:

  • 用户实际上无法直接访问/chunking-blog/ 前缀的地址
  • GitHub Pages 只是作为重定向入口,最终都到了自定义域名

建议的调整方案

方案 A:保持现状(推荐)

保留现有的 4 环境隔离架构,但理解其实际运行方式:

本地开发 (/) ──┐
预览生产 (/) ──┼──► 实际只有 2 种产物
GitHub Pages (/chunking-blog/) ──► 自动跳转 ──► 自定义域名 (/)
自定义域名 (/) ──┘

优点

  • 如果将来自定义域名出问题,可以快速切回 GitHub Pages
  • 代码架构无需改动
  • 符合《方案》的零代码改动哲学

方案 B:简化架构(可选)

如果确定长期只使用自定义域名,可以简化:

调整项 操作
deploy.yml 删除 BASE_PATH: /chunking-blog/,统一使用 /
工作流数量 合并为一个,只保留 main 分支触发
custom-domain 分支 可以删除,不再维护

优点:配置更简单,只有一个部署流程

缺点:失去回退能力,如果域名出问题无法快速恢复


我的建议

保持现有架构,理由如下:

考量因素 说明
风险兜底 自定义域名可能因续费、DNS、备案等问题失效,GitHub Pages 地址是最后的保障
零代码改动 现有架构已经完美运行,无需调整
未来扩展 如果将来需要部署到其他平台(如 Vercel、Netlify),现有架构更容易扩展
心智负担 保持 4 环境隔离虽然多一个分支,但逻辑清晰,维护成本很低

实际运行时的理解

工作流 触发分支 产物 BASE_PATH 实际用户访问
deploy.yml main /chunking-blog/ 自动跳转到 envjs.fun
deploy-custom-domain.yml custom-domain / 直接访问 envjs.fun

虽然 deploy.yml 的产物带前缀,但用户被重定向后,最终看到的都是根路径版本。


结论

有必要保持隔离思路,但可以理解为"3+1"模式:

  • 3 个开发/部署环境(本地、预览、自定义域名)使用 /
  • 1 个兜底环境(GitHub Pages)使用 /chunking-blog/,实际作为重定向入口

这样既保留了风险兜底能力,又不影响用户体验。