【问题标题】:How to create assertion in Jekyll如何在 Jekyll 中创建断言
【发布时间】:2021-01-26 15:27:47
【问题描述】:

我正在运营一个网站,我们在该网站上发布需要审查的医疗信息。我们使用 Jekyll+Markdown+Front matter+GitHub Pages 来管理所有内容,因为这样我们就很酷。

现在我们有一个业务要求,即我们网站上的每个页面都必须包含一个前端变量“required_reviews”,以跟踪我们在需要时审查内容的工作流程。 (值为“医学审查”或“无”。)

如果页面有required_reviews == "",我有什么方法可以创建Jekyll 将崩溃的断言?

【问题讨论】:

    标签: jekyll


    【解决方案1】:

    要执行这种强制 Jekyll 构建失败的验证需要自定义插件,因此执行此操作的能力取决于您使用 GitHub 页面的方式:构建和 em> 托管,还是只托管?

    如果您使用 GitHub 页面为您构建网站(即您签入 Jekyll 代码和 markdown,GitHub 会自动生成 HTML/CSS/JS 等),那么无法完成,因为 GitHub 不支持自定义插件。您必须创建一个可以在本地运行以直接验证文件的单独进程。

    如果您仅将 GitHub 页面用于托管(即,您在可以控制的机器上构建您的网站,并且仅将生成的 HTML/CSS/JS 签入到 GitHub 页面)然后您可以使用GeneratorLiquid 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 将是要走的路。

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2022-12-25
      • 1970-01-01
      相关资源
      最近更新 更多