如何動(dòng)態(tài)生成 Jekyll 配置文件
使用 Python 或 Bash 將動(dòng)態(tài)數(shù)據(jù)插入 Jekyll 靜態(tài)網(wǎng)站中,并且避免創(chuàng)建一個(gè) API 后端。
靜態(tài)網(wǎng)站生成器 Jekyll 使用 _config.yml
進(jìn)行配置。這些配置都是 Jekyll 特有的。但你也可以在這些文件中 用我們自己的內(nèi)容定義變量,并在整個(gè)網(wǎng)站中使用它們。在本文中,我將重點(diǎn)介紹動(dòng)態(tài)創(chuàng)建 Jekyll 配置文件的一些優(yōu)勢(shì)。
在我的本地筆記本電腦上,我使用以下命令來(lái)服務(wù)我的 Jekyll 網(wǎng)站進(jìn)行測(cè)試:
bundle exec jekyll serve --incremental --config _config.yml
結(jié)合多個(gè)配置文件
在本地測(cè)試中,有時(shí)需要覆蓋配置選項(xiàng)。我的網(wǎng)站的 當(dāng)前 _config.yml 有以下設(shè)置:
# Jekyll Configuration
# Site Settings
url: "https://notes.ayushsharma.in"
website_url: "https://notes.ayushsharma.in/"
title: ayush sharma's notes ☕ + 🎧 + 🕹️
email: ayush@ayushsharma.in
images-path: /static/images/
videos-path: /static/videos/
js-path: /static/js/
baseurl: "" # the subpath of your site, e.g. /blog
由于本地的 jekyll serve
URL 是 http://localhost:4000
,上面定義的 URL 就不能用了。我可以創(chuàng)建一個(gè) _config.yml
的副本 _config-local.yml
并替換所有的值。但還有一個(gè)更簡(jiǎn)單的選擇。
Jekyll 允許指定多個(gè)配置文件,后面的聲明覆蓋前面的聲明。這意味著我可以用以下代碼定義一個(gè)新的 _config-local.yml
:
url:""
然后我可以把上述文件和我的主 _config.yml
結(jié)合起來(lái),像這樣:
bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml
通過(guò)合并這兩個(gè)文件,這個(gè) jekyll serve
的 url
的最終值將是空白。這就把我網(wǎng)站中定義的所有 URL 變成了相對(duì)的 URL,并使它們?cè)谖业谋镜毓P記本電腦上工作。
C結(jié)合動(dòng)態(tài)配置文件
一個(gè)簡(jiǎn)單的例子,假設(shè)你想在你的網(wǎng)站上顯示當(dāng)前日期。它的 bash 命令是:
> date '+%A, %d %B %Y'
Saturday, 16 October 2021
我知道我也可以 使用 Jekyll 的 _config.yml 的自定義內(nèi)容。我將上述日期輸出到一個(gè)新的 Jekyll 配置文件中。
my_date=`date '+%A, %d %B %Y'`; echo 'my_date: "'$my_date'"' > _config-data.yml
現(xiàn)在 _config-data.yml
包含:
my_date: "Saturday, 16 October 2021"
我可以把我的新配置文件和其他文件結(jié)合起來(lái),在我的網(wǎng)站上使用 my_date
變量。
bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml,_config-data.yml
在運(yùn)行上述命令時(shí),{{ site.my_date }}
輸出其配置的值。
結(jié)論
上面的例子很簡(jiǎn)單,但可能性是無(wú)窮的。Bash、Python 和其他編程語(yǔ)言可以動(dòng)態(tài)地生成 Jekyll 配置文件。然后我可以在 build
或 serve
過(guò)程中結(jié)合這些文件。
對(duì)于 findmymastodon.com,我使用 Python 來(lái)獲取 Mastodon 的用戶統(tǒng)計(jì)數(shù)據(jù)。然后我把這些寫進(jìn)一個(gè)新的 _config-data.yml 文件(目前是手動(dòng))。最后,主頁(yè)和其他頁(yè)面從配置文件中顯示這些。這樣,我就可以利用一個(gè)動(dòng)態(tài)的后臺(tái),并且仍然保持我所喜歡的所有靜態(tài)網(wǎng)站的優(yōu)點(diǎn)。
我希望這能為你自己的靜態(tài)網(wǎng)站激發(fā)一些想法。Jamstack 對(duì)于靜態(tài)網(wǎng)站是很好的,但你可以避免為動(dòng)態(tài)內(nèi)容創(chuàng)建整個(gè) API 后臺(tái)。為什么不使用一個(gè)構(gòu)建作業(yè)來(lái)創(chuàng)建帶有更新內(nèi)容的配置文件呢?這可能不適合每一種情況,但少一個(gè) API 意味著更少的基礎(chǔ)設(shè)施移動(dòng)部件。
我希望這能在你的下一個(gè)靜態(tài)網(wǎng)站項(xiàng)目中給你一些幫助。繼續(xù)閱讀,并祝你編碼愉快。