從 3.x 升級到 4.x

Jekyll 4 中有些地方有所變更。

在我們深入探討之前,您需要安裝至少 Ruby 2.5.0。

在您的終端機中執行以下指令進行檢查

ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e)

如果您使用的是 >= 2.5.0 的受支援 Ruby 版本,請繼續取得 Jekyll 的最新版本

gem update jekyll
post_url 標籤和 Baseurl

 

post_url 標籤現在會在自身內部納入 relative_url 篩選器,因此會自動在文章的 url 值前面加上您網站的 baseurl

請務必將 post_url 使用的所有執行個體變更為以下內容

- {{ site.baseurl }}/{% post_url 2018-03-20-hello-world.markdown %}
+ {% post_url 2018-03-20-hello-world.markdown %}

範本渲染

我們略微調整了 Jekyll 分析和呈現各種範本的方式,以改善整體建置時間。Jekyll 現在會分析範本一次,將其快取在內部,然後依據您的網頁和文件需要多次呈現已分析的範本。

這樣做的缺點是,某些社群撰寫的外掛程式可能無法像以前一樣運作。

未呈現的彙編中的靜態檔案

除了 文章 之外的彙編可以包含靜態資產和 Markdown 檔案。但是,如果彙編尚未設定為具有元資料 輸出:真實,則其文件靜態資產都不會輸出到目標目錄。

針對外掛程式作者

  • 如果您的外掛程式仰賴下列程式碼: site.liquid_renderer.file(路徑).parse(內容),請注意,該行的傳回值(範本Liquid::Template 的執行個體),對於給定的 路徑,將永遠是相同的物件
    範本 執行個體會像以前一樣呈現,並考量傳遞給它的 酬載。因此,您必須確保酬載 沒有在您的外掛程式執行個體中備忘或快取。

  • 如果要求從上述步驟取得的 範本 在任何時候都不同,您可以直接呼叫 Liquid::Template

    - template = site.liquid_renderer.file(path).parse(content)
    + template = Liquid::Template.parse(content)
    

排除變更

我們強化了預設排除陣列。它現在看起來像下列範例

# default excludes
exclude:
- .sass-cache/
- .jekyll-cache/
- gemfiles/
- Gemfile
- Gemfile.lock
- node_modules/
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/

新的部分是,這個陣列不再會被使用者設定檔中的 排除 陣列覆寫。使用者的排除項目會簡單地新增到上述預設陣列(如果該項目尚未排除)。

若要強制「處理」已排除的目錄或檔案,請將它們列在 包含 陣列中

# overrides your excluded items configuration and the default include array ([".htaccess"])
include:
  - .htaccess
  - node_modules/uglifier/index.js

上述設定會指示 Jekyll 只處理 node_modules/uglifier/index.js,同時忽略 node_modules 目錄中的所有其他檔案,因為該目錄預設為「排除」。

請注意,預設的 include 陣列仍會被設定檔中的 include 陣列覆寫。因此,如果您需要該檔案出現在產生的網站中,請務必將 .htaccess 加入清單。

Kramdown v2

Jekyll 已完全停止支援 kramdown-1.x

v2.0,kramdown 需要安裝特定擴充功能,才能使用 kramdown 核心功能以外的特定所需功能。

在上述連結的報告中所列出的所有擴充功能中,gem kramdown-parser-gfm 會自動與 Jekyll 4.0 一起安裝。其餘的擴充功能必須由使用者手動安裝,具體取決於所需的功能,方法是在其 Gemfile 中列出擴充功能的 gem 名稱。

注意事項

  • kramdown-converter-pdf 將會被 Jekyll Core 忽略。若要讓 Jekyll 將 Markdown 轉換為 PDF,您必須依賴一個外掛程式,該外掛程式會使用 所需方法Jekyll::Converter 進行子類別化。

    例如

    module Jekyll
      External.require_with_graceful_fail "kramdown-converter-pdf"
    
      class Markdown2PDF < Converter
        safe true
        priority :low
    
        def matches(ext)
          # match only files that have an extension exactly ".markdown"
          ext =~ /^\.markdown$/
        end
    
        def convert(content)
          Kramdown::Document.new(content).to_pdf
        end
    
        def output_ext
          ".pdf"
        end
      end
    end
    
  • 提供版本化 Jekyll 環境映像(例如 Docker 影像、GitHub Pages 等)的供應商必須在他們的發行版中手動將 kramdown 的擴充套件寶石加入白名單,以適用於 Jekyll 4.0。

已棄用的組態選項

Jekyll 4.0 已終止支援所有舊版組態選項,這些選項已在先前系列的多次發行中被棄用。

因此,當我們遇到舊版組態金鑰時,我們將不再輸出棄用警告,也不會優雅地將其值指定給較新的對應項目。根據金鑰的不同,它將被忽略或引發 InvalidConfigurationError 錯誤,如果金鑰仍然有效,但關聯值不是有效類型。