Skip to content

运维与发布

推荐命令

bash
# 生成最新新闻数据
npm run crawl

# 本地预览
npm run dev

# 生成发布产物
npm run build

# 一次完成数据准备与构建
npm run deploy

发布约定

  • VitePress base 现在通过 SITE_BASE 控制,默认值是 /,适合 news.rowkin.xyz 这种自定义根域名。
  • 如果还要兼容 GitHub Pages 子路径发布,可以在构建时使用 SITE_BASE=/news-base/ npm run build
  • 运行时 JSON 来自 public/api/,构建时会被原样带入静态站点。
  • data/daily/ 用来留存按日期归档的数据样本,方便后续做自动化和回溯。

Cloudflare Pages 配置

  • 项目名称:news-base
  • 生产分支:main
  • Framework preset:选 None
  • Node.js version:20
  • 环境变量:SKIP_DEPENDENCY_INSTALL=true
  • Build command:npx -y pnpm@9 install --no-frozen-lockfile && npx -y pnpm@9 exec vitepress build
  • Build output directory:dist
  • Root directory:/

这样填的原因是:Cloudflare 官方的 VitePress preset 默认输出目录是 .vitepress/dist,而当前仓库显式使用 dist。为了避免面板里的默认值和仓库配置打架,直接走自定义构建最稳。 同时当前仓库已经把 .nvmrcpackage.jsonpnpm-lock.yaml 统一到 pnpm 路线,尽量避开你日志里出现的 npm clean-install / npm install 异常组合。

Cloudflare 这边只负责构建和部署,不负责抓新闻。每日新闻刷新建议在仓库侧完成,再把变更推到 main,Cloudflare 会自动接管后续发布。

如果 Cloudflare 后台当前 UI 没有单独的 Install command 输入框,就只保留上面的 Build command,不要额外再配 npm 安装命令。

每日自动更新

推荐使用仓库内的 GitHub Actions 工作流:

  • 文件位置:.github/workflows/daily-news.yml
  • 触发方式:每日定时 + 手动触发
  • 执行内容:npm ci -> npm run crawl -> npm run build -> 提交 public/api -> 推送 main
  • 结果:Cloudflare Pages 检测到 main 有新提交后自动部署到 news.rowkin.xyz

默认时间按北京时间每天 09:10,对应 GitHub Actions 的 01:10 UTC

注意:当前 npm run crawl 已经改成“真实源优先、分类兜底”。如果外部源在某次运行中不可达,脚本会回退到分类级兜底内容,因此自动链路仍然能持续发布。

自定义域名

在 Cloudflare Pages 项目完成首次成功构建后:

  1. 进入 Workers & Pages -> 项目 news-base
  2. 打开 Custom domains
  3. 添加 news.rowkin.xyz
  4. 按页面提示完成激活
  5. 如果 rowkin.xyz 本身就在 Cloudflare,通常会自动补齐 DNS 记录

接入真实抓取器时建议优先做的事

  1. 先保持 public/api/*.json 的字段不变。
  2. 再继续扩展 config/news_sources.json,增加更多稳定来源和对应解析器。
  3. 最后补上更细的失败重试、缓存和摘要策略。

发布前检查清单

  • npm run crawl 是否成功生成最新 JSON。
  • npm run build 是否无报错。
  • 首页、今日总览、五个专区页是否都能打开。
  • public/api/latest.json 与页面展示的数量是否一致。

News Base 让站点、数据与技能文档共用同一份配置。