要执行这种强制 Jekyll 构建失败的验证需要自定义插件,因此执行此操作的能力取决于您使用 GitHub 页面的方式:构建和 em> 托管,还是只托管?
如果您使用 GitHub 页面为您构建网站(即您签入 Jekyll 代码和 markdown,GitHub 会自动生成 HTML/CSS/JS 等),那么无法完成,因为 GitHub 不支持自定义插件。您必须创建一个可以在本地运行以直接验证文件的单独进程。
如果您仅将 GitHub 页面用于托管(即,您在可以控制的机器上构建您的网站,并且仅将生成的 HTML/CSS/JS 签入到 GitHub 页面)然后您可以使用Generator 或Liquid filter。
主要区别在于,使用生成器,您可以分析所有文件,收集发现的所有错误,然后显示您在所有页面中发现的所有错误。生成器看起来像这样(示例/未经测试的代码):
module RequiredReviewModule
class RequiredReviewGenerator < Jekyll::Generator
def generate(site)
errors = Array.new
site.posts.docs.each do |p|
unless p.data['required_reviews'].any? {
errors = "On #{p.title}: is missing"
}
end
errors.each do |error|
puts error
end
raise "Validation errors occurred"
end
end
end
Liquid 过滤器,您可以从带有错误消息的液体模板调用它,然后使用该错误消息引发异常(示例/未经测试的代码):
module Jekyll
module RequiredReviewsFilter
def raise_error(msg)
invalid_file = @context.registers[:page]['path']
err_msg = "On #{invalid_file}: #{msg}"
raise err_msg
end
end
end
Liquid::Template.register_filter(Jekyll::ExceptionFilter)
从您的模板中,您将检查该字段并调用您的 Liquid 过滤器以导致构建失败:
{% unless page.required_reviews %}
{{ "The field required_reviews is required" | raise_error }}
{% endunless %}
使用Liquid filter 的一个重要方面是,一旦找到没有required_reviews 字段的第一页,构建就会停止,因此,如果您希望一次查看所有错误,那么Generator 将是要走的路。