跳至內容
API 參考next.config.js 選項資源前綴 (assetPrefix)

資源前綴 (assetPrefix)

注意部署到 Vercel 會自動為您的 Next.js 專案設定全域 CDN。您不需要手動設定資源前綴。

實用資訊:Next.js 9.5 以上版本新增了對可自訂基礎路徑的支援,更適合將您的應用程式託管在子路徑上,例如 /docs。我們不建議您在此使用案例中使用自訂資源前綴。

設定 CDN

要設定 CDN,您可以設定資源前綴,並將 CDN 的來源設定為解析到 Next.js 所在的網域。

開啟 next.config.mjs 並根據 階段 加入 assetPrefix 設定

next.config.mjs
// @ts-check
import { PHASE_DEVELOPMENT_SERVER } from 'next/constants'
 
export default (phase) => {
  const isDev = phase === PHASE_DEVELOPMENT_SERVER
  /**
   * @type {import('next').NextConfig}
   */
  const nextConfig = {
    assetPrefix: isDev ? undefined : 'https://cdn.mydomain.com',
  }
  return nextConfig
}

Next.js 會自動將您的資源前綴用於從 /_next/ 路徑 (.next/static/ 資料夾) 載入的 JavaScript 和 CSS 檔案。例如,使用上述設定,以下用於 JS 區塊的請求

/_next/static/chunks/4b9b41aaa062cbbfeff4add70f256968c51ece5d.4d708494b3aed70c04f0.js

會變成

https://cdn.mydomain.com/_next/static/chunks/4b9b41aaa062cbbfeff4add70f256968c51ece5d.4d708494b3aed70c04f0.js

將檔案上傳到特定 CDN 的確切設定取決於您選擇的 CDN。您只需要在 CDN 上託管 .next/static/ 的內容,該內容應以上述 URL 請求所示的 _next/static/ 形式上傳。請勿上傳 .next/ 資料夾的其餘部分,因為您不應將伺服器程式碼和其他設定公開。

雖然 assetPrefix 涵蓋了對 _next/static 的請求,但它不會影響以下路徑

  • public 資料夾中的檔案;如果您想透過 CDN 提供這些資源,您必須自行加入前綴
  • 針對 getServerSideProps 頁面的 /_next/data/ 請求。這些請求將始終針對主網域發出,因為它們不是靜態的。
  • 針對 getStaticProps 頁面的 /_next/data/ 請求。即使您沒有使用 增量靜態產生 (為了保持一致性),這些請求也將始終針對主網域發出,以支援它。