自訂 Webpack 設定
須知事項:webpack 設定的變更不受 semver 規範約束,請自行承擔風險
在繼續為您的應用程式新增自訂 webpack 設定前,請先確認 Next.js 是否已支援您的使用情境:
一些常見需求可透過外掛程式實現:
若要擴展我們對 webpack 的使用,您可以在 next.config.js 中定義一個擴充其設定的函式,如下所示:
module.exports = {
webpack: (
config,
{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack }
) => {
// 重要:回傳修改後的設定
return config
},
}
webpack函式會執行三次,其中兩次用於伺服器端 (nodejs / edge runtime),一次用於客戶端。這讓您可以透過isServer屬性區分客戶端與伺服器端設定。
webpack 函式的第二個參數是一個物件,包含以下屬性:
buildId:String- 建置 ID,作為建置間的唯一識別碼dev:Boolean- 表示是否在開發模式下進行編譯isServer:Boolean- 若為伺服器端編譯則為true,客戶端編譯則為falsenextRuntime:String | undefined- 伺服器端編譯的目標執行環境;可能是"edge"或"nodejs",客戶端編譯時則為undefineddefaultLoaders:Object- Next.js 內部使用的預設載入器:babel:Object- 預設的babel-loader設定
使用 defaultLoaders.babel 的範例:
// 為新增依賴於 babel-loader 的載入器而設定的範例設定
// 此範例取自 @next/mdx 外掛原始碼:
// https://github.com/vercel/next.js/tree/canary/packages/next-mdx
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.mdx/,
use: [
options.defaultLoaders.babel,
{
loader: '@mdx-js/loader',
options: pluginOptions.options,
},
],
})
return config
},
}nextRuntime
請注意,當 nextRuntime 為 "edge" 或 "nodejs" 時,isServer 會是 true。目前 "edge" 執行環境僅用於中介軟體和邊緣執行環境中的伺服器元件。