博客 / 詳情

返回

Jekyll 安裝第三方模版

實際上,Jekyll安裝主題是非常反人類的——它一點也不比自己寫模版簡單,學習成本真是高。
安裝主題不是把人家做好的template直接複製過來就能用了。
每個模版設置的變量設置名、依賴的gem包都不一樣,還經常需要在本地安裝所有依賴包,安裝jekyll插件等。如果不懂Ruby gem的話,還真是不簡單。

到了這裏,一般人真的會問自己應不應該再繼續下去。因為明明簡單的東西,不知道是不是還值得了。

我相信所有堅持學習jekyll的人,都有自己非學不可的理由吧。

包管理器的理解

Jekyll是用Ruby語言構建的,且每個主題都會有超多的Ruby依賴包。在這裏需要先理解一些基本概念才能進行下去。

  • Ruby:是語言。這就不説了
  • Gem:全稱RubyGems,是Ruby的包管理器。相當於Python的pip。每一個包都叫a gem,在Python裏叫package.
  • Bundler:是管理gem管理器的管理器……相當於Python的pipenv,管理每個項目的gem包依賴。

簡單説,gem主要管理整個系統的Ruby包,下載安裝卸載之類。而Bundler只負責管理每個項目的Ruby包依賴。

一般安裝方法

先講講一般通用的模板安裝方法:

  • 首先到模版的Github網頁裏clone下來全部文件。
  • 在命令行裏打開這個模版的文件夾(其實它就是一個完整的Jekyll文件夾結構)
  • 首先直接運行這個主題:
$ jekyll serve
  • 如果沒有出錯能直接使用最好,出錯的話就走下一步。
  • 輸入以下命令安裝模版所需的依賴環境:
$ bundle install
  • 這樣bundle命令就會會根據文件夾中的Gemfile文件下載安裝所有模版所需的依賴環境。
  • 靜等結束之後,一般就可以$ jekyll serve直接運行網站了。
  • 打開jekyll提示的網站,到處點一點,如果網站能正常運行,那麼就可以把自己的markdown文章導入到_posts文件夾裏了。
  • 然後在每篇markdown文章的Front Matter裏,把theme改成這個模版的名稱,layout改成這個模版要求的layout等。
  • 然後重新運行jekyll serve,開始運行服務。
  • 複製命令行裏提示的本地url地址(每個主題的地址都不同),在瀏覽器裏打開,就可以在網站上看到更新了。
  • 如果出錯,可以試試下面命令來啓動服務,強制服務在當前依賴環境下運行。
$ bundle exec jekyll serve

至此,一般簡單的模版都可以搞定了。如果超出任何以上提及內容,我們就要到"特殊安裝方法"一節來分析了。

特殊安裝方法

一般安裝方法解決不了的,基本上算是特殊安裝方法了。

經過我嘗試了下載和安裝幾十個下載的主題後,發現如果碰見一個連bundle install命令都不用,直接jekyll serve就打開服務的,那簡直是像中大獎一樣的。
每個主題的安裝都不太一樣,且遇到的錯誤都完全不同。通用性極其小。

要想真正安裝好一個主題,必須掌握基本的Debug能力,命令行信息的理解能力,如果精通Ruby那麼就再好不過了。

基本上我不打算在這裏浪費時間把這些情況列出來討論,只是想把坑分享出來,提醒你不要跳。

如果不是100%確定真的想用這個主題,就不要浪費時間去調試和修改gem環境了,不值得。

我的經驗是:安裝越麻煩的,模版本身其實反而更醜更差勁👎。

涉及Node.js技術的模版安裝方法

Github社區裏的Jekyll模版流行使用nodejs的npm的gulp來編譯scss這些東西。
所以如果你沒注意到主題的説明文檔裏提到的gulp, npm之類,就會發現用jekyll serve無法進行網站生成。

這種情況下,只需要:安裝Node.js -> 使用npm -> 安裝gulp -> 命令行使用gulp編譯網站中的css文件。不過大多數情況下你的機器已經自帶了nodejs和npm(Windows除外),所以:

$ cd <主題的目錄>

# 安裝此項目的依賴環境
$ npm install

# 編譯此項目中的相關文件
$ gulp run

小1分鐘後,就會看到gulp開啓了一個端口,並自動打開了你的chrome瀏覽器,打開了這個項目的網頁(你會看到無法顯示出正常效果,因為這裏gulp這是用來編譯css的,它運行不了jekyll項目)。
然後ctrl+c退出,再打開jekyll命令編譯網站就行了-_-!

吐槽一下:請回想,為了安裝個jekyll和主題,此時你已經經歷了一個真的不算短的學習歷程了:
GitHub Pages -> Jekyll框架 -> .yml文件語法和配置 -> Liquid動態語言 -> Ruby -> gem -> bundle -> HTML+CSS+JS -> nodejs -> npm -> gulp……
這其中哪一步都值得説上一段時間。
然後回想起當初,其實你只是想在GIthub Pages裏建個靜態網頁而已。

常見問題

運行Jekyll serve 總報錯: ERROR `/sw.js' not found

image

根據這個Stackoverflow的回答:
sw.js是Service worker的意思,是自動生成的。
基本上不會造成什麼影響,但是主要出現這個錯誤,jekyll就沒法同步更新。

根據我的實際體驗,這不是主題的問題,而是jekyll的問題:對每個主題都報有這個錯誤。

user avatar cf020031308 頭像 woshishuaishuaideyumi 頭像 snowdreams1006 頭像 xfl03 頭像
4 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.