首页 文章

如果指定的YAML字段丢失,则在Jekyll构建期间引发异常?

提问于
浏览
1

我想在Jekyll站点中构建逻辑,以便某个 layout 的页面将对其YAML进行验证,如果缺少特定字段,则构建错误,或者具有错误的值类型等 .

一种解决方法是通过为Liquid过滤器编写一个kludgy插件,它只会收到错误消息并引发异常:

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 会这样做,但事实并非如此 .

1 回答

  • 2

    您可以(ab)使用Generator在构建之前检查所有文件 . 这是你如何做到的:

    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
    

    注意,此代码未经过测试:)

    它会遍历您的所有页面,检查特定属性,如果找不到,则向数组添加消息,然后引发错误 .

相关问题