Настройка Babel для транспиляции JavaScript

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Babel для транспиляции JavaScript
Средняя
от 4 часов до 2 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка Babel для транспиляции JavaScript

Babel превращает современный JavaScript в код, который понимают старые браузеры. Дополнительно он обрабатывает JSX, TypeScript (без проверки типов), экспериментальные предложения TC39 и декораторы. В 2025 году Babel всё чаще заменяется на SWC в части транспиляции, но он остаётся незаменимым для сложных AST-трансформаций и кастомных плагинов.

Установка

# Ядро и CLI
npm install --save-dev @babel/core @babel/cli

# Preset для современного JS
npm install --save-dev @babel/preset-env

# Для React
npm install --save-dev @babel/preset-react

# Для TypeScript
npm install --save-dev @babel/preset-typescript

# Runtime для async/await без полифилов в каждом файле
npm install --save-dev @babel/plugin-transform-runtime
npm install @babel/runtime

babel.config.json

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": "> 0.5%, last 2 versions, not dead, not ie 11",
        "useBuiltIns": "usage",
        "corejs": "3.38",
        "modules": false
      }
    ],
    [
      "@babel/preset-react",
      {
        "runtime": "automatic"
      }
    ],
    [
      "@babel/preset-typescript",
      {
        "allExtensions": true,
        "isTSX": true
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": false,
        "helpers": true,
        "regenerator": true
      }
    ]
  ],
  "env": {
    "test": {
      "presets": [
        ["@babel/preset-env", { "targets": { "node": "current" }, "modules": "commonjs" }]
      ]
    }
  }
}

"modules": false в preset-env важно для сборщиков — это позволяет сборщику (Webpack, Rollup) самому обрабатывать ESM-импорты и делать tree-shaking. В тестовой среде (Jest) нужен "modules": "commonjs", потому что Node.js исторически использует CJS.

Targets и browserslist

Вместо явного указания в конфиге Babel лучше использовать .browserslistrc или секцию browserslist в package.json — этот файл читается и Babel, и Autoprefixer, и другими инструментами:

# .browserslistrc
[production]
> 0.5%
last 2 versions
not dead
not ie 11

[development]
last 1 chrome version
last 1 firefox version
last 1 safari version
{
  "presets": [
    ["@babel/preset-env", { "useBuiltIns": "usage", "corejs": "3.38" }]
  ]
}

Декораторы

Декораторы TypeScript (метаданные, Angular, MobX, TypeORM) требуют специального плагина:

npm install --save-dev @babel/plugin-proposal-decorators
{
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "version": "2023-11" }]
  ]
}

Версия "2023-11" — это финализированный стандарт TC39 Stage 3. Для проектов с legacy TypeScript-декораторами (experimentalDecorators: true) используется "legacy":

["@babel/plugin-proposal-decorators", { "version": "legacy" }]

Кастомный плагин

Babel-плагины — это функции, работающие с AST. Пример: заменяем все console.log() на noop в production:

// babel-plugin-remove-console.js
module.exports = function ({ types: t }) {
  return {
    visitor: {
      CallExpression(path) {
        const callee = path.get('callee');
        if (
          callee.isMemberExpression() &&
          callee.get('object').isIdentifier({ name: 'console' }) &&
          callee.get('property').isIdentifier({ name: 'log' })
        ) {
          path.remove();
        }
      },
    },
  };
};
{
  "env": {
    "production": {
      "plugins": ["./babel-plugin-remove-console.js"]
    }
  }
}

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

npm install --save-dev babel-loader
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            cacheDirectory: true,    // кешировать в node_modules/.cache/babel-loader
            cacheCompression: false, // без gzip — быстрее на SSD
          },
        },
      },
    ],
  },
};

Интеграция с Jest

npm install --save-dev babel-jest

Jest подхватывает babel-конфиг автоматически, если в проекте есть babel.config.json. Отдельная настройка нужна только если конфиг специфический:

// jest.config.js
module.exports = {
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { configFile: './babel.config.test.json' }],
  },
};

Анализ что транспилируется

# Посмотреть output для конкретного файла
npx babel src/index.ts --out-file /dev/stdout --presets @babel/preset-typescript,@babel/preset-env

Для понимания что именно добавляет preset-env:

# @babel/compat-data показывает поддержку фич по браузерам
node -e "console.log(require('@babel/compat-data/data/plugins')['transform-arrow-functions'])"

Сроки

Базовая настройка Babel для React/TypeScript проекта: 1–2 часа. Настройка с декораторами, кастомными плагинами, полифилами core-js и интеграцией в CI: 4–8 часов.