引用
中文官方文檔
一 目錄結(jié)構(gòu)
jekyll核心是一個文本轉(zhuǎn)換引擎, 用你最喜歡的標(biāo)記語言寫文章,然后jekyll會幫助你套入一個或者一系列的布局中, 在整個過程中,你可以設(shè)置URL路徑,你的文本在布局中的顯示樣式等等

_config.yml 保存的是配置數(shù)據(jù),很多配置選項都可以在命令行中進行設(shè)置, 但是如果把配置直接寫入_config.yml文件中,可以不在命令行中輸入
_drafts 草稿是未發(fā)布的文章,這些文件的格式中都沒有title.MARKUP數(shù)據(jù)
_includes 可以加載這些包含部分到布局或者文章中,方便重用, 用標(biāo)簽{% include file.ext %} 可以將文件 _includes/file.ext 包含進來
_layouts 布局是包裹在文章外部的模板, 布局可以在YAML頭信息中根據(jù)不同文章進行選擇, 標(biāo)簽{{ content }} 可以將content 插入到頁面中
_posts 這里放的就是文章, 文件格式很重要,必須符合 year-month-day-title.markup 格式, 永久鏈接可以在文章中自己定制,但是數(shù)據(jù)和標(biāo)記語言都是根據(jù)文件名來確定的
_data 格式化好的網(wǎng)站數(shù)據(jù)應(yīng)該放在這里, jekyll 的引擎會自動加載在該目錄下所有yaml 文件,(后綴是 .yml, .yaml, .json, .csv) , 這些文件可以經(jīng)由 'site.data' 訪問, 如果有一個members.yml 文件在該目錄下, 可以通過site.data.members 獲取該文件的內(nèi)容
_site 一旦jekyll 完成轉(zhuǎn)換, 就會將生成的頁面放在這里(默認), 所以最好將此目錄放進.gitignore 中(不上傳到github)
.jekyll-metadata 該文件幫助jekyll 跟蹤哪些文件從上次建立站點開始到現(xiàn)在 沒有被修改, 哪些文件需要在下一次站點建立時候重新生成, 該文件不會被包含在生成的站點中, 將其加入到.gitignore 文件可能是一個好主意
index.html 如果這些文件中包含了YAML頭信息部分, jekyll 會自動將它們進行轉(zhuǎn)換, 當(dāng)然,其他的.html, .markdown , .md 或者 .texttile 等在站點根目錄下 或者不是以上提到的目錄中的文件也會被轉(zhuǎn)換
其他 其他一些沒有被提及的目錄和文件如 css ,images 文件夾, favicon.ico 等文件都將被完全拷貝到生成的site 中
二 配置
jekyll 允許自己設(shè)置你的網(wǎng)站,這很大程度上歸功于靈活強大的配置功能, 可以配置在網(wǎng)站根目錄下的_config.yml 文件中, 也可以作為命令行的標(biāo)記來配置
1 配置設(shè)置
1-1 全局配置
Site Source 修改jekyll 讀取文件的路徑, source: DIR , -s , --source DIR
Site Destination 修改jekyll 寫入文件的路徑 destination: DIR , -d, --destination DIR
Safe 禁用自定義插件 safe: BOOL , --safe
Exclude 轉(zhuǎn)換時候排除某些文件, 文件夾 exclude: [DIR, FILE, ...]
Include 轉(zhuǎn)換時候強制包含某些文件,文件夾, .htaccess 是一個典型例子,因為默認排除.開頭的文件 include: [DIR, FILE, ...]
Keep files 當(dāng)生成站點時候,保留選擇的文件,對文件不是由jekyll 生成是有用的, 例如由你的構(gòu)建工具生成的文件或者資源,路徑是相對于destination keep_files: [DIR, FILE, ...]
Time Zone 設(shè)置時區(qū),這個設(shè)置相當(dāng)于TZ變量,Ruby用它來處理日期和時間, 默認值是操作系統(tǒng)的時區(qū)
Encoding 設(shè)置文件的編碼,默認值是utf-8, 使用命令 ruby -e 'puts Encoding:: list.join("\n")' 查看Ruby可用的編碼
Defaults 設(shè)置YAML頭信息的默認值
1-2. 編譯選項
Regeneration 允許文件修改時候自動重新生成網(wǎng)站, -w, --watch
Configuration 手動設(shè)置配置文件,可以設(shè)置多個,且后面的配置會覆蓋前邊的 --config File1, [, File2, ... ]
Drafts 處理草稿 --drafts
Environment build時候使用特定的環(huán)境變量, JEKYLL_ENV=production
Future 用將來的日期發(fā)布文章 future: BOOL, --future
LSI 為相關(guān)的文章生成索引 lsi: BOOL --lsi
Limit Posts 限制文章的數(shù)量 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, 對于大型網(wǎng)站有顯著的性能提升, 但在特定情況下也會影響網(wǎng)站生成 incremental: BOOL, -I, --incremental
Liquid profiler 生成一個Liquid 概述文檔來幫助你發(fā)現(xiàn)性能瓶頸 profile: BOOL --profile
1-3. 服務(wù)選項
除了下邊的選項, serve命令還可以接收 build 的選項, 當(dāng)運行網(wǎng)站服務(wù)之前的編譯時候使用
local Server Port 監(jiān)聽所給的端口 port: PORT , --port PORT
local Server Hostname 監(jiān)聽所給的主機名 host: HOSTNAME, --host HOSTNAME
Base URL 網(wǎng)站的根路徑 baseurl: URL --baseurl URL
Detach 從終端命令行中分離出來 detach: BOOL -B, --detach
2. 自定義WEBRick標(biāo)題
可以在_config.yml 中為你的站點提供自定義標(biāo)題
#文件: _config.yml
webrick:
headers:
My-Header: My-Value
My-Other-Header: My-other-Value
2-1 默認
只提供一個默認,而且這是一個不能在開發(fā)模式中緩存的content-type 頭,所以當(dāng)你處于開發(fā)模式時候,
不用理會chrome的aggressive caching
3 指定Jekyll build時候的環(huán)境
在build 或者 serve 參數(shù)中, 能指定Jekyll 的環(huán)境和參數(shù), 然后build會將參數(shù)應(yīng)用在你內(nèi)容中的任意條件語言
例如, 在代碼中的條件語句應(yīng)用設(shè)置
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}
當(dāng)build網(wǎng)站時候, if語句塊中的內(nèi)容不會被執(zhí)行, 除非在build 命令中還指定了一個 production 環(huán)境
JEKYLL_ENV=production jekyll build
設(shè)置環(huán)境變量允許只在特定環(huán)境下執(zhí)行指定內(nèi)容
JEKYLL_ENV 的默認值是 development,
任何{% if jekyll.environment == "development" %}中的內(nèi)容在build時都會自動顯現(xiàn)
環(huán)境參數(shù)可以任意設(shè)置,不只是development 或者 production , 例如你可能想在開發(fā)環(huán)境下隱藏一些元素, 比如評論功能,谷歌分析
你可能想在development 開發(fā)環(huán)境中擴展一個"在github中編輯"的按鈕, 而不包括在 production 中
在build 命令中指定參數(shù), 當(dāng)你遷移環(huán)境時候, 可以避免更改你配置文件中的值
4 頭信息默認值
通過使用YAML頭信息可以指定站點的頁面和文章的配置,設(shè)置一些東西例如布局或者自定義標(biāo)題,亦或是給文章指定一個更加精確的日期/時間,這都可以往頁面或者文章的頭信息添加數(shù)據(jù)來實現(xiàn)
很多時候,我們會發(fā)現(xiàn)在重復(fù)填寫很多配置項, 在每個文件里設(shè)置相同的布局,對每一篇文章添加相同的分類,等等,可以添加自定義變量,比如作者名, 可能對于博客上大部分的文章來說是相同的
jekyll 提供了一個方法在站點配置中設(shè)置這些默認值, 而不是在每次創(chuàng)建一個新的文章或者頁面重復(fù)此配置
可以在項目根目錄下的 _config.yml 文件中設(shè)置 defaults 的值指定全站范圍的默認值
defaults 保存一個范圍/值對 的數(shù)組,定義了哪些默認值要設(shè)置到一個特定的文件路徑下的文件,或者可選的, 在該路徑下指定的文件類型的文件
假設(shè)想要添加一個默認的布局給站點中的所有的頁面和文章, 要將這添加到_config.yml 文件
defaults:
_
scope:
path: "" #一個空的字符串表示所有的文件
values:
layout: "default"
上面的例子把values 應(yīng)用給scope路徑中的所有文件,因為路徑被設(shè)為空字符串, 將會應(yīng)用到項目中的全部文件, 你可能不想給項目在的每個文件都設(shè)置一個布局,例如css文件, 可以在scope下指定type 的值
defaults:
_
scope:
path: ""
type: "posts"
values:
layout: "default"
上面的例子只會給類型是posts的文件設(shè)置默認布局,可以使用不同的類型分別是pages, posts, drafts
或者其他站點中的集合
當(dāng)創(chuàng)建一個范圍/值的對, 如果選擇了type, 必須指定一個值給path
可以給defaults設(shè)置多個范圍/值的對
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