这篇文章重点解决什么问题
很多人能把网站部署上去,但评论到了线上就开始出问题:
- 本地有评论,线上没有
- 线上评论框显示了,但无法创建 discussion
- Preview 和 Production 命中不同 discussion
- 改了环境变量,却发现页面没变化
这篇文章不再只讲“怎么部署”,而是讲 怎么把 giscus 评论配置一起稳定带上线。
当前项目的部署前提
默认场景:
- 代码托管在 GitHub
- 网站部署到 Vercel
- 站点由 Astro 构建
- 评论使用
giscus
这意味着评论相关配置有两类来源:
第一类:站点构建期配置
来源于 site.config.ts 及其读取的 PUBLIC_GISCUS_* 环境变量。
这类配置包括:
- 仓库名
- 仓库 ID
- category
- category ID
- mapping
- strict
- loading
- 主题映射
第二类:GitHub 仓库侧配置
这类配置不在 Vercel 上,而在 GitHub 仓库里:
- Discussions 是否开启
- giscus app 是否安装
- discussion category 是否存在
- 是否启用了
giscus.json的来源限制
第一步:确认本地构建没问题
上线前先在本地做一次完整构建:
npm run build如果本地构建都没过,不要急着看 Vercel。
第二步:把仓库导入 Vercel
标准流程:
- 登录 Vercel
Add New Project- 选择你的 GitHub 仓库
- 构建命令保持为:
npm run build- 点击部署
如果你没有自定义构建目录,当前项目通常不需要额外改输出路径。
第三步:配置 giscus 相关环境变量
如果你想把评论配置从代码中分离出来,推荐在 Vercel 设置这些变量:
PUBLIC_GISCUS_REPO=owner/repoPUBLIC_GISCUS_REPO_ID=R_kgDO...PUBLIC_GISCUS_CATEGORY=GeneralPUBLIC_GISCUS_CATEGORY_ID=DIC_kwDO...PUBLIC_GISCUS_MAPPING=pathnamePUBLIC_GISCUS_TERM=PUBLIC_GISCUS_STRICT=1PUBLIC_GISCUS_REACTIONS_ENABLED=1PUBLIC_GISCUS_EMIT_METADATA=0PUBLIC_GISCUS_INPUT_POSITION=topPUBLIC_GISCUS_LANG=zh-CNPUBLIC_GISCUS_LOADING=lazyPUBLIC_GISCUS_THEME_LIGHT=lightPUBLIC_GISCUS_THEME_DARK=dark第四步:理解“改环境变量为什么要重新部署”
这是 Astro 内容站一个很容易被忽略的点。
当前项目里,site.config.ts 会在构建时读取 PUBLIC_GISCUS_*。
所以:
- 你改了 Vercel 环境变量
- 旧构建产物不会自动更新
- 必须重新部署,页面才会拿到新值
结论:评论相关环境变量变更后,一定要重新部署。
第五步:为什么线上推荐 pathname 映射
对于 GitHub + Vercel 场景,这一点非常关键。
推荐:mapping = pathname
原因:
- 同一路径在本地、Preview、Production 下都稳定
- 不依赖域名
- 不会因为预览地址变化而分裂 discussion
不推荐:mapping = url
因为 Vercel 存在:
Production域名Preview域名- 可能还有自定义域名
如果你用 url,同一篇文章会因为域名不同被当成不同页面,最终变成多个 discussion。
第六步:上线前必须做的评论验收
不要只点开首页看没报错就结束。
评论系统要按“真正用户操作”来验收。
必做检查
- 打开任意文章页
- 滚动到底部,确认评论区显示
- 打开浏览器开发者工具,确认
giscus.app/client.js成功加载 - 用 GitHub 账号登录评论
- 发表一条测试评论
- 回 GitHub Discussions 检查是否命中已有 discussion,或首次创建成功
- 切换站点主题,确认评论 iframe 主题同步
- 刷新页面,确认评论仍能正常加载
推荐再多做一步
用另一篇文章再测试一次,确认不会出现:
- 两篇文章共用一个 discussion
- 一篇文章重复创建两个 discussion
第七步:Preview 与 Production 的验证方式
对于 giscus,建议这样验证:
Preview 环境
主要验证:
- 评论框能否加载
- 配置字段是否生效
- 主题同步是否正常
Production 环境
必须验证:
- 真实评论是否能发出
- discussion 是否正确创建
- 最终映射是否稳定
不要只在 Preview 验证一次就认为评论系统已经上线成功。
第八步:启用了 giscus.json 时要注意什么
如果你后来使用了高级用法里的 giscus.json,尤其是:
originsoriginsRegexdefaultCommentOrder
上线时要特别注意:
如果用了 origins
你必须把正式域名加入允许列表。
否则页面可能能加载主体,但评论 iframe 不工作。
如果用了 originsRegex
如果你想让 Preview 也能测试评论,就要把 Vercel 预览域名规则考虑进去。
例如:
{ "originsRegex": [ "https://.*\\.vercel\\.app" ]}如果不想 Preview 真正参与评论
那就只允许正式域名,把 Preview 仅用于页面结构和样式检查,不做真实评论验证。
第九步:当前项目里,哪些评论配置更适合放环境变量
推荐你优先把这些字段放到环境变量里:
reporepoIdcategorycategoryIdmappingstrictloadingthemeLightthemeDark
这些字段和部署环境、仓库配置关系最强,放环境变量后更利于不同环境管理。
第十步:上线后如果评论不正常,先按这个顺序查
- 页面
provider是否还是giscus - 当前部署是否重新构建过
- Vercel 环境变量是否配置在正确环境
- GitHub 仓库是否仍然公开
- Discussions 是否开启
- giscus app 是否安装在正确仓库
- category/categoryId 是否匹配
- 是否错误使用了
url映射 - 是否被
giscus.json的origins限制拦住
本篇结论
在当前项目里,评论上线成功不只是“前端挂了 giscus 脚本”,而是三件事同时成立:
site.config.ts或PUBLIC_GISCUS_*配置正确- GitHub 仓库侧前置条件正确
- 上线后按真实评论流程完成了验收
只要这三件事缺一项,评论系统都可能表现为“看起来像配置好了,但实际上不能用”。
下一篇预告
最后一篇把评论系统、环境变量、部署差异和常见故障放到一个统一清单里,方便你以后发布前逐项核对。
评论