fbpx

一個純粹使用 Javascript 實現的 git,可使用於 node 和瀏覽器

Contents

在了解這個專案前,可以先來了解一下 isomorphic javascript 這個技術名詞,根據維基百科的描述

Isomorphic JavaScript, also known as Universal JavaScript, describes JavaScript applications which run both on the client and the server.

Isomorphic JavaScript,也稱為通用 JavaScript,描述了可以同時在客戶端和伺服器上運行的JavaScript 應用程式。

所以根據這個描述,isomorphic-git 也就是可以同時在伺服器端和 Web 端上運行的 git !

isomorphic-git 是使用純粹的 JavaScript 實現 git 功能,適用於 node 和瀏覽器環境(包括WebWorkers 和ServiceWorkers [ 所以也支援 PWA ] )。 這意味著它可以用於讀取和寫入git儲存庫( repository ),以及像 Github 一樣從遠端 git 伺服器獲取和推送變更。這個專案也提供了一個 CLI 工具 – isogit 可以在桌面電腦和在伺服器端操作 git 儲存庫

開始使用

Isomorphic 的意思既然是在瀏覽器端和伺服器端都可以使用同樣的功能,可是我們都知道 git 是非常依賴檔案系統的 ,這在伺服器端是沒問題的,因為 nodejs 有實現檔案系統管理模組 fs ,可是在瀏覽器端並沒有 fs 模組?因此,isomorphic-git 不是依賴於 fs 模組,而是BYOFS(自帶檔案系統)。 在使用大多數 isomorphic-git 函數之前,需要通過外掛系統設置 fs 模組。

如果你只在 Node 中使用 isomorphic-git,則可以使用本機 fs 模組。

const git = require('isomorphic-git');
const fs = require('fs');
git.plugins.set('fs', fs)

如果你正在為瀏覽器編寫程式碼,則需要一些模擬 fs API 的東西。目前最完整的選項是BrowserFS。 與 Node相比,還有一個額外的設置步驟來配置 BrowserFS,如下所示:

<script src="https://unpkg.com/browserfs"></script>
<script src="https://unpkg.com/isomorphic-git"></script>
<script>
BrowserFS.configure({ fs: "IndexedDB", options: {} }, function (err) {
  if (err) return console.log(err);
  window.fs = BrowserFS.BFSRequire("fs");
  git.plugins.set('fs', window.fs);
});
</script>

更詳細的使用可以參考線上文件

CORS 支援

不幸的是,由於默認情況 same-origin 策略,isomorphic-git 只能從與其運行的網頁相同的原點進行 clone。 這非常不方便,因為它意味著所有實際上的用途,clone 和 push repo 必須透過 proxy 完成。

為此,存在了 @ isomorphic-git / cors-proxy,你可以 clone 這個專案或是使用 npm install 來安裝。對於測試或小專案,你還可以使用https://cors.isomorphic-git.org – 由Clever Cloud贊助的免費 proxy 。

當成一個 npm 模組來使用

你可以使用 npm install 來安裝。

npm install --save isomorphic-git

在package.json中,你會看到實際上有4個不同的版本:

"main": "dist/for-node/",
  "browser": "dist/for-browserify/",
  "module": "dist/for-future/",
  "unpkg": "dist/bundle.umd.min.js",

這值得簡要解釋。

  • “main”版本用於 node。
  • “browser”版本適用於browserify。
  • “module” 版本用於原生 ES6 module loader 功能完成時。
  • “unpkg”版本是UMD版本。

isogit CLI

Isomorphic-git 附帶一個簡單的 CLI 工具,名為 isogit,因為 isomorphic-git 名稱比較長要打比較多的字。 它實際上只是一個輕薄短小的 shell,可以將命令列參數轉換為等效的 JS API 指令。 因此,你應該能夠使用 CLI 運行任何目前或未來的 isomorphic-git 命令。

它使用 minimisted 來解析命令列選項,並打印出等效的 JS 命令並輸出為 JSON 格式。

CLI 比較像是為了快速測試 isomorphic-git,而不是真正意義上的 git CLI 替代品。

感想

如果你有使用 Javascript 開發的 Web 專案需要與 Git 做整合,無論是前端或是後端都可以使用這個程式庫做整合

這個專案讓我覺得最了不起的除了使用 Javascript 實現讀取 git repository 的功能,還有就是這個專案強調的 isomorphic 技術,這件事其實困難度蠻高的,例如這個專案的檔案系統管理就要特別再設計一個抽象層 API ,讓前端和後端都可以用同樣的介面

如果你的專案也需要類似的 isomorphic 設計,可以參考一下這個開源專案的架構與設計

專案網址

相關課程電子書

 歡迎使用 e-mail 訂閱 Soft & Share 

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: