跳到内容

turbo

此功能目前为实验性功能,可能会发生变化,不建议在生产环境中使用。请尝试使用并在 GitHub 上分享您的反馈。

turbo 选项允许您自定义 Turbopack 以转换不同的文件并更改模块的解析方式。

next.config.ts
import type { NextConfig } from 'next'
 
const nextConfig: NextConfig = {
  experimental: {
    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
treeShaking为 turbopack 开发服务器和构建启用 tree shaking。
memoryLimitturbo 的目标内存限制,以字节为单位。

支持的加载器

以下加载器已经过测试,可以与 Turbopack 的 webpack 加载器实现一起使用

示例

配置 webpack 加载器

如果您需要超出内置功能的加载器支持,许多 webpack 加载器已经可以与 Turbopack 一起使用。目前存在一些限制

  • 仅实现了 webpack 加载器 API 的核心子集。目前,对于一些流行的加载器已经有足够的覆盖,我们将在未来扩展我们的 API 支持。
  • 仅支持返回 JavaScript 代码的加载器。目前不支持转换样式表或图像等文件的加载器。
  • 传递给 webpack 加载器的选项必须是纯 JavaScript 原始类型、对象和数组。例如,不能将 require() 插件模块作为选项值传递。

要配置加载器,请在 next.config.js 中添加您已安装的加载器的名称和任何选项,并将文件扩展名映射到加载器列表

next.config.js
module.exports = {
  experimental: {
    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 中将导入的模式映射到它们的新目标

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

解析自定义扩展名

Turbopack 可以配置为解析具有自定义扩展名的模块,类似于 webpack 的 resolve.extensions 配置。

要配置解析扩展名,请使用 next.config.js 中的 resolveExtensions 字段

next.config.js
module.exports = {
  experimental: {
    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 字段

next.config.js
module.exports = {
  experimental: {
    turbo: {
      moduleIdStrategy: 'deterministic',
    },
  },
}

版本历史

版本变更
13.0.0experimental.turbo 引入。