升級至第 9 版
要升級至第 9 版,請執行以下指令:
小知識: 如果您使用 TypeScript,請確保同時升級
@types/react
和@types/react-dom
至對應版本。
在 Vercel 上進行生產部署
如果您先前在 vercel.json
檔案中為動態路由配置了 routes
,當使用 Next.js 9 的新功能動態路由 (Dynamic Routing) 時,這些規則可以移除。
Next.js 9 的動態路由在 Vercel 上會自動配置,無需任何 vercel.json
自訂設定。
您可以閱讀更多關於動態路由的資訊。
檢查您的自訂 App 檔案 (pages/_app.js
)
如果您先前複製了自訂 <App>
範例,您或許可以移除 getInitialProps
。
從 pages/_app.js
中移除 getInitialProps
(在可能的情況下)對於使用新的 Next.js 功能非常重要!
以下 getInitialProps
沒有任何作用,可以移除:
重大變更
不再需要 @zeit/next-typescript
Next.js 現在會忽略 @zeit/next-typescript
的使用並警告您將其移除。請從您的 next.config.js
中移除此插件。
從您的自訂 .babelrc
中移除 @zeit/next-typescript/babel
的引用(如果存在的話)。
也應從您的 next.config.js
中移除 fork-ts-checker-webpack-plugin
的使用。
TypeScript 定義現在與 next
套件一起發布,因此您需要解除安裝 @types/next
,因為它們會產生衝突。
以下類型有所不同:
此清單由社群創建以協助您升級,如果您發現其他差異,請提交 pull request 到此清單以幫助其他使用者。
從:
變更為:
config
鍵現在是頁面的導出
您不能再從頁面導出名為 config
的自訂變數(例如 export { config }
/ export const config ...
)。
此導出變數現在用於指定頁面層級的 Next.js 配置,如選擇性 AMP 和 API 路由功能。
您必須將非 Next.js 用途的 config
導出重新命名為其他名稱。
next/dynamic
預設不再在載入時渲染 "loading..."
動態元件在載入時預設不會渲染任何內容。您仍然可以通過設置 loading
屬性來自訂此行為:
withAmp
已被移除,改為導出配置物件
Next.js 現在有了頁面層級配置的概念,因此為了保持一致性,移除了 withAmp
高階元件。
此變更可以通過在您的 Next.js 專案根目錄執行以下指令自動遷移:
要手動執行此遷移,或查看 codemod 將產生的結果,請參考以下內容:
之前
之後
next export
不再將頁面導出為 index.html
先前,導出 pages/about.js
會產生 out/about/index.html
。此行為已變更為產生 out/about.html
。
您可以通過建立包含以下內容的 next.config.js
來恢復先前的行為:
pages/api/
的處理方式不同
pages/api/
中的頁面現在被視為 API 路由 (API Routes)。
此目錄中的頁面將不再包含客戶端套件。
已棄用的功能
next/dynamic
已棄用一次載入多個模組
next/dynamic
中一次載入多個模組的功能已被棄用,以更接近 React 的實現方式(React.lazy
和 Suspense
)。
更新依賴此行為的程式碼相對簡單!我們提供了一個前後範例來幫助您遷移應用程式:
之前
之後