jekyll 初识

引用
中文官方文档

一 目录结构

jekyll核心是一个文本转换引擎, 用你最喜欢的标记语言写文章,然后jekyll会帮助你套入一个或者一系列的布局中, 在整个过程中,你可以设置URL路径,你的文本在布局中的显示样式等等

_config.yml 保存的是配置数据,很多配置选项都可以在命令行中进行设置, 但是如果把配置直接写入_config.yml文件中,可以不在命令行中输入

_drafts 草稿是未发布的文章,这些文件的格式中都没有title.MARKUP数据

_includes 可以加载这些包含部分到布局或者文章中,方便重用, 用标签{% include file.ext %} 可以将文件 _includes/file.ext 包含进来

_layouts 布局是包裹在文章外部的模板, 布局可以在YAML头信息中根据不同文章进行选择, 标签{{ content }} 可以将content 插入到页面中

_posts 这里放的就是文章, 文件格式很重要,必须符合 year-month-day-title.markup 格式, 永久链接可以在文章中自己定制,但是数据和标记语言都是根据文件名来确定的

_data 格式化好的网站数据应该放在这里,  jekyll 的引擎会自动加载在该目录下所有yaml 文件,(后缀是 .yml, .yaml, .json, .csv) , 这些文件可以经由 'site.data' 访问,  如果有一个members.yml 文件在该目录下, 可以通过site.data.members 获取该文件的内容

_site 一旦jekyll 完成转换, 就会将生成的页面放在这里(默认), 所以最好将此目录放进.gitignore 中(不上传到github)

.jekyll-metadata 该文件帮助jekyll 跟踪哪些文件从上次建立站点开始到现在 没有被修改,  哪些文件需要在下一次站点建立时候重新生成,  该文件不会被包含在生成的站点中,  将其加入到.gitignore 文件可能是一个好主意

index.html 如果这些文件中包含了YAML头信息部分,  jekyll 会自动将它们进行转换, 当然,其他的.html, .markdown , .md 或者 .texttile 等在站点根目录下 或者不是以上提到的目录中的文件也会被转换

其他 其他一些没有被提及的目录和文件如 css ,images 文件夹,  favicon.ico 等文件都将被完全拷贝到生成的site 中

二 配置

jekyll 允许自己设置你的网站,这很大程度上归功于灵活强大的配置功能,  可以配置在网站根目录下的_config.yml 文件中,  也可以作为命令行的标记来配置

1 配置设置

1-1 全局配置

Site Source 修改jekyll 读取文件的路径,  source: DIR , -s , --source DIR

Site Destination 修改jekyll 写入文件的路径  destination: DIR , -d, --destination DIR

Safe 禁用自定义插件    safe: BOOL , --safe

Exclude 转换时候排除某些文件, 文件夹  exclude: [DIR, FILE, ...]

Include 转换时候强制包含某些文件,文件夹, .htaccess 是一个典型例子,因为默认排除.开头的文件 include: [DIR, FILE, ...]
Keep files 当生成站点时候,保留选择的文件,对文件不是由jekyll 生成是有用的, 例如由你的构建工具生成的文件或者资源,路径是相对于destination keep_files: [DIR, FILE, ...]

Time Zone 设置时区,这个设置相当于TZ变量,Ruby用它来处理日期和时间,  默认值是操作系统的时区

Encoding 设置文件的编码,默认值是utf-8, 使用命令 ruby -e 'puts Encoding:: list.join("\n")' 查看Ruby可用的编码

Defaults 设置YAML头信息的默认值

1-2. 编译选项

Regeneration 允许文件修改时候自动重新生成网站,  -w, --watch

Configuration 手动设置配置文件,可以设置多个,且后面的配置会覆盖前边的 --config File1, [, File2, ... ]

Drafts 处理草稿  --drafts

Environment   build时候使用特定的环境变量,  JEKYLL_ENV=production

Future 用将来的日期发布文章   future: BOOL, --future

LSI 为相关的文章生成索引    lsi: BOOL --lsi

Limit Posts 限制文章的数量   limit_posts: NUM, --limit_posts NUM

Force polling 强制使用轮询   --force_polling

Verbose output 显示详细输出   -V, --verbose

Silence Output 在编译期间不显示的正常输出   -q, --quiet

Incremental build 启用试验特性incremental build, Incremental build只重建修改过的posts 和 pages, 对于大型网站有显著的性能提升,  但在特定情况下也会影响网站生成 incremental: BOOL, -I, --incremental

Liquid profiler 生成一个Liquid 概述文档来帮助你发现性能瓶颈  profile: BOOL --profile

1-3. 服务选项

除了下边的选项, serve命令还可以接收 build 的选项,  当运行网站服务之前的编译时候使用
local Server Port 监听所给的端口   port: PORT , --port PORT

local Server Hostname 监听所给的主机名   host: HOSTNAME, --host HOSTNAME

Base URL 网站的根路径   baseurl: URL --baseurl URL

Detach 从终端命令行中分离出来   detach: BOOL -B, --detach

2. 自定义WEBRick标题

可以在_config.yml 中为你的站点提供自定义标题

#文件: _config.yml
webrick: 
  headers:
    My-Header: My-Value
    My-Other-Header: My-other-Value

2-1 默认

只提供一个默认,而且这是一个不能在开发模式中缓存的content-type 头,所以当你处于开发模式时候,
不用理会chrome的aggressive caching

3 指定Jekyll build时候的环境

在build 或者 serve 参数中, 能指定Jekyll 的环境和参数, 然后build会将参数应用在你内容中的任意条件语言
例如, 在代码中的条件语句应用设置
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}

当build网站时候, if语句块中的内容不会被执行, 除非在build 命令中还指定了一个 production 环境
JEKYLL_ENV=production jekyll build

设置环境变量允许只在特定环境下执行指定内容
JEKYLL_ENV 的默认值是 development,
任何{% if jekyll.environment == "development" %}中的内容在build时都会自动显现

环境参数可以任意设置,不只是development 或者 production , 例如你可能想在开发环境下隐藏一些元素, 比如评论功能,谷歌分析
你可能想在development 开发环境中扩展一个"在github中编辑"的按钮, 而不包括在 production 中
在build 命令中指定参数, 当你迁移环境时候, 可以避免更改你配置文件中的值

4 头信息默认值

通过使用YAML头信息可以指定站点的页面和文章的配置,设置一些东西例如布局或者自定义标题,亦或是给文章指定一个更加精确的日期/时间,这都可以往页面或者文章的头信息添加数据来实现
很多时候,我们会发现在重复填写很多配置项, 在每个文件里设置相同的布局,对每一篇文章添加相同的分类,等等,可以添加自定义变量,比如作者名, 可能对于博客上大部分的文章来说是相同的
jekyll 提供了一个方法在站点配置中设置这些默认值, 而不是在每次创建一个新的文章或者页面重复此配置
可以在项目根目录下的 _config.yml 文件中设置 defaults 的值指定全站范围的默认值
defaults 保存一个范围/值对 的数组,定义了哪些默认值要设置到一个特定的文件路径下的文件,或者可选的, 在该路径下指定的文件类型的文件
假设想要添加一个默认的布局给站点中的所有的页面和文章, 要将这添加到_config.yml 文件

defaults: 
  _
    scope: 
      path: "" #一个空的字符串表示所有的文件
    values:
      layout: "default"

上面的例子把values 应用给scope路径中的所有文件,因为路径被设为空字符串, 将会应用到项目中的全部文件, 你可能不想给项目在的每个文件都设置一个布局,例如css文件, 可以在scope下指定type 的值

defaults: 
  _
    scope: 
      path: ""
      type: "posts"
    values:
      layout: "default"

上面的例子只会给类型是posts的文件设置默认布局,可以使用不同的类型分别是pages, posts, drafts
或者其他站点中的集合 
当创建一个范围/值的对, 如果选择了type, 必须指定一个值给path

可以给defaults设置多个范围/值的对
defaults:
_
scope:
path: ""
type: "posts"
values:
layout: "my-site"
_
scope:
path: "projects"
type: "pages"
values:
layout: "project" #覆盖之前的默认布局
author: "Mr. Hyde"

有了这些默认值, 所有的文章都会使用my-site布局,任何在projects/ 文件夹下的html文件会使用project布局,这些文件也会拥有值为Mr. Hyde的 page.author

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • In addition to supporting regular HTML content, GitHub Pa...
    胡哈哈哈阅读 1,254评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,089评论 25 707
  • 朋友的爸爸生病了,与此时在天堂的老爸是一样的病。很多时候都特别想告诉她要珍惜老爸在的日子,可是每次都话到嘴边再默...
    鲲鹏细语阅读 234评论 0 0
  • 今天忽然参悟一个道理:人早晚都会死,为什么不轰轰烈烈的按自己的意愿生活? 很多年前的我,总是患得患失。缅怀过去时,...
    阿倩女阅读 195评论 0 1