turbo
turbopack
选项允许您自定义 Turbopack 以转换不同文件并更改模块解析方式。
须知:
- Next.js 的 Turbopack 对于内置功能不需要加载器或加载器配置。Turbopack 内置支持 CSS 和现代 JavaScript 编译,因此如果您使用
@babel/preset-env
,就不需要css-loader
、postcss-loader
或babel-loader
。
参考
选项
以下选项可用于 turbo
配置:
选项 | 描述 |
---|---|
root | 设置应用根目录。应为绝对路径。 |
rules | 运行 Turbopack 时应用的受支持 webpack 加载器列表。 |
resolveAlias | 将别名导入映射到要加载的模块。 |
resolveExtensions | 导入文件时要解析的扩展名列表。 |
支持的加载器
以下加载器已测试可与 Turbopack 的 webpack 加载器实现一起工作,但即使未列出,许多其他 webpack 加载器也应能正常工作:
babel-loader
@svgr/webpack
svg-inline-loader
yaml-loader
string-replace-loader
raw-loader
sass-loader
graphql-tag/loader
示例
根目录
Turbopack 使用根目录来解析模块。项目根目录之外的文件不会被解析。
Next.js 会自动检测项目的根目录。它会查找以下文件之一:
pnpm-lock.yaml
package-lock.json
yarn.lock
bun.lock
bun.lockb
如果您有不同的项目结构,例如不使用工作区,可以手动设置 root
选项:
配置 webpack 加载器
如果您需要超出内置功能的加载器支持,许多 webpack 加载器已经可以与 Turbopack 一起工作。目前存在一些限制:
- 仅实现了 webpack 加载器 API 的核心子集。目前已经覆盖了一些流行的加载器,我们将在未来扩展 API 支持。
- 仅支持返回 JavaScript 代码的加载器。目前不支持转换样式表或图像等文件的加载器。
- 传递给 webpack 加载器的选项必须是普通的 JavaScript 原始值、对象和数组。例如,不能将
require()
插件模块作为选项值传递。
要配置加载器,请在 next.config.js
中添加您已安装的加载器名称和任何选项,将文件扩展名映射到加载器列表。
以下示例使用 @svgr/webpack
加载器,该加载器支持导入 .svg
文件并将其渲染为 React 组件。
对于需要配置选项的加载器,可以使用对象格式而不是字符串:
须知:在 Next.js 13.4.4 版本之前,
turbo.rules
名为turbo.loaders
,并且只接受.mdx
等文件扩展名而不是*.mdx
。
解析别名
Turbopack 可以配置为通过别名修改模块解析,类似于 webpack 的 resolve.alias
配置。
要配置解析别名,在 next.config.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
字段:
这将用提供的列表覆盖原始解析扩展名。确保包含默认扩展名。
有关如何从 webpack 迁移应用到 Turbopack 的更多信息和指南,请参阅 Turbopack 关于 webpack 兼容性的文档。
版本历史
版本 | 变更 |
---|---|
15.3.0 | experimental.turbo 更名为 turbopack 。 |
13.0.0 | 引入 experimental.turbo 。 |