Настройка Babel — критически важный этап для работы с современным React. Рассмотрим детальную конфигурацию.
Сначала установим базовые зависимости:
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
Создаем файл .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"
]
}
targets
: Определяет целевые браузерыuseBuiltIns
: "usage" — добавляет только необходимые полифиллыcorejs
: Версия core-js для полифиллов@babel/plugin-transform-runtime
: Уменьшает дублирование кода@babel/plugin-proposal-class-properties
: Поддержка свойств классаДобавляем правило в 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'
]
}
}
}
]
}
Можно создать отдельные конфигурации для 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)
};
};
Для более продвинутой настройки:
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"
]
}
Если проект использует TypeScript:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
]
}
Добавляем настройки для уменьшения размера бандла:
{
"env": {
"production": {
"plugins": [
["transform-react-remove-prop-types", { "removeImport": true }]
]
}
}
}
Для правильной настройки Babel в React-приложении необходимо:
Установить основные пакеты:
Создать конфигурационный файл .babelrc
или babel.config.js
Настроить:
Интегрировать с инструментом сборки (Webpack, Rollup и др.)
Для сложных проектов:
Правильно настроенный Babel обеспечит: