專案結構與組織
本頁面概述 Next.js 中的資料夾和檔案慣例,以及組織專案的提示。
資料夾和檔案慣例
頂層資料夾
頂層資料夾用於組織應用程式的程式碼和靜態資源。


頂層檔案
頂層檔案用於設定應用程式、管理依賴項、執行中介軟體、整合監控工具,以及定義環境變數。
Next.js | |
next.config.js | Next.js 的設定檔 |
package.json | 專案依賴項和腳本 |
instrumentation.ts | OpenTelemetry 和儀器化檔案 |
middleware.ts | Next.js 請求中介軟體 |
.env | 環境變數 |
.env.local | 本機環境變數 |
.env.production | 生產環境變數 |
.env.development | 開發環境變數 |
.eslintrc.json | ESLint 的設定檔 |
.gitignore | 要忽略的 Git 檔案和資料夾 |
next-env.d.ts | Next.js 的 TypeScript 宣告檔案 |
tsconfig.json | TypeScript 的設定檔 |
jsconfig.json | JavaScript 的設定檔 |
路由檔案
layout | .js .jsx .tsx | 版面配置 |
page | .js .jsx .tsx | 頁面 |
loading | .js .jsx .tsx | 載入 UI |
not-found | .js .jsx .tsx | 找不到 UI |
error | .js .jsx .tsx | 錯誤 UI |
global-error | .js .jsx .tsx | 全域錯誤 UI |
route | .js .ts | API 端點 |
template | .js .jsx .tsx | 重新渲染的版面配置 |
default | .js .jsx .tsx | 平行路由回退頁面 |
巢狀路由
folder | 路由區段 |
folder/folder | 巢狀路由區段 |
動態路由
[folder] | 動態路由區段 |
[...folder] | 全域捕捉路由區段 |
[[...folder]] | 可選的全域捕捉路由區段 |
路由群組和私有資料夾
平行和攔截路由
@folder | 命名插槽 |
(.)folder | 攔截同一層級 |
(..)folder | 攔截上一層級 |
(..)(..)folder | 攔截上兩層級 |
(...)folder | 從根目錄攔截 |
Metadata 檔案慣例
App 圖示
favicon | .ico | Favicon 檔案 |
icon | .ico .jpg .jpeg .png .svg | App 圖示檔案 |
icon | .js .ts .tsx | 產生的 App 圖示 |
apple-icon | .jpg .jpeg , .png | Apple App 圖示檔案 |
apple-icon | .js .ts .tsx | 產生的 Apple App 圖示 |
Open Graph 和 Twitter 圖片
opengraph-image | .jpg .jpeg .png .gif | Open Graph 圖片檔案 |
opengraph-image | .js .ts .tsx | 產生的 Open Graph 圖片 |
twitter-image | .jpg .jpeg .png .gif | Twitter 圖片檔案 |
twitter-image | .js .ts .tsx | 產生的 Twitter 圖片 |
SEO
元件階層
在路由區段的特殊檔案中定義的 React 元件,會以特定的階層結構渲染
layout.js
template.js
error.js
(React 錯誤邊界)loading.js
(React Suspense 邊界)not-found.js
(React 錯誤邊界)page.js
或巢狀layout.js


在巢狀路由中,區段的元件將會巢狀在父區段的元件內部。


組織您的專案
除了資料夾和檔案慣例,Next.js 對於您如何組織和並置專案檔案是沒有既定想法的。但它確實提供了一些功能來協助您組織專案。
並置
在 app
目錄中,巢狀資料夾定義路由結構。每個資料夾代表一個路由區段,該區段會對應到 URL 路徑中的對應區段。
然而,即使路由結構是透過資料夾定義的,但在將 page.js
或 route.js
檔案新增至路由區段之前,路由不會公開存取。


而且,即使路由已公開存取,也只有 page.js
或 route.js
傳回的內容會傳送至用戶端。


這表示專案檔案可以安全地並置在 app
目錄中的路由區段內,而不會意外地變成可路由的。


小提示:
- 雖然您可以在
app
中並置專案檔案,但您不一定要這麼做。如果您願意,您可以將它們保留在app
目錄外部。
私有資料夾
私有資料夾可以透過在資料夾前加上底線來建立:_folderName
這表示資料夾是私有實作細節,不應被路由系統考量,因此選擇退出路由的資料夾及其所有子資料夾。


由於 app
目錄中的檔案預設可以安全地並置,因此並置不需要私有資料夾。但是,它們對於以下情況可能很有用:
- 將 UI 邏輯與路由邏輯分離。
- 一致地組織專案和 Next.js 生態系統中的內部檔案。
- 在程式碼編輯器中排序和群組檔案。
- 避免與未來 Next.js 檔案慣例發生潛在的命名衝突。
小提示:
- 雖然不是框架慣例,您也可以考慮使用相同的底線模式將私有資料夾外部的檔案標記為「私有」。
- 您可以透過在資料夾名稱前加上
%5F
(底線的 URL 編碼形式)來建立以底線開頭的 URL 區段:%5FfolderName
。- 如果您不使用私有資料夾,那麼了解 Next.js 特殊檔案慣例,以防止意外的命名衝突會很有幫助。
路由群組
路由群組可以透過將資料夾包裝在括號中來建立:(folderName)
這表示資料夾是為了組織目的,不應包含在路由的 URL 路徑中。


路由群組對於以下情況很有用:
- 將路由組織成群組,例如依網站區段、意圖或團隊。
- 在相同的路由區段層級中啟用巢狀版面配置
src
目錄
Next.js 支援將應用程式程式碼(包括 app
)儲存在可選的 src
目錄中。這會將應用程式程式碼與專案設定檔分開,後者主要位於專案的根目錄中。


常見策略
以下章節列出了常見策略的非常高階的概述。最簡單的結論是選擇適合您和您的團隊的策略,並在整個專案中保持一致。
小提示:在我們下面的範例中,我們使用
components
和lib
資料夾作為通用的佔位符,它們的命名沒有特殊的框架意義,您的專案可能會使用其他資料夾,例如ui
、utils
、hooks
、styles
等。
將專案檔案儲存在 app
外部
此策略將所有應用程式程式碼儲存在專案根目錄中的共用資料夾中,並將 app
目錄純粹用於路由目的。


將專案檔案儲存在 app
內部的頂層資料夾中
此策略將所有應用程式程式碼儲存在 app
目錄的根目錄中的共用資料夾中。


依功能或路由分割專案檔案
此策略將全域共用的應用程式程式碼儲存在根 app
目錄中,並將更特定的應用程式程式碼分割到使用它們的路由區段中。


這有幫助嗎?