参考文章
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会依次做如下几件事
- 加载_layout文件夹内的所有模板,并将其中的
{% include xxxx.html %}
字段按照_includes文件夹内对应文件填入 - 遍历_post文件夹及子文件夹,对所有命名符合
yyyy-mm--dd-title.md
格式的博客文件放入site.posts
变量(按时间倒序),并对其进行解析,根据Front Matter 头的内容套入layout生成对应title的博客 - 遍历整个项目子目录,扫描所有含Front Matter 头的文件,放入
site.pages
变量并根据permalink
字段指定的URL目标位置生成index.html - 在生成过程中,文件中包含的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
并在对应生成循环中逐个判断。