Jekyll目录结构和运行机理

参考文章
Jekyll使用Ruby脚本根据模板生成静态网页,实现了内容与排版的分离。模板以嵌入Liquid脚本的HTML格式存放。内容为markdown或者html。

正常的Jekyll工程包含以下几个目录:

_posts  博客内容
_pages  其他需要生成的网页,如About页
_layouts 网页排版模板
_includes 被模板包含的HTML片段,可在_config.yml中修改位置
assets 辅助资源 css布局 js脚本 图片等
_data 动态数据
_sites  最终生成的静态网页

在项目文件夹(含有_config.yml)中运行jekyll build 指令后,jekyll会依次做如下几件事

  1. 加载_layout文件夹内的所有模板,并将其中的{% include xxxx.html %} 字段按照_includes文件夹内对应文件填入
  2. 遍历_post文件夹及子文件夹,对所有命名符合yyyy-mm--dd-title.md 格式的博客文件放入site.posts 变量(按时间倒序),并对其进行解析,根据Front Matter 头的内容套入layout生成对应title的博客
  3. 遍历整个项目子目录,扫描所有含Front Matter 头的文件,放入site.pages 变量并根据permalink 字段指定的URL目标位置生成index.html
  4. 在生成过程中,文件中包含的Liquid脚本{{ content }} 会被解析并替换。Liquid指令 包括Object、Tag、Filter三类,其中object是变量,在解析过程中会被直接文本替换,如
{{ page.title }}

Tag是控制流,可以做判断和循环,如

{% if user %}
      Hello {{ user.name }}!
{% else %}
    {% assign foo = false %}
    {{ foo }}
{% endif %}

{% if foo!= true %}
  This statement is valid.
{% endif %}

{% for product in collection.products %}
    {{ product.title }}
{% endfor %}

Filter用于对文本进一步处理

{{ "fold" | | prepend: {{ site.baseurl }} | append: "/.html" }}
{{ "adam!" | capitalize | prepend: "Hello " }}
Output: Hello Adam!

.yml文件中,字段的冒号后面必须有空格!

为了添加除博客以外的页面集合(如Projects),可将含有Front Matter头的文件放入除_posts之外的任意目录,便可被添入site.pages 变量中。为了与posts相区分,一般来说应该在网页头部添加一个变量,如type 并在对应生成循环中逐个判断。

你可能感兴趣的:(杂集)