2019 年 4 月 2 日,星期二
Next.js 8.0.4
發布者我們很高興推出已可正式用於生產環境的 Next.js 8.0.4
一如既往,我們一直努力確保所有這些優點都完全向後相容。對於大多數 Next.js 應用程式,您只需要執行
npm i next@latest react@latest react-dom@latest
建置效能
Next.js 建置現在更具確定性,這表示如果程式碼沒有變更,則每次建置輸出都會保持相同的結果。
這允許建置程序完成更多可快取的工作,從而加快第一次建置後生產程式碼的重建速度。
我們的測量顯示,大量的建置時間花費在縮小 JavaScript 上,因為建置輸出現在更具確定性,縮小後的檔案已經在快取中的機率更高。
部署到 Vercel 的使用者 將自動體驗到這些快取改進。
我們簡化了伺服器端 next/dynamic
資訊清單,使其僅包含非同步載入的模組。這種簡化的資訊清單計算速度更快,並產生更少的 JavaScript。
CircleCI 使用者應該會注意到更快的建置時間。先前,由於 CircleCI 環境無法準確反映可用 CPU 的數量,因此工作人員過度排程。Next.js 現在會偵測 CircleCI,並根據可用資源設定適當的 CPU 數量。
更小的執行階段佔用空間
Next.js 現在產生的客戶端 JavaScript 減少了 5.58KB,並且 HTTP 酬載比以前的版本更小。
withRouter
不再依賴 hoist-non-react-statics
,將套件大小減少了 3KB。 withRouter
仍然會提升 getInitialProps
,但不會提升其他靜態屬性。
next/babel
預設集已最佳化,以產生更精簡和更快的 JavaScript。
X-Powered-By
標頭已移除,從而減少了 HTTP 酬載大小。我們調查了社群,發現標頭通常在生產環境中被停用,因此我們決定將其移除。這也表示,如果您的專案中啟用了該選項,則可以從 next.config.js
中移除 poweredByHeader
。
我們在 Next.js 相依性樹狀結構和整體程式碼庫中進行了許多最佳化,這樣做使每個無伺服器函式減少了 44KB (gzip 後為 5.44KB)。
無伺服器函式大小直接影響無伺服器啟動效能,較小的函式表示更快的啟動速度。
8.0 | 8.0.4 | 差異 | |
---|---|---|---|
無伺服器頁面大小 | 259 KB | 215 KB | 17% 更小 |
無伺服器頁面大小 (gzip) | 62.3 KB | 56.8 KB | 9% 更小 |
在 Next.js 8 發布後,我們收到少數使用者的回報,他們在 Next.js 外部匯入 React 元件時遇到問題,例如在他們的測試套件中。這是因為對 next
的匯入被重寫為 Next.js 程式碼庫內的正確檔案,但是,此最佳化已應用於 next/babel
預設集的所有使用者。最佳化已移至 Next.js 建置程序本身,因此不再與使用者的 babel 設定衝突。
預設 Viewport Meta 標籤
Next.js 的目標之一是為編寫 Web 應用程式提供最佳的預設值。為了減少在 Next.js 中實作 CSS media queries 時必須進行的設定量。
預設情況下,瀏覽器不會以您期望的方式處理 CSS @media
queries 和縮放,這可能會在編寫 CSS @media
queries 時導致意外的不一致。
在幾乎所有情況下,Next.js 使用者都會在其應用程式中新增 viewport
meta 標籤,以解決這些不一致問題。
從 8.0.4 版開始,在大多數情況下不再需要此 viewport
標籤。如果應用程式未設定 viewport
,則會套用預設的 viewport
<meta
name="viewport"
content="width=device-width,minimum-scale=1,initial-scale=1"
/>
仍然可以使用 next/head
覆寫 viewport 標籤
import Head from 'next/head';
function HomePage() {
return (
<>
<Head>
<meta
name="viewport"
content="width=device-width,minimum-scale=0.5,initial-scale=1"
/>
</Head>
</>
);
}
export default HomePage;
感謝 Jason Miller 合作並實作此變更。
新的 @next/mdx
外掛程式
MDX 可讓您在 Markdown 文件中編寫 JSX。您可以使用常規 markdown 語法來編寫內容,並匯入 React 元件以使用互動式和動態內容增強文件。
為 Next.js 提供 MDX 支援的外掛程式 @zeit/next-mdx
已移至 Next.js GitHub 儲存庫,現在以 @next/mdx
的形式提供。
安裝
npm i @next/mdx @mdx-js/loader
為了使其適用於您的 Next.js 應用程式,請建立一個 next.config.js
檔案並包含
const withMDX = require('@next/mdx')();
module.exports = withMDX();
隨著時間的推移,更多的 Next.js 外掛程式將被移至 Next.js 儲存庫中,以便它們與 Next.js 核心一起發布,並由 Next.js 測試套件進行測試。這樣我們就可以確保熱模組替換、生產建置和其他功能與外掛程式良好地協同運作。
學習指南改進
Next.js Learn 是一個逐步指南,用於學習 Next.js,並附有測驗和範例。
該網站最近已使用 MDX 重建,這使得貢獻比以往任何時候都更容易。我們歡迎任何人為 learn 網站 做出貢獻!
該網站也已升級為使用 Next.js 無伺服器目標,該目標在 Next.js 8 中引入,確保網站可擴展且對世界各地的使用者都快速。
我們收到了社群關於內容改進的大量意見回饋,並且在過去幾週內一直在採取行動。Next.js Learn 現在在每個部分都有更新的範例和更多詳細資訊,以使說明更容易理解!

貢獻
我們很高興看到 Next.js 的採用持續成長。
- 我們已經有超過 660 位貢獻者。
- 在 GitHub 上,該專案已被標註星號超過 36,150 次。
- 自首次發布以來,已提交超過 2,950 個提取請求。
我們要感謝每位為此 Next.js 版本做出貢獻的人。無論是貢獻核心,還是擴展和改進我們不斷成長的 範例目錄,我們都感謝所有貢獻。
如果您想開始為 Next.js 做出貢獻,標有 good first issue 或 help wanted 標籤的問題是個好的起點。
社群
Next.js 社群已成長到超過 6,000 名成員。
GitHub 討論區是您可以聊聊 Next.js、獲得關於如何解決問題的建議,並利用您對 Next.js 的知識幫助其他社群成員的地方。