turbo
turbo
选项允许你自定义 Turbopack 以转换不同的文件并更改模块解析方式。
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
turbo: {
// ...
},
}
export default nextConfig
了解一下:
- 用于 Next.js 的 Turbopack 不需要加载程序或加载程序配置即可实现内置功能。Turbopack 内置支持 CSS 和编译现代 JavaScript,因此如果你使用的是
@babel/preset-env
,则无需使用css-loader
、postcss-loader
或babel-loader
。
参考
选项
以下选项可用于 turbo
配置
选项 | 描述 |
---|---|
rules | 使用 Turbopack 运行时应用的不支持的 webpack 加载程序列表。 |
resolveAlias | 将别名导入映射到要加载的模块。 |
resolveExtensions | 导入文件时要解析的扩展名列表。 |
moduleIdStrategy | 分配模块 ID |
useSwcCss | 对 Turbopack 使用 swc_css 而不是 lightningcss |
treeshaking | 为 turbopack 开发服务器和构建启用树摇。 |
memoryLimit | turbo 的目标内存限制,以字节为单位。 |
支持的加载程序
以下加载程序已测试可与 Turbopack 的 webpack 加载程序实现一起使用
babel-loader
@svgr/webpack
svg-inline-loader
yaml-loader
string-replace-loader
raw-loader
sass-loader
示例
配置 Webpack 加载器
如果您需要超出内置功能的加载器支持,许多 Webpack 加载器已经可以与 Turbopack 一起使用。目前存在一些限制
- 仅实现了 Webpack 加载器 API 的核心子集。目前,对一些流行的加载器已经有了足够的覆盖范围,我们将扩展 API 支持以备将来使用。
- 仅支持返回 JavaScript 代码的加载器。目前不支持转换像样式表或图像这样的文件的加载器。
- 传递给 Webpack 加载器的选项必须是普通的 JavaScript 原语、对象和数组。例如,不能传递
require()
插件模块作为选项值。
要配置加载器,请在 next.config.js
中添加已安装加载器的名称和任何选项,将文件扩展名映射到加载器列表
module.exports = {
turbo: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
}
值得注意:在 Next.js 版本 13.4.4 之前,
turbo.rules
被命名为turbo.loaders
并且只接受像.mdx
这样的文件扩展名而不是*.mdx
。
解析别名
Turbopack 可以配置为通过别名修改模块解析,类似于 Webpack 的 resolve.alias
配置。
要配置解析别名,请在 next.config.js
中将导入模式映射到新的目标
module.exports = {
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
。
解析自定义扩展名
Turbopack 可以配置为解析具有自定义扩展名的模块,类似于 Webpack 的 resolve.extensions
配置。
要配置解析扩展名,请在 next.config.js
中使用 resolveExtensions
字段
module.exports = {
turbo: {
resolveExtensions: ['.mdx', '.tsx', '.ts', '.jsx', '.js', '.mjs', '.json'],
},
}
这会用提供的列表覆盖原始解析扩展名。确保包含默认扩展名。
有关如何从 Webpack 将您的应用程序迁移到 Turbopack 的更多信息和指南,请参阅 Turbopack 的 Webpack 兼容性文档。
分配模块 ID
Turbopack 目前支持两种分配模块 ID 的策略
'named'
根据模块的路径和功能分配可读的模块 ID。'deterministic'
分配小的哈希数值模块 ID,这些 ID 在构建之间基本一致,因此有助于长期缓存。
如果未设置,Turbopack 将在开发构建中使用 'named'
,在生产构建中使用 'deterministic'
。
要配置模块 ID 策略,请在 next.config.js
中使用 moduleIdStrategy
字段
module.exports = {
turbo: {
moduleIdStrategy: 'deterministic',
},
}
版本历史
版本 | 更改 |
---|---|
15.0.0-RC | turbo 现在稳定,不再是实验性的。 |
13.0.0 | 引入了 experimental.turbo 。 |
这有帮助吗?