Jekyll/Webrick 中带下划线的目录是如何过滤的?

How underscored directories are filtered in Jekyll/Webrick?

更新:检查下面我的回答。


我刚刚意识到在 Jekyll Webrick 服务器中,以 下划线(_includes、_layouts 等) 开头的目录无法访问,并且在 jekyll serve --show-dir-listing 时不会列出选项已打开。我想知道 Jekyll 是怎么做到的,因为 Webricks 默认显示带下划线的目录。我在source code中快速搜索,我检查了lib/jekyll/commands/serve.rb和类似的文件,但找不到确切原因。这可能与 fancy_listing?

有关

示例: 它在那里!:

更新:在jekyll/reader.rb找到了相关代码,其中有一个filter函数,在jekyll/entry_filter.rb中定义! :) 这是代码:

  • 首先定义一个正则表达式:
 SPECIAL_LEADING_CHAR_REGEX = %r!\A#{Regexp.union([".", "_", "#", "~"])}!o.freeze
  • 然后special?函数定义:
def special?(entry)
  SPECIAL_LEADING_CHAR_REGEX.match?(entry) ||
      SPECIAL_LEADING_CHAR_REGEX.match?(File.basename(entry))
end
  • 并且special?filter函数中使用了filter函数来检测和过滤匹配regex的文件。

  • Readerclass也在很多地方使用了这个过滤功能。

    老实说,我仍然不明白 jekyll 是如何将这些东西组合在一起的,但我想我会尝试自己弄清楚它们。