如果指定的 YAML 字段丢失,在 Jekyll 构建期间引发异常?
Raise exceptions during a Jekyll build if specified YAML fields are missing?
我想在 Jekyll 站点中构建逻辑,以便某个 layout
的页面将验证其 YAML,如果缺少特定字段或具有错误的值类型,则构建错误等
一种解决方法是为 Liquid 过滤器编写一个笨拙的插件,它只接收错误消息并引发异常:
module Jekyll
module ExceptionFilter
def raise_error(msg)
bad_file = @context.registers[:page]['path']
err_msg = "On #{bad_file}: #{msg}"
raise err_msg
end
end
end
Liquid::Template.register_filter(Jekyll::ExceptionFilter)
然后,例如,在模板中,我可以包含以下内容:
{% unless page.necessary_field %}
{{ "You're missing necessary_field" | raise_error }}
{% endunless %}
这样就完成了工作。
我遇到的一个问题是构建过程在发现一个错误时立即停止。我希望能够继续构建 repo 中的所有 .md 文件,并收集所有页面的错误列表以在最后显示。 Based on the Jekyll docs,我以为_config.yml
中的liquid: error_mode: warn
会这样,结果不会
您可以(ab)使用生成器在构建之前检查所有文件。以下是您的操作方法:
module MyModule
class WarningGenerator < Jekyll::Generator
def generate(site)
errors = Array.new
site.posts.docs.each do |p|
unless p.data['my_property'].any? {
errors = "On #{p.title}: My Property is missing"
}
end
errors.each do |error|
puts error
end
raise "There were errors"
end
end
end
注意,此代码未经测试:)
它会遍历您的所有页面,检查特定的 属性,如果找不到则向数组添加一条消息,然后引发错误。
我想在 Jekyll 站点中构建逻辑,以便某个 layout
的页面将验证其 YAML,如果缺少特定字段或具有错误的值类型,则构建错误等
一种解决方法是为 Liquid 过滤器编写一个笨拙的插件,它只接收错误消息并引发异常:
module Jekyll
module ExceptionFilter
def raise_error(msg)
bad_file = @context.registers[:page]['path']
err_msg = "On #{bad_file}: #{msg}"
raise err_msg
end
end
end
Liquid::Template.register_filter(Jekyll::ExceptionFilter)
然后,例如,在模板中,我可以包含以下内容:
{% unless page.necessary_field %}
{{ "You're missing necessary_field" | raise_error }}
{% endunless %}
这样就完成了工作。
我遇到的一个问题是构建过程在发现一个错误时立即停止。我希望能够继续构建 repo 中的所有 .md 文件,并收集所有页面的错误列表以在最后显示。 Based on the Jekyll docs,我以为_config.yml
中的liquid: error_mode: warn
会这样,结果不会
您可以(ab)使用生成器在构建之前检查所有文件。以下是您的操作方法:
module MyModule
class WarningGenerator < Jekyll::Generator
def generate(site)
errors = Array.new
site.posts.docs.each do |p|
unless p.data['my_property'].any? {
errors = "On #{p.title}: My Property is missing"
}
end
errors.each do |error|
puts error
end
raise "There were errors"
end
end
end
注意,此代码未经测试:)
它会遍历您的所有页面,检查特定的 属性,如果找不到则向数组添加一条消息,然后引发错误。