部署

Vercel vs. Netlify

#

既然我們使用了 Next.js 作為主要開發框架,那麼主流的 Hosting 通常就是 Vercel 或是 Netlify 了,差別在於 Vercel 的免費方案是反對商業使用的,如果需要在站內刊登廣告或是販售商品,建議可以使用 Netlify。

將部落格部署到 Vercel

#

如果讀者像我一樣打算把 Monorepo 部署到 Vercel,那麼我們必須進行一些客製化的設定:

  1. 設定 Local 專案

    首先準備 Build 指令:

    personal-blog/package.json
    {
    // ...
    "scripts": {
    // ...
    "vercel": "next build && next export"
    },
    // ...
    }

    由於我們使用 SSG 生成 html 網站內容,為了避免路徑參雜副檔名,可以建立 vercel 的設定檔如下:

    personal-blog/vercel.json
    {
    "cleanUrls": true
    }
  2. 設定 Vercel 專案

    .
    .
    覆寫為
    .
    覆寫為

    避免非必要的部署 1 2

    #

    如果你的 Monorepo 有超過一個可部署的專案,那麼就必須避免 A 專案的改動觸發 B 專案的部署。解決方式之一是偵測特定 package 內的檔案變動,如果有變動則進行部署,若無變動則忽略部署。

    進入到專案設定 -> 點選 -> 捲動至 欄位,輸入:

    git diff --quiet HEAD^ HEAD .

    此處需要特別注意,偵測的路徑是 而不是 ,因為我們在第一步的設定中已經調整過根目錄了,所以此處的路徑是相對於根目錄而言。

將部落格部署到 Netlify

#

  1. 設定 Local 專案

    除了準備 Build 指令以外,由於 Netlify 預設使用 npm,因此可以使用 指定使用 yarn:

    personal-blog/package.json
    {
    // ...
    "packageManager": "yarn@1.22.19",
    "scripts": {
    // ...
    "netlify": "next build && next export"
    },
    // ...
    }
  2. 設定 Netlify 專案

    Base directory
    Build command
    Publish directory

    Netlify 預設就會偵測 base directory 內的檔案變動來決定是否要執行部署3,因此不用像 Vercel 一樣手動設定來避免非必要的部署。

註釋

#

  1. How do I use the "Ignored Build Step" field on Vercel?open_in_new

  2. How to prevent unnecessary Vercel buildsopen_in_new

  3. Ignore buildsopen_in_new