turbo(実験的機能)
Turbopackは、さまざまなファイルを変換したりモジュールの解決方法を変更するようにカスタマイズできます。
知っておくと便利:
- これらの機能は実験的であり、
next --turbo
を使用した場合にのみ動作します。- Next.js向けのTurbopackでは、組み込み機能に対してローダーやローダー設定は不要です。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/webpack
svg-inline-loader
yaml-loader
string-replace-loader
raw-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'
はunderscore
ではなくlodash
モジュールを読み込みます。
Turbopackは、Node.jsの条件付きエクスポートと同様に、このフィールドを通じた条件付きエイリアスもサポートしています。現時点ではbrowser
条件のみがサポートされています。上記の例では、mocha
モジュールのインポートは、Turbopackがブラウザ環境をターゲットにしている場合に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互換性に関するドキュメントを参照してください。