如何使用 Python 或 Bash動態生成 Jekyll 配置檔案

大雄45發表於2021-11-20
導讀 使用 Python 或 Bash 將動態資料插入 Jekyll 靜態網站中,並且避免建立一個 API 後端。

靜態網站生成器 Jekyll 使用 _config.yml 進行配置。這些配置都是 Jekyll 特有的。但你也可以在這些檔案中 用我們自己的內容定義變數,並在整個網站中使用它們。在本文中,我將重點介紹動態建立 Jekyll 配置檔案的一些優勢。

在我的本地膝上型電腦上,我使用以下 來服務我的 Jekyll 網站進行測試:

bundle exec jekyll serve --incremental --config _config.yml
結合多個配置檔案

在本地測試中,有時需要覆蓋配置選項。我的網站的 當前 _config.yml 有以下設定:

# Jekyll Configuration
 
# Site Settings
url: "
website_url: "
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 是 ,上面定義的 URL 就不能用了。我可以建立一個 _config.yml 的副本 _config-local.yml 並替換所有的值。但還有一個更簡單的選擇。

Jekyll 允許指定多個配置檔案,後面的宣告覆蓋前面的宣告。這意味著我可以用以下程式碼定義一個新的 _config-local.yml:

url:""

然後我可以把上述檔案和我的主 _config.yml 結合起來,像這樣:

bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml

透過合併這兩個檔案,這個 jekyll serve 的 url 的最終值將是空白。這就把我網站中定義的所有 URL 變成了相對的 URL,並使它們在我的本地膝上型電腦上工作。

C結合動態配置檔案

一個簡單的例子,假設你想在你的網站上顯示當前日期。它的 bash  是:

> date '+%A, %d %B %Y'
Saturday, 16 October 2021

我知道我也可以 使用 Jekyll 的 _config.yml 的自定義內容。我將上述日期輸出到一個新的 Jekyll 配置檔案中。

my_date=`date '+%A, %d %B %Y'`; echo 'my_date: "'$my_date'"' > _config-data.yml

現在 _config-data.yml 包含:

my_date: "Saturday, 16 October 2021"

我可以把我的新配置檔案和其他檔案結合起來,在我的網站上使用 my_date 變數。

bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml,_config-data.yml

在執行上述命令時,{{ site.my_date }} 輸出其配置的值。

結論

上面的例子很簡單,但可能性是無窮的。Bash、Python 和其他程式語言可以動態地生成 Jekyll 配置檔案。然後我可以在 build 或 serve 過程中結合這些檔案。

對於 findmymastodon.com,我使用 Python 來獲取 Mastodon 的使用者統計資料。然後我把這些寫進一個新的 _config-data.yml 檔案(目前是手動)。最後,主頁和其他頁面從配置檔案中顯示這些。這樣,我就可以利用一個動態的後臺,並且仍然保持我所喜歡的所有靜態網站的優點。

我希望這能為你自己的靜態網站激發一些想法。Jamstack 對於靜態網站是很好的,但你可以避免為動態內容建立整個 API 後臺。為什麼不使用一個構建作業來建立帶有更新內容的配置檔案呢?這可能不適合每一種情況,但少一個 API 意味著更少的基礎設施移動部件。

我希望這能在你的下一個靜態網站專案中給你一些幫助。繼續閱讀,並祝你編碼愉快。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2842836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章