turbo (экспериментальная функция)

Turbopack можно настроить для преобразования различных файлов и изменения способа разрешения модулей.

Полезно знать:

  • Эти функции являются экспериментальными и будут работать только с next --turbo.
  • Turbopack для Next.js не требует загрузчиков (loaders) или их конфигурации для встроенной функциональности. Turbopack имеет встроенную поддержку CSS и компиляции современного JavaScript, поэтому нет необходимости в css-loader, postcss-loader или babel-loader, если вы используете @babel/preset-env.

Загрузчики (loaders) webpack

Если вам нужна поддержка загрузчиков сверх встроенной функциональности, многие загрузчики webpack уже работают с Turbopack. В настоящее время существуют некоторые ограничения:

  • Реализовано только ядро API загрузчиков webpack. В настоящее время покрытие достаточное для некоторых популярных загрузчиков, и мы расширим поддержку 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 параметр experimental.turbo.rules назывался experimental.turbo.loaders и принимал только расширения файлов, такие как .mdx, вместо *.mdx.

Поддерживаемые загрузчики

Следующие загрузчики были протестированы и работают с реализацией загрузчиков webpack в Turbopack:

Алиасы для разрешения модулей

Через next.config.js можно настроить Turbopack для изменения разрешения модулей с помощью алиасов, аналогично конфигурации resolve.alias в webpack.

Для настройки алиасов сопоставьте импортируемые шаблоны с их новым назначением в 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. В приведенном выше примере импорты модуля mocha будут перенаправляться на mocha/browser-entry.js, когда Turbopack работает в браузерных средах.

Расширения для разрешения модулей

Через next.config.js можно настроить Turbopack для разрешения модулей с пользовательскими расширениями, аналогично конфигурации resolve.extensions в webpack.

Для настройки расширений используйте поле resolveExtensions в next.config.js:

next.config.js
module.exports = {
  experimental: {
    turbo: {
      resolveExtensions: [
        '.mdx',
        '.tsx',
        '.ts',
        '.jsx',
        '.js',
        '.mjs',
        '.json',
      ],
    },
  },
}

Это перезаписывает исходные расширения для разрешения модулей предоставленным списком. Убедитесь, что включили стандартные расширения.

Для получения дополнительной информации и руководства по миграции вашего приложения с webpack на Turbopack см. документацию Turbopack о совместимости с webpack.