问题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/,实际作为重定向入口
这样既保留了风险兜底能力,又不影响用户体验。