紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, Next, React, 工作雜談, 新手 Jamp Holes, 未分類, 網站相關

簡單說明 Next 中 middleware.js、_app.js、_document.js、index.js 載入順序與作用

在 Next.js 中,middleware.js、_app.js、_document.js 和 index.js 這幾個檔案負責不同的功能,也有不同的執行順序。

對剛接觸 Next.js 的人來說,理解它們的作用和載入時機,能夠幫助你在正確的位置寫入適當的代碼,讓應用程式更穩定、更好維護。

整體執行順序

執行順序,需要分兩種情境來看,如下:

1. 當用戶請求 https://example.com/ 時的執行順序:

  1. middleware.js(攔截請求,可能重新導向或修改 headers)。
  2. _document.js(建立 HTML 結構)。
  3. _app.js(管理全域狀態與 CSS)。
  4. index.js(渲染實際頁面內容)。

2. 已經在某個頁面,點選其他頁面時的切換 CSR(客戶端切換頁面)的執行順序:

  1. middleware.js 不會執行
  2. _document.js 不會重新載入
  3. _app.js 仍然存在(不重新載入)。
  4. index.js(載入新的頁面內容)。

middleware.js 說明

middleware.js 主要用來攔截每個請求,並進行修改(如請求或響應頭 header),例如身份驗證、重定向等。

簡單解釋:

這就像是 機場的安檢站,在乘客登機前(進入應用),先檢查護照與行李(身份驗證、請求修改),決定是否讓乘客登機(請求放行),或轉搭其他航班(重定向、跳轉到指定頁面),或者拒絕登機(攔截請求,拒絕訪問)。

載入時機:

在每個請求進入應用程式時首先執行,並在路由匹配和處理之前運行。

_document.js 說明

定義 HTML 文件的基本結構,例如 <html><body>

簡單解釋:

想像它是一個 HTML 模板,讓你可以在所有頁面加上共同的標籤、字型載入等。

這就像 飛機的機身設計,決定所有飛機的基本框架,例如座位佈局(HTML 結構),但不負責具體的航班資訊(頁面內容)。

載入時機:

只在伺服器端執行,用來生成完整的 HTML 框架,在瀏覽器加載頁面時不會重新執行。

_app.js 說明

負責全局的頁面初始化,例如佈局、狀態管理、主題設定等。

簡單解釋:

這就像 登機閘口,確保每位乘客(使用者)登機前(進入頁面)都經過必要的流程,例如登機證檢查(權限驗證)、行李統一標準(全局樣式)、提醒航班資訊(共享狀態)。

載入時機:

在每個頁面加載時執行,可用於共用的佈局(Header、Footer)或狀態管理(如 Redux Provider)。

根目錄 index.js 說明

定義網站首頁的內容和邏輯。

簡單解釋:

預設的首頁,就如同你在網址輸入 https://example.com/ ,在沒有其他設定的前提下,預設最終就是執行 index.js

載入時機:

只有在訪問 / 時才會執行,負責首頁的內容渲染。

結論

以上就是點單的整理與解說,方便新手用戶理解。

參考文件

middleware 官方文件

document 官方文件

app 官方文件

Next.js 路由與頁面處理

發表迴響