如何用 Jekyll 建立一個靜態網站? - GitHub Pages x Jekyll x Blog

本篇重點

  • 介紹如何尋他人提供的主題模板(Jekyll Theme)。
  • 介紹 Jekyll, Ruby, Gem 的關係,還有各自的用意。
  • 介紹如何安裝 Jekyll。
  • 利用 Jekyll 初始化預設的靜態網站架構,並觀察與他人的 Jekyll Theme 架構差異。
  • 將 Jekyll 預設的靜態網站 push 到 GitHub 部落格專案目錄。

估狗一下 Jekyll + GitHub Pages + Theme

  • 映入眼簾的應該會有 GitHub Pages themes這個網站提供許多 Jekyll Theme,裡面有免費的也有收費的主題可供使用。
  • Jekyll 官網也有提供不少主題範例。
  • 雖然有免費的主題,但不見得每個都是可以直接使用的,有些在套用上可能還要花費一點心思調整。

Minimal Mistakes

  • 接下來會以 Minimal Mistakes 這個主題作為部落格的配置。
  • 進入 Minimal Mistakes 的展示頁面後,往下拉可以看到該主題被許多使用者採用。點選「Get Minimal Mistakes on GitHub」可以進到該主題的 GitHub 專案目錄。

    alt

  • 進到該主題的 GitHub 專案目錄後,看到 Installation 的部分。有提到三種安裝方式:
    • as a gem-based theme
    • as a remote theme (GitHub Pages compatible)
    • or forking/directly copying all of the theme files into your project

先備知識

  • 在了解上述安裝方式前,先來看一下到底什麼是 Ruby, gem, Jekyll
    • Ruby: 一種程式語言。
    • Jekyll: 一個將文件轉換成靜態網站的工具,利用 Ruby 撰寫的。
    • gem: 一個 Ruby 的套件管理工具。因為程式開發時,經常要載入不同開發者提供的工具,透過套件管理工具可以增加下載的便利性。
  • 那麼,Minimal Mistakes 跟上述三者又有什麼關係呢?
    • Minimal Mistakes 是一個 Jekyll Theme,將 Minimal Mistakes 內容下載到本機後,可以利用 Jekyll 把內容架起來(還在本地端),並用瀏覽器查看架起來的靜態網站。
    • 而 Jekyll 這個工具可以透過 Ruby 的套件管理工具 gem 取得。
    • 簡單的說,先有 Ruby 環境、gem 套件管理工具,就可以安裝 Jekyll,接著下載 Minimal Mistakes 內容,再用 Jekyll 將其架設。
  • 安裝 Ruby 環境、gem 套件管理工具、Jekyll 套件
    • 可以參考 Jekyll 安裝手冊
    • 內容提到至少要先安裝 Ruby, RubyGem, GCC, Make。
    • 然後依照自己的作業系統,選擇適當的安裝方法,最後確認所有內容都有正常安裝。
      # 確認是否安裝 Ruby
      $ ruby -v
        
      # 確認是否安裝 Gem
      $ gem -v
        
      # 確認是否安裝 GCC
      $ gcc -v
      $ g++ -v
        
      # 確認是否安裝 Make
      $ make -v
        
      # 確認是否 Jekyll
      $ jekyll -v
    

在套用別人的模板前,先看看 Jekyll Theme 該有的架構

  • 1). 建立一個資料夾,並執行 jekyll new . 來生成 Jekyll Theme 的基本架構

      # 1. 先建立資料夾(例如我在 /tmp 中建立一個名為 blog 的資料夾)
      $ mkdir /tmp/blog
        
      # 2. 進到 /tmp/blog 資料夾
      $ cd /tmp/blog
        
      # 3. 執行 jekyll new . 產生 Jekyll Theme 的基本架構
      $ jekyll new .
        
      # 4. 觀察產生了哪些檔案
      $ ls
    
      # 產生的檔案
      -rw-r--r--    1 root     root    444 Dec 28 03:35 404.html
      -rw-r--r--    1 root     root   1150 Dec 28 03:36 Gemfile
      -rw-r--r--    1 root     root   1906 Dec 28 03:36 Gemfile.lock
      -rw-r--r--    1 root     root   2135 Dec 28 03:35 _config.yml
      drwxr-xr-x    2 root     root   4096 Dec 28 03:35 _posts
      drwxr-xr-x    5 root     root   4096 Dec 28 03:36 _site
      -rw-r--r--    1 root     root    557 Dec 28 03:35 about.markdown
      -rw-r--r--    1 root     root    181 Dec 28 03:35 index.markdown
    
  • 2). 如果想看這個 Jekyll 產生的靜態網站,可以執行 bundle exec jekyll serve --trace,或是執行 bundle exec jekyll serve --livereload --host 0.0.0.0

      # 正常運作的結果
      Configuration file: /tmp/blog/_config.yml
                  Source: /tmp/blog
             Destination: /tmp/blog/_site
       Incremental build: disabled. Enable with --incremental
            Generating...
             Jekyll Feed: Generating feed for posts
                          done in 0.352 seconds.
       Auto-regeneration: enabled for '/tmp/blog'
          **Server address: http://127.0.0.1:4000/**
        **Server running... press ctrl-c to stop**.
    
      # 若是執行 bundle exec jekyll serve --livereload --host 0.0.0.0
      Configuration file: /usr/src/blog/_config.yml
                  Source: /usr/src/blog
             Destination: /usr/src/blog/_site
       Incremental build: disabled. Enable with --incremental
            Generating...
             Jekyll Feed: Generating feed for posts
                          done in 0.396 seconds.
       Auto-regeneration: enabled for '/usr/src/blog'
      ***LiveReload address: http://0.0.0.0:35729***
          ***Server address: http://0.0.0.0:4000/***
        Server running... press ctrl-c to stop.
    

    webrick 的錯誤處理

      $ bundle exec jekyll serve --trace
        
      # webrick 錯誤內容
      Configuration file: /tmp/blog/_config.yml
                  Source: /tmp/blog
             Destination: /tmp/blog/_site
       Incremental build: disabled. Enable with --incremental
            Generating...
             Jekyll Feed: Generating feed for posts
                          done in 0.366 seconds.
       Auto-regeneration: enabled for '/tmp/blog'
      **bundler: failed to load command: jekyll** (/usr/local/bundle/bin/jekyll)
      /usr/local/bundle/gems/jekyll-4.2.1/lib/jekyll/commands/serve/servlet.rb:3:in `require': ***cannot load such file -- webrick (LoadError)***
        
      ... 下略
    
    • 依照 Jekyll 官網的 Quick Start 頁面,有一個提示說到「如果 Ruby 版本高於 3.0.0,可能要先執行 bundle add webrick
    • 所以,若遇到上述錯誤「cannot load such file – webrick (LoadError)」,可以先執行 bundle add webrick,再執行 bundle exec jekyll serve --trace
  • 3). 把這個資料夾的內容 push 到 GitHub 的部落格專案吧(這邊就用最簡單的拖拉方式)!
    1. 進到 GitHub 部落格專案目錄,點選 Upload files

      alt

    2. 把資料夾中的檔案全部拖拉到網頁中
    3. 填寫本次提交(commit)原因,這步驟很重要,方便未來回顧、除錯

      alt

    4. 最後專案目錄應該要長得跟下圖差不多

      alt

    5. 過幾分鐘後,再到 https://<username>.github.io/ 查看,應該會變成預設的 Jekyll 歡迎頁面
  • jekyll new 的靜態網站畫面支援

    alt

    • 可以點選圖中的「Welcome to Jekyll!」,會跳到 jekyll new 產生的預設文章。
    • 該文章的內容可以到第一步驟的資料夾查看,應該能在 _posts 資料夾看到。

複製 Minimal Mistakes 專案

  • 有了基本知識後,接下來將 Minimal Mistakes 的專案下載到本機,並利用 Jekyll 執行之。
  • 1). 進到 Minimal Mistakes 專案目錄後,看是要用 Git 的 GUI 介面(GitHub Desktop 或SourceTree),或是要直接下載 Zip 檔。

    alt

  • 2). 將 Zip 檔解壓縮,比較一下 Minimal Mistakes 跟預設的 Theme 架構差異

      Default              Minimal Mistakes
      ----------------------------------------
      404.html             CHANGELOG.md
      Gemfile              Gemfile
      Gemfile.lock         LICENSE
      _config.yml          _config.yml
      _posts               Rakefile
      _site                README.md
      about.markdown       _data
      index.markdown       _includes
                           _layouts
                           _sass
                           assets
                           banner.js
                           docs
                           index.html
                           minimal-mistakes-jekyll.gemspec
                           package-lock.json
                           package.json
                           screenshot-layouts.png
                           screenshot.png
                           staticman.yml
                           test
    
    • 可以看出 Minimal Mistakes 跟預設的 Jekyll Theme 有很大的差異。

💡 之所以要下載到本機是為了在本機先查看網站狀況是否正常,若一切沒問題才會將結果 push 到 GitHub 的專案目錄。就像推出一個新產品或新版本時,會先在開發環境確認一切是否正常才真正推出到客戶手上。

結語

  • Jekyll 是用來將文件轉換成靜態網站的工具,只要資料夾中的檔案、架構符合 Jekyll 的格式,就能將其轉換成靜態網站,並在瀏覽器中查看。
  • GitHub Pages 會吃 GitHub 中的資料,只要資料、格式符合 Jekyll 能吃的,就可以在 https://<username>.github.io/ 中看到對應的結果(不過要等個 1, 2分鐘)。
  • 本篇雖然有下載 Minimal Mistakes,但並沒有將其建構起來,只能單純看該主題的資料格式(雖然也沒特別介紹XD)
  • 下一篇會介紹如何用 jekyll 將 Minimal Mistakes 跑起來,然後在瀏覽器中看到該主題!

參考連結

留言