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





















