Как настроить Babel для React приложения?react-63

Настройка Babel — критически важный этап для работы с современным React. Рассмотрим детальную конфигурацию.

1. Установка необходимых пакетов

Сначала установим базовые зависимости:

npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader
npm install --save-dev @babel/plugin-transform-runtime @babel/runtime
npm install --save-dev @babel/plugin-proposal-class-properties

Для TypeScript-проектов дополнительно:

npm install --save-dev @babel/preset-typescript

2. Базовая конфигурация Babel

Создаем файл .babelrc (или babel.config.json) в корне проекта:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "browsers": [">0.25%", "not dead"]
        },
        "useBuiltIns": "usage",
        "corejs": 3
      }
    ],
    "@babel/preset-react"
  ],
  "plugins": [
    "@babel/plugin-transform-runtime",
    "@babel/plugin-proposal-class-properties"
  ]
}

3. Расшифровка конфигурации

@babel/preset-env

  • targets: Определяет целевые браузеры
  • useBuiltIns: "usage" — добавляет только необходимые полифиллы
  • corejs: Версия core-js для полифиллов

@babel/preset-react

  • Добавляет поддержку JSX
  • Включает оптимизации для разработки

Плагины

  • @babel/plugin-transform-runtime: Уменьшает дублирование кода
  • @babel/plugin-proposal-class-properties: Поддержка свойств класса

4. Интеграция с Webpack

Добавляем правило в webpack.config.js:

module: {
  rules: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: [
            ['@babel/preset-env', { targets: "defaults" }],
            '@babel/preset-react'
          ]
        }
      }
    }
  ]
}

5. Настройка для разных окружений

Можно создать отдельные конфигурации для development и production:

// babel.config.js
module.exports = (api) => {
  const isProduction = api.env('production');

  return {
    presets: [
      [
        '@babel/preset-env',
        {
          targets: isProduction
            ? ">0.2%, not dead, not op_mini all"
            : "last 1 chrome version",
          useBuiltIns: 'usage',
          corejs: 3
        }
      ],
      '@babel/preset-react'
    ],
    plugins: [
      !isProduction && 'react-refresh/babel',
      '@babel/plugin-transform-runtime'
    ].filter(Boolean)
  };
};

6. Дополнительные полезные плагины

Для более продвинутой настройки:

npm install --save-dev @babel/plugin-syntax-dynamic-import
npm install --save-dev @babel/plugin-proposal-optional-chaining
npm install --save-dev @babel/plugin-proposal-nullish-coalescing-operator

Добавляем в конфиг:

{
  "plugins": [
    "@babel/plugin-syntax-dynamic-import",
    "@babel/plugin-proposal-optional-chaining",
    "@babel/plugin-proposal-nullish-coalescing-operator"
  ]
}

7. Настройка для TypeScript

Если проект использует TypeScript:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/preset-typescript"
  ]
}

8. Оптимизация production-сборки

Добавляем настройки для уменьшения размера бандла:

{
  "env": {
    "production": {
      "plugins": [
        ["transform-react-remove-prop-types", { "removeImport": true }]
      ]
    }
  }
}

Резюмируем

Для правильной настройки Babel в React-приложении необходимо:

  1. Установить основные пакеты:

    • @babel/core
    • @babel/preset-env и @babel/preset-react
    • Полезные плагины
  2. Создать конфигурационный файл .babelrc или babel.config.js

  3. Настроить:

    • Поддержку современных возможностей JavaScript
    • Обработку JSX
    • Полифиллы для старых браузеров
    • Оптимизации для production
  4. Интегрировать с инструментом сборки (Webpack, Rollup и др.)

  5. Для сложных проектов:

    • Добавить поддержку TypeScript
    • Настроить разные конфигурации для dev и prod
    • Включить дополнительные плагины для новых возможностей JS

Правильно настроенный Babel обеспечит:

  • Совместимость кода с разными браузерами
  • Возможность использовать современный синтаксис
  • Оптимальный размер production-бандла
  • Поддержку JSX и других React-специфичных возможностей