Netlify — 靜態頁面的自動化部署神器

realdennis
4 min readOct 23, 2018

--

部署前端程式 — 在8102年來說,已經不是一件複製貼上、上傳這麼簡單的事情,在前端工程化的年代,一個單頁的網站專案可能有一拖拉庫的資料夾(src/ public/ config/ …),但是最終User看到的只會是build完後的那個資料夾(docs/… 或是 build/…),如果能夠自動化……

最終使用者只會看到那個 build 後的資料夾,我們可以很土炮的把 build 完的資料夾扔到 server public_html 透過 apache 或其他的 web server hosting ,不過這相當麻煩,每一次改動後 → buildcp 過去 overwrite ,當然這可以透過腳本解決,不過還是相當繁瑣。

“man programming using laptop” by Danial RiCaRoS on Unsplash

先來說說GitHub — gh-pages

GitHub 本身有靜態部署的 Solution ,也就是 gh-pages ,也是筆者我一開始踏入瘋狂撰寫靜態應用的最大原因,它允許你將靜態應用的 repo hosting 起來,且 URL 會是 https://${username}.github.io/${reponame}User 可以一目瞭然的知道,這個靜態頁面的 repo 是來自何處,作為開源的Component而言,當然挺具備宣傳功能。

其中讓我感到挺方便的有兩點 —

  • 方便的 CNAME 設定
  • 直上 SSL

透過 Vue / React 撰寫的應用扔到 gh-pages 也會遇到一些麻煩的點:

  1. Vue / React template 通常預設你的 Access 是從根目錄開始的,變成你要額外設定成相依 path ,比如 “/static” 得設定成 “./static” ,當然現在的 Vue ui 或是 React config 都能輕鬆改掉 (publicPath之類的設定) 。
  2. 因為 master branch 拿來放置整個 repo ,所以只有兩個方法可以讓 GitHub 幫你部署應用 — (i) 把 build 後的path設定在 docs/ 的位置並 push 上去 (ii)將 build 後的資料夾另外 push gh-pages branch

關於第二點可以透過其他人撰寫的腳本去簡化它,例如這個

再來說說我認為的神器 — Netlify

Netlify 承襲著 gh-pages 所擁有的優點,包括 CNAME 以及 SSL 自動上鎖,主要很狂的點:

  1. 持續性部署
  2. 沒有子路徑問題 — https://${app-name}.netlify.com/
  3. 支持 Private Repo

這邊開始依序講講這三點為何如此地 powerful

持續性部署

如果各位有用過 CI/CD 工具,如Jenkins或Travis就知道持續性整合工具有多麼的方便,且 service 會持續 track repo 是否有新的 commit 紀錄。

一開始設定repo後,他會請你輸入build的command以及build後的目錄。

Netlify 目前支援的有 — GitHub / Bitbucket / GitLab,且會做到持續性部署,每當有新的 commit 上去,他會持續性地將靜態頁面給 build 起來。

沒有子路徑問題

如同Heroku,被部署後的程式可以自定義頁面名字,比如上面的 vue-tarot 這個 repo ,我把它定為 daily-tarot 這個名字,這樣子就可以透過 — https://daily-tarot.netlify.com/access

static file 就可以不改動原先規則、不使用相依 path 的方式直接 access ,雖然這點看似沒什麼,不過在調整 pwa manifest.json icon 位置時,真的會搞到難受、想哭、想扁人。

支持 Private Repo

這點我真心覺得非常屌,通常這類 CD 工具不會允許免費使用 private repo track ,不過 Netlify 目前是支援的,一些作為 demo 不打算開源的 project ,可以透過 Netlify 持續性地為新功能部署,無論是 demo 給親朋好友看、 demo 給案主看,我相信這都是一個非常棒的功能。

結論

雖然提了不少令人激動的點,不過筆者目前僅用過 GitHubCNAME ,所以並不確定 NetlifyCNAME 開通時間啊、 SSL 狀況…,一個服務的穩定仍需要時間來考驗,但我非常非常的感謝有這樣的服務誕生於世界上,上一次有這種感覺的時候大概是第一次使用 Travis 了 :-P

--

--

No responses yet