在 Hexo 博客的配置中,include、exclude 和 ignore 这三个选项用于精确控制哪些文件或目录参与生成过程。虽然它们都涉及“包含”或“排除”的概念,但其作用范围和优先级有严格的区别。本文将详细解析这三个配置项的用法、差异及注意事项。
核心配置项说明
include、exclude 和 ignore 都使用 glob 表达式进行路径匹配,但它们的作用对象和层级不同。
- include
该选项用于明确指定需要处理的文件或目录,特别是那些通常被忽略的“隐藏文件”。在 Hexo 中,名称以下划线_开头的文件或文件夹默认被视为隐藏文件,不会被处理。通过在include列表中声明这些文件的路径,可以强制 Hexo 处理它们。注意:此选项仅作用于source/目录。 - exclude
该选项用于排除(不处理)指定的文件或目录。它同样只作用于source/目录。你可以使用它来阻止某些特定的资源文件(如测试文件)被复制到生成的静态网站中。 - ignore
该选项用于忽略文件或文件夹,其作用范围比exclude更广。ignore会应用到所有文件夹,包括source/、themes/等。这是在项目中忽略某些主题文件或特定目录的通用方法。
概念辨析:作用范围与优先级
这三个配置项最核心的区别在于它们的作用范围和处理优先级:
- 作用范围差异:
include和exclude是“源文件”级别的配置,它们只对source/目录下的内容有效。而ignore是全局级别的配置,对项目根目录下的所有文件夹都有效。例如,如果你想忽略某个主题(theme)中的文件,必须使用ignore,因为exclude对themes/目录无效。 - 特殊目录
_posts的处理:source/_posts目录是一个例外情况。不建议在此目录中使用include规则。如果需要忽略_posts目录下的文件,推荐的做法是在文件名前添加下划线_(使其成为隐藏文件),或者使用skip_render插件功能,而不是使用exclude。 - 优先级关系:
虽然配置中未明确说明三者之间的绝对优先级,但从逻辑上推断,ignore作为全局忽略指令,其作用层级最高;include和exclude作为源目录的包含/排除指令,作用层级次之,且两者互斥。通常,ignore会无条件忽略文件,而include可以用来“抢救”被默认规则隐藏的文件。
配置示例
以下是一个综合的配置示例,展示了如何使用 glob 表达式来精确控制文件处理:
1 | # 包含或不包含配置 |
注意事项
- 引号包裹:配置列表中的每一项路径都必须用单引号
' '或双引号" "包裹起来,这是 YAML 语法的要求,也是为了防止特殊字符(如*)被错误解析。 - _posts 目录:再次强调,不要尝试使用
exclude来忽略source/_posts/目录中的文件,这通常无效。请使用文件名前缀_或skip_render功能。 - themes 目录:由于
exclude对themes/目录无效,如果需要在主题中忽略某些文件,请务必使用ignore配置。 - glob 语法:
**用于匹配零级或多级目录,*用于匹配单级目录或文件。理解这些通配符的含义对于编写正确的匹配规则至关重要。