既然我們使用了 Next.js 作為主要開發框架,那麼主流的 Hosting 通常就是 Vercel 或是 Netlify 了,差別在於 Vercel 的免費方案是反對商業使用的,如果需要在站內刊登廣告或是販售商品,建議可以使用 Netlify。
如果讀者像我一樣打算把 Monorepo 部署到 Vercel,那麼我們必須進行一些客製化的設定:
設定 Local 專案
首先準備 Build 指令:
{ // ... "scripts": { // ... "vercel": "next build && next export" }, // ...}
由於我們使用 SSG 生成 html 網站內容,為了避免路徑參雜副檔名,可以建立 vercel 的設定檔如下:
{ "cleanUrls": true}
設定 Vercel 專案
. | |
. | 覆寫為 |
. | 覆寫為 |
如果你的 Monorepo 有超過一個可部署的專案,那麼就必須避免 A 專案的改動觸發 B 專案的部署。解決方式之一是偵測特定 package 內的檔案變動,如果有變動則進行部署,若無變動則忽略部署。
進入到專案設定 -> 點選 -> 捲動至 欄位,輸入:
git diff --quiet HEAD^ HEAD .
此處需要特別注意,偵測的路徑是 而不是 ,因為我們在第一步的設定中已經調整過根目錄了,所以此處的路徑是相對於根目錄而言。
設定 Local 專案
除了準備 Build 指令以外,由於 Netlify 預設使用 npm,因此可以使用 指定使用 yarn:
{ // ... "packageManager": "yarn@1.22.19", "scripts": { // ... "netlify": "next build && next export" }, // ...}
設定 Netlify 專案
Base directory | |
Build command | |
Publish directory |
Netlify 預設就會偵測 base directory 內的檔案變動來決定是否要執行部署3,因此不用像 Vercel 一樣手動設定來避免非必要的部署。
部署
部署