Hugo 建站經驗之談

static-site-generator-hugo

首發於 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/why-static-site-generator-hugo/html

前言

建站工具,早已不是一個新穎的話題,拋開可視化建站單論開發層面,各種語言都有推出廣受歡迎的建站框架,好比 Python 開發的 Pelican,JavaScript 開發的 Hexo,以及市場份額佔比最大的 PHP 開發的 WordPress 等等,這些筆者在折騰我的博客時多少都有用過。但當須要快速搭建起咱們的 Nebula Graph 官網 時,小小糾結對比以後,筆者選擇了 Golang 語言的 Hugo 來做爲咱們的技術方案,下面就來分享下我的使用 Hugo 建站的一些我的思考和經驗分享。前端

P.S: 客觀來講,各種語言的博客類型框架並沒有太大差異,更多仍是類比語言的我的喜愛與審美不一樣,在此不作敘述。git

實踐介紹

咱們的需求

Hugo 有靈活強大的內容管理系統,能隨着需求,不斷增長不一樣類型的資訊支持,諸如博客、Release Note、技術文檔等,詳細後面會介紹。github

  • 品宣介紹,常見就是站點首頁、新聞介紹等

一樣依賴內容管理系統,能很快支持到不一樣頁面的實現,包括相同組件如導航、頁腳等的共享,後面也會介紹。web

  • SEO 須要

Hugo 本就是相似服務端模板語言的 Web 框架,自然的服務端渲染。數據庫

  • 國際化支持,Nebula 注重國內外開發者的訪問體驗

Hugo 能漸進地拓展支持多國語言,只要你有對應的語料配置,就能迅速支撐需求並方便管理。服務器

  • 靈活易於管理,能讓非技術的運營同窗也能參與站點的內容管理

強大的模板系統,讓技術人員專心開發完對應模板後,能將內容管理交給運營同窗持續運營。微信

特色介紹

靈活強大的內容管理系統

...
├── config // 模板須要的內容語料
|   ├── default 
|   |   ├── config.toml
|   |   └── config.cn.toml
|   |   └── config.en.toml
|   |   └── footer.cn.toml
|   |   └── footer.en.toml
|   |   └── ...
├── content // 內容部分,平常多由運營同窗管理維護
|   ├── en // 國際化支持
|   |   ├── posts // 內置默認的博客(post)類型資訊
|   |   |   ├── post-01.md
|   |   |   ├── post-02.md
|   |   └── release // 新增的 release 類型資訊
|   |   |   ├── release-01.md
|   |   |   └── release-02.md
|   ├── cn
|   |   ├── posts
|   |   |   ├── post-01.md
|   |   |   ├── post-02.md
|   |   └── release
|   |   |   ├── release-01.md
|   |   |   └── release-02.md
...
├── themes // 站點的主題
|   ├── nebula-theme // 主題名
|   |   ├── layout // 模板
|   |   |   ├── _default // 默認的模板
|   |   |   |   ├── baseof.html // 渲染的種子頁面定義
|   |   |   |   ├── list.html  // 默認博客 post 類型資訊 - 列表頁的使用模板頁面
|   |   |   |   ├── single.html // 默認博客 post 類型資訊 - 詳情頁使用模板頁面
|   |   |   ├── partials // 複用的模板片斷
|   |   |   |   ├── head.html
|   |   |   |   ├── footer.html
|   |   |   |   ├── menus.html
|   |   |   |   ├── ...
|   |   |   ├── index.html // 首頁('/') 默認會使用的模板
|   |   |   ├── section
|   |   |   |   ├── release.html // 新增資訊類型 release 渲染時使用的模板頁面 - 發佈歷史頁面
|   |   |   |   ├── news.html // 新增資訊類型 news 渲染時使用的模板頁面 - 媒體新聞頁面
...

以上,即是 Hugo 用以支撐起靈活強大的模板系統所採用的項目結構,筆者感受比較能直觀反映出對於不一樣站點需求的支持,它甚至還能夠是不斷嵌以此結構不斷嵌套,外層的配置覆蓋內層的,更多信息能夠參考官方的模板系統介紹markdown

內置豐富工具集

除了強大的內容管理系統外,Hugo 還有不少很好用的內置模板及工具函數,知足不一樣需求狀況下提高搭建效率,抽象實現細節,更專一於站點的搭建,諸如:前端工程師

這個針對只有列表頁的需求,好比博客,發版歷史,新聞類等,好用的分頁模板,輕鬆的就幫你完成了。

  • 資源 RSS 模板 - RSS

對於資訊型的站點必不可少,官方已內置了默認的 rss 模板,只須要添加一行代碼,便可搞定 rss,固然還支持個性化定製。

  • 各種內容及字符串處理工具函數 - Functions

這個不用多說,對應程序中的各種常見的字符串替換,Hugo 都有着良好的支持,同時它還支持相似 Pipe 管道的方式,將處理內容以 | 分隔層層傳遞下去,就像咱們在 Linux 輸入的命令同樣。

  • 好用的 CLI 工具

內置了 http server 方便本地開發,同時又能將整個站點打包成純靜態的資源,方便了對於部署的操做和維護成本,能夠一鍵初始化並啓動項目,開箱即用的感受,上手容易。

  • 好用的內容管理工具
    • 迅速提取博客內容的目錄導航 - TableOfContents 使用此工具函數,會根據你當前的文章內容,提取目錄概要,節省了生成錨點內容的時間。
    • 便捷獲取文章的概覽內容 - Summary
    • 便捷獲取文章的圖片資源 - Image Processing
    • 自定義 URL 的規則 - URL Management

以上即是咱們在實踐中,有接觸過的一些 Hugo 比較好用的工具,固然它提供的遠比這個更豐富,更多工具可查看參考官方文檔

社區資源豐富

  • 生態很好,現成大量的主題可供選擇

做爲 Golang 語言最受歡迎的站點框架,隨着愈來愈多人的使用,Hugo 官方鼓勵你們開源本身的主題,約定了簡易可行的規範,讓貢獻者的主題能在 Hugo 官網方便地被他人找到,易於複用。非技術的同窗,也能夠找到符合本身需求的主題,不用寫一行 HTML 代碼,也能讓本身生成本身的站點。

  • 答疑途徑多樣
    • 做爲一個 45k+ star 的項目,使用人羣衆多,知識沉澱很好,網上搜索能解決大部分問題。
    • 有在線的論壇,維護者也至關活躍,只要提問得當,能及時獲得回覆,解決疑難雜症。
    • 官方文檔 的內容組織,層次也比較清晰,從筆者我的使用來看,體驗仍是很好的。

經驗總結

除了上面偏向於 Hugo 自己提供的功能介紹外,下面結合筆者自身的實踐經歷,闡述一些小小的經驗總結,方便後來的朋友:

使用現成的主題

基於 DIY 原則來講,結合自身需求,去主題市場找一個符合本身的主題來進行修改,應該是上手最快的方式了,甚至不須要開發就能拿來直接用,即便須要開發,使用他人已開發好的主題,因爲 Hugo 框架自己具備很好的約定規範,你也能很快了解到一個 Hugo 項目的結構組成及運行機制,下降調研上手成本。

項目結構和內容關係

就像前面介紹的內容管理系統,從結構上了解內容 contents 與模板 layouts 之間的映射關係,適當結合官網文檔的介紹,瞭解這層映射關係後,能方便在後續的開發過程當中,讓你的實踐更符合 Hugo 指望的形式來進行,這樣會讓你不管是實現,仍是在閱讀 Hugo 文檔的時候,事半功倍,易於理解。

我的定製

除了 Hugo 自己的框架、規範及工具能力外,由於網頁的代碼最終仍是離不開 HTML/CSS/Javascript,自定義相關的內容,只要善用提供的規則(如各個模板的引用,組合),就能在各個模板入口引入你想本身控制的代碼部分,爲你本身的站點添磚加瓦。結合咱們自身的實踐,好比第三方站點插件的集成(埋點統計,Discourse、ShareThis等等),一些自定義彈窗等動態 js 的添加,因此只要熟悉網頁的常規開發,除了 Hugo 的能力外,你能夠作到你以往可作的任何事情。

純靜態站點

Hugo 打包構建後輸出的是一個純靜態的資源包,這樣地好處就是你能夠將你的站點部署在任何地方,好比使用 GitHub 免費的 Pages,又或者是隨便放在 oss 源中,沒有維護服務器,數據庫的煩惱。純靜態資源部署很便捷,以 Hugo 爲例,他的路由適合文件目錄相關的,咱們的站點有中英文兩個語言版本,開發時都放在一個項目中進行維護共享模板,在構建部署時,會根據語言打成不一樣的資源包,分別發到不一樣的國內外 Web 容器,以此優化訪問體驗。

最後

以上即是筆者使用 Hugo 框架搭建公司 Nebula Graph 官網 的一些實踐心得,但願給有快速建站需求的朋友提供一些思路和參考,咱們的站點是基於已有主題二次開發,更多細節感興趣的朋友也能夠看看咱們放在 GitHub 的源站倉庫

也歡迎你們來了解咱們的 Nebula Graph 圖數據庫產品 或者前往官方論壇:https://discuss.nebula-graph.com.cn/建議反饋 分類下提建議 👏;加入 Nebula Graph 交流羣,請聯繫 Nebula Graph 官方小助手微信號:NebulaGraphbot

做者有話說:Hi,我是 Jerry,是圖數據 Nebula Graph 前端工程師,在前端平臺工具開發及工程化方面有些當心得,但願寫的經驗分享能給你們帶來幫助,若有不當之處也但願能幫忙糾正,謝謝~

相關文章
相關標籤/搜索