跳到內容
回到部落格

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,將套件大小減少了 3KBwithRouter 仍然會提升 getInitialProps,但不會提升其他靜態屬性。

next/babel 預設集已最佳化,以產生更精簡更快的 JavaScript。

X-Powered-By 標頭已移除,從而減少了 HTTP 酬載大小。我們調查了社群,發現標頭通常在生產環境中被停用,因此我們決定將其移除。這也表示,如果您的專案中啟用了該選項,則可以從 next.config.js 中移除 poweredByHeader

我們在 Next.js 相依性樹狀結構和整體程式碼庫中進行了許多最佳化,這樣做使每個無伺服器函式減少了 44KB (gzip 後為 5.44KB)

無伺服器函式大小直接影響無伺服器啟動效能,較小的函式表示更快的啟動速度。

8.08.0.4差異
無伺服器頁面大小259 KB215 KB17% 更小
無伺服器頁面大小 (gzip)62.3 KB56.8 KB9% 更小

在 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 標籤

pages/index.js
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 現在在每個部分都有更新的範例和更多詳細資訊,以使說明更容易理解!

The Next.js Learn Website
Next.js Learn 網站

貢獻

我們很高興看到 Next.js 的採用持續成長。

  • 我們已經有超過 660 位貢獻者。
  • 在 GitHub 上,該專案已被標註星號超過 36,150 次
  • 自首次發布以來,已提交超過 2,950 個提取請求

我們要感謝每位為此 Next.js 版本做出貢獻的人。無論是貢獻核心,還是擴展和改進我們不斷成長的 範例目錄,我們都感謝所有貢獻。

如果您想開始為 Next.js 做出貢獻,標有 good first issuehelp wanted 標籤的問題是個好的起點。

社群

Next.js 社群已成長到超過 6,000 名成員

GitHub 討論區是您可以聊聊 Next.js、獲得關於如何解決問題的建議,並利用您對 Next.js 的知識幫助其他社群成員的地方。

加入 GitHub 上的社群!