turbo (實驗性功能)
Turbopack 可自訂以轉換不同檔案並變更模組解析方式。
須知事項:
- 這些功能屬於實驗性質,僅在執行
next --turbo時有效。- Next.js 的 Turbopack 對於內建功能不需要載入器 (loader) 或載入器設定。Turbopack 內建支援 CSS 和現代 JavaScript 編譯,因此如果您使用
@babel/preset-env,則不需要css-loader、postcss-loader或babel-loader。
webpack 載入器
若您需要的載入器功能超出內建支援範圍,許多 webpack 載入器已可與 Turbopack 相容。目前存在以下限制:
- 僅實作了 webpack 載入器 API 的核心子集。目前已有足夠覆蓋率支援部分熱門載入器,我們將在未來擴展 API 支援。
- 僅支援回傳 JavaScript 程式碼的載入器。目前不支援轉換檔案 (如樣式表或圖片) 的載入器。
- 傳遞給 webpack 載入器的選項必須是純 JavaScript 基本型別、物件和陣列。例如,無法將
require()的插件模組作為選項值傳遞。
要設定載入器,請在 next.config.js 中新增已安裝的載入器名稱和任何選項,將副檔名對應至載入器清單:
module.exports = {
experimental: {
turbo: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
},
}須知事項:在 Next.js 13.4.4 版之前,
experimental.turbo.rules名為experimental.turbo.loaders,且僅接受.mdx等副檔名而非*.mdx。
支援的載入器
以下載入器經測試可與 Turbopack 的 webpack 載入器實作相容:
babel-loader@svgr/webpacksvg-inline-loaderyaml-loaderstring-replace-loaderraw-loader- 'sass-loader'
解析別名
透過 next.config.js,可設定 Turbopack 透過別名修改模組解析方式,類似 webpack 的 resolve.alias 設定。
要設定解析別名,請在 next.config.js 中將匯入模式對應至新目的地:
module.exports = {
experimental: {
turbo: {
resolveAlias: {
underscore: 'lodash',
mocha: { browser: 'mocha/browser-entry.js' },
},
},
},
}此設定將 underscore 套件的匯入別名為 lodash 套件。換言之,import underscore from 'underscore' 將載入 lodash 模組而非 underscore。
Turbopack 也透過此欄位支援條件式別名,類似 Node.js 的 條件式匯出。目前僅支援 browser 條件。在上述範例中,當 Turbopack 目標為瀏覽器環境時,mocha 模組的匯入將被別名為 mocha/browser-entry.js。
解析副檔名
透過 next.config.js,可設定 Turbopack 使用自訂副檔名解析模組,類似 webpack 的 resolve.extensions 設定。
要設定解析副檔名,請在 next.config.js 中使用 resolveExtensions 欄位:
module.exports = {
experimental: {
turbo: {
resolveExtensions: [
'.mdx',
'.tsx',
'.ts',
'.jsx',
'.js',
'.mjs',
'.json',
],
},
},
}此設定將以提供的清單覆寫原始解析副檔名。請確保包含預設副檔名。
有關如何從 webpack 遷移至 Turbopack 的更多資訊和指引,請參閱 Turbopack 的 webpack 相容性文件。