如何在 Jekyll 中创建断言
How to create assertion in Jekyll
我正在运营一个网站,我们会在该网站上发布需要审查的医疗信息。我们使用 Jekyll+Markdown+Front matter+GitHub Pages 管理一切,因为我们很酷。
现在我们有一个业务要求,我们网站上的每个页面都必须包含一个前端变量“required_reviews”,以便在需要时跟踪我们审查内容的工作流程。 (值为“医学评论”或“none”。)
有什么方法可以创建一个断言,如果页面有 required_reviews == ""
,Jekyll 就会崩溃?
要执行这种强制 Jekyll 构建失败的验证,需要一个自定义插件,因此执行此操作的能力取决于您使用 GitHub 页面的方式:要构建 和 主机,还是仅作为主机?
如果您使用 GitHub 页面为您构建 网站(即您签入 Jekyll 代码和 markdown,然后 GitHub 生成HTML/CSS/JS, 等. 自动),则无法完成,因为 GitHub 不支持自定义插件。您必须创建一个单独的进程,您可以在本地 运行 直接验证文件。
如果您仅将 GitHub 页面用于 托管 (即,您在可以控制的机器上构建站点,并且仅签入生成的 HTML/CSS/JS 到 GitHub 页)然后你可以使用 Generator or a 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 过滤器,您可以从 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 is that the build will stop as soon as it finds the first page that doesn't have the required_reviews
field, so if you prefer to see all the errors at once, then the Generator 的一个重要方面是要走的路。
我正在运营一个网站,我们会在该网站上发布需要审查的医疗信息。我们使用 Jekyll+Markdown+Front matter+GitHub Pages 管理一切,因为我们很酷。
现在我们有一个业务要求,我们网站上的每个页面都必须包含一个前端变量“required_reviews”,以便在需要时跟踪我们审查内容的工作流程。 (值为“医学评论”或“none”。)
有什么方法可以创建一个断言,如果页面有 required_reviews == ""
,Jekyll 就会崩溃?
要执行这种强制 Jekyll 构建失败的验证,需要一个自定义插件,因此执行此操作的能力取决于您使用 GitHub 页面的方式:要构建 和 主机,还是仅作为主机?
如果您使用 GitHub 页面为您构建 网站(即您签入 Jekyll 代码和 markdown,然后 GitHub 生成HTML/CSS/JS, 等. 自动),则无法完成,因为 GitHub 不支持自定义插件。您必须创建一个单独的进程,您可以在本地 运行 直接验证文件。
如果您仅将 GitHub 页面用于 托管 (即,您在可以控制的机器上构建站点,并且仅签入生成的 HTML/CSS/JS 到 GitHub 页)然后你可以使用 Generator or a 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 过滤器,您可以从 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 is that the build will stop as soon as it finds the first page that doesn't have the required_reviews
field, so if you prefer to see all the errors at once, then the Generator 的一个重要方面是要走的路。