如何在Jekyll中创建断言:front matter的required_reviews为空时构建失败
实现Jekyll构建阶段required_reviews字段强制校验的方案
实现原理
依托Jekyll原生的钩子机制,在站点正式渲染输出文件前,遍历所有带front matter配置的页面,对缺失required_reviews字段、字段取值不合法的情况直接抛出致命错误中断构建。这套逻辑在本地开发、GitHub Pages线上构建环节完全通用,不需要额外引入第三方依赖。
具体操作步骤
- 在站点根目录的
_plugins文件夹(如目录不存在可自行新建)下,新建校验脚本check_required_reviews.rb,写入以下校验逻辑:Jekyll::Hooks.register :site, :pre_render do |site| # 定义required_reviews字段的合法取值列表 allowed_values = %w(medical review none) # 覆盖所有类型的页面:普通静态页、博客文章、自定义集合下的内容 [site.pages, site.documents].flatten.each do |page| review_status = page.data['required_reviews'] # 校验字段是否存在 if review_status.nil? raise Jekyll::Errors::FatalException, "构建终止:页面 #{page.path} 缺失必填字段 required_reviews" end # 校验取值是否在允许范围内 unless allowed_values.include?(review_status) raise Jekyll::Errors::FatalException, "构建终止:页面 #{page.path} 的 required_reviews 取值为「#{review_status}」,仅支持填写 medical review 或 none" end end end - 脚本保存后即可自动生效,不需要修改其他站点配置。本地执行
jekyll build或jekyll serve命令时,校验逻辑会在内容渲染前自动运行;GitHub Pages拉取仓库代码触发线上构建时,会执行完全相同的校验流程,只要存在不合规的页面,就会直接返回非零退出码中断构建流程,彻底避免不合规内容进入生产环境。
存量迁移适配
如果站点存量页面较多,短时间内无法逐个补全required_reviews字段,可先在_config.yml中添加全局默认配置required_reviews: none作为临时兜底,避免迁移初期因为存量页面漏写字段直接触发构建失败。待所有存量内容补全明确的审核状态后,删除该全局默认值,恢复逐页面强制校验的严格规则即可。
内容的提问来源于stack exchange,提问作者William Entriken
相关产品推荐
相关产品推荐

