使用GitBook寫文檔并生成電子書(靜態網頁)

本文目錄

nodejs高于6.0版本要安裝gitbook3.2.3版本以上,否則會有問題

1、Gitbook 簡介

1.1 Gitbook

  • GitBook 是一個基于 Node.js 開發的命令行工具,使用它可以很方便的管理電子書,GitBook 是目前最流行的開源書籍寫作方案。

  • 使用 GitBook 可以讓創作者專注寫作,自由的揮灑,不必太多的關心內容排版、發布和版本管理等問題。

  • 除了通過 GitBook 命令行管理電子書外,還可以在線或者使用桌面編輯器 Gitbook Editor 來編寫和管理電子書。

  • 對于新手來說,推薦使用 Gitbook Editor 來編寫和管理電子書,因為它集成了 GitBook 命令、Markdown 編器和 Git 的功能,內容通過 Git 可與 gitbook.com / Gitlab / GitHub 同步,方便版本管理和團隊協作。

  • 可對于程序員或熟悉 Git 和 Markdown 的人,更推薦使用 GitBook 命令行 + Typora + SourceTree 來編寫和管理電子書。使用專業工具做專業的事,比 Gitbook Editor 高效很多。

  • GitBook 是開源的。

1.2 GitBook 功能

  • 支持 Markdown 或 AsciiDoc 語法。
  • 可導出靜態站點或電子書(PDF、epub、mobi)。
  • 支持多語言。
  • 可設置封面。
  • 支持變量、模板和模板繼承。
  • 有豐富的插件。

1.3 GitBook 的工具組合

  • Node.js:為了使用 npm 安裝 GitBook,一定要先安裝 Node.js。
  • GitBook 命令:基于 Node.js 開發的命令行工具,用于創建和管理電子書。
  • Markdown:GitBook 使用 Markdown 來寫作,作者再也不用擔心排版了。
  • Git:GitBook 使用 Git 管理寫作內容,方便多人協作和版本管理。
  • Github/Gitlab:跟代碼一樣,寫作的內容可以托管在 Github 或 Gitlab 中。
  • gitbook.com:用于在線編寫、發布和托管電子書的網站。

1.4 GitBook 的使用場景

  • 搭建公司內部的文檔平臺,用于公司內部的資料共享。
  • 發表開源的電子書,用于在互聯網上共享自己的知識,普惠大眾。

2、Gitbook 環境配置

2.1 安裝 Node.js

  • 因為 GitBook 是使用 Node.js 開發的,需要通過 Node.js 包管理工具 NPM 安裝,所以在開始之前要先把 Node.js 安裝好。

2.2 安裝 GitBook

  • 使用 NPM 安裝 GitBook 的命令行工具。

    $ sudo npm install gitbook-cli -g
    
  • 安裝完成后查看 GitBook 的版本。

    $ gitbook --version
    
  • 更新 GitBook 命令。

    $ npm update gitbook-cli -g
    
  • 卸載 GitBook 命令。

    $ sudo npm uninstall gitbook-cli -g
    
  • 注意:

    • 本例中使用的是全局安裝 GitBook 命令,還有一種安裝方式是本地安裝,兩種方式有什么不同呢?

      • 本地安裝:安裝包會被下載到當前所在目錄,因此只能在當前目錄下使用。
      • 全局安裝:安裝包會被下載到到特定的系統目錄下,安裝包能夠在所有目錄下使用。
    • 例如,查看 macOS 下全局安裝被安裝到了哪里?

      $ which gitbook
      /usr/local/bin/gitbook
      
      • GitBook 被安裝到了 /usr/local/bin/ 目錄下,因此可以全局使用。

2.3 快速開始 GitBook

  • 1)初始化 GitBook

    # 創建 mygitbook 文件夾,并切換到這個文件夾下面
    $ mkdir mygitbook && cd mygitbook
    
    # 初始化 gitbook 工作目錄,創建必要的文件
    $ gitbook init
    warn: no summary file in this book
    info: create README.md
    info: create SUMMARY.md
    info: initialization is finished
    
    • 然后會初始化 GitBook 目錄,創建兩個 md 格式的文件 README.md 和 SUMMARY.md

      • README.md - 項目的介紹都寫在這個文件里。
      • SUMMARY.md - GitBook 的目錄結構在這里配置。
  • 2)定義目錄結構

    • 兩種方法

      • 在 SUMMARY.md 文件中定義目錄結構有兩種方法。

        • 方法 ?. 先定義好目錄結構,通過 gitbook init 自動生成目錄結構對應的文件夾和 Markdown 文件。

        • 方法 ?. 先創建好文件夾和 Markdown 文件再來編輯目錄結構。

    • SUMMARY.md

      • SUMMARY.md 的目錄結構長什么樣?看下面:

        # Summary
        
        * [項目簡介](README.md)
        * [快速開始](docs/快速開始.md)
         * [環境搭建](docs/環境搭建.md)
         * [簡單使用](docs/簡單使用.md)
        * [學入學習](docs/深入學習) 
        
    • 這個目錄建好以后在根目錄下執行命令:

      $ gitbook init
      
    • 那些沒有的目錄和文件都會被創建:

      info: create docs/快速開始.md
      info: create docs/環境搭建.md
      info: create docs/簡單使用.md
      info: create docs/深入學習.md
      info: create SUMMARY.md
      info: initialization is finished
      
      • gitbook init 只支持生成兩級目錄。
  • 3)啟動服務

    • 在根目錄執行命令:

      $ gitbook serve
      
      • 結果:

        Live reload server started on port: 35729
        Press CTRL+C to quit ...
        
        info: 7 plugins are installed
        info: loading plugin "livereload"... OK
        info: loading plugin "highlight"... OK
        info: loading plugin "search"... OK
        info: loading plugin "lunr"... OK
        info: loading plugin "sharing"... OK
        info: loading plugin "fontsettings"... OK
        info: loading plugin "theme-default"... OK
        info: found 5 pages
        info: found 0 asset files
        info: >> generation finished with success in 1.9s !
        
        Starting server ...
        Serving book on http://localhost:4000       # 注意瀏覽地址
        
    • 執行 gitbook serve 命令后,會先編譯書籍 gitbook build,如果沒有問題會打開一個 Web 服務器,默認監聽 4000 端口。如果編譯有問題,會拋出錯誤信息。

gitbook新版本"gitbook build"命令導出的html不能跳轉的解決辦法

gitbook是一個很好用的工具,但是呢,我裝了好幾個版本,老是出現這個問題,于是請教周圍的前端大神,大神提出了解決方法,這個問題倒是可以暫時解決,具體一勞永逸的做法還沒找到,誰知道了,別忘了告訴我一聲?。?br> 可能原因
新版本的gitbook不支持了這個功能

具體原因
由于點擊事件被js代碼禁用,所以點擊沒有反應,但是如果右鍵,在新窗口/新標簽頁打開的話是可以跳轉的

解決辦法
找到js代碼,并修改

找到項目目錄gitbook
找到目錄下的theme.js文件
找到下面的代碼
將if(m)改成if(false)
由于代碼是壓縮后的,會沒有空格,搜索的時候可以直接搜索: if(m)for(n.handler&&

if (m)
    for (n.handler && (i = n,
    n = i.handler,
    o = i.selector),
    o && de.find.matchesSelector(Ye, o),
    n.guid || (n.guid = de.guid++),
    (u = m.events) || (u = m.events = {}),
    (a = m.handle) || (a = m.handle = function(t) {
        return "undefined" != typeof de && de.event.triggered !== t.type ? de.event.dispatch.apply(e, arguments) : void 0
    }
    ),
    t = (t || "").match(qe) || [""],
    l = t.length; l--; )
        s = Ze.exec(t[l]) || [],
        h = g = s[1],
        d = (s[2] || "").split(".").sort(),
        h && (f = de.event.special[h] || {},
        h = (o ? f.delegateType : f.bindType) || h,
        f = de.event.special[h] || {},
        c = de.extend({
            type: h,
            origType: g,
            data: r,
            handler: n,
            guid: n.guid,
            selector: o,
            needsContext: o && de.expr.match.needsContext.test(o),
            namespace: d.join(".")
        }, i),
        (p = u[h]) || (p = u[h] = [],
        p.delegateCount = 0,
        f.setup && f.setup.call(e, r, d, a) !== !1 || e.addEventListener && e.addEventListener(h, a)),
        f.add && (f.add.call(e, c),
        c.handler.guid || (c.handler.guid = n.guid)),
        o ? p.splice(p.delegateCount++, 0, c) : p.push(c),
        de.event.global[h] = !0)
    }

完成修改
保存,測試可用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容