运维与发布
推荐命令
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。为了避免面板里的默认值和仓库配置打架,直接走自定义构建最稳。 同时当前仓库已经把 .nvmrc、package.json 和 pnpm-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 项目完成首次成功构建后:
- 进入
Workers & Pages-> 项目news-base - 打开
Custom domains - 添加
news.rowkin.xyz - 按页面提示完成激活
- 如果
rowkin.xyz本身就在 Cloudflare,通常会自动补齐 DNS 记录
接入真实抓取器时建议优先做的事
- 先保持
public/api/*.json的字段不变。 - 再继续扩展
config/news_sources.json,增加更多稳定来源和对应解析器。 - 最后补上更细的失败重试、缓存和摘要策略。
发布前检查清单
npm run crawl是否成功生成最新 JSON。npm run build是否无报错。- 首页、今日总览、五个专区页是否都能打开。
public/api/latest.json与页面展示的数量是否一致。