138 lines
3.7 KiB
Markdown
138 lines
3.7 KiB
Markdown
|
|
# Документация babel.config.json
|
|||
|
|
|
|||
|
|
## Описание
|
|||
|
|
|
|||
|
|
Конфигурация Babel для транспиляции современного JavaScript/TypeScript кода в версию, совместимую со старыми браузерами.
|
|||
|
|
|
|||
|
|
## Используемые пресеты
|
|||
|
|
|
|||
|
|
### @babel/preset-env
|
|||
|
|
Автоматически определяет необходимые трансформации и полифиллы на основе целевых браузеров.
|
|||
|
|
|
|||
|
|
**Возможности:**
|
|||
|
|
- Преобразование современного JavaScript (ES6+) в ES5
|
|||
|
|
- Автоматический подбор необходимых полифиллов
|
|||
|
|
- Оптимизация размера бандла
|
|||
|
|
|
|||
|
|
### @babel/preset-typescript
|
|||
|
|
Удаляет типы TypeScript из кода, оставляя чистый JavaScript.
|
|||
|
|
|
|||
|
|
**Важно:** Babel не проверяет типы! Для проверки типов используется отдельная команда `pnpm type-check`.
|
|||
|
|
|
|||
|
|
### @babel/preset-react
|
|||
|
|
Преобразует JSX синтаксис в вызовы функций React.
|
|||
|
|
|
|||
|
|
**Настройки:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"runtime": "automatic"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Автоматический runtime (React 19):**
|
|||
|
|
- Не требует импорта React в каждом файле
|
|||
|
|
- Использует новый JSX transform
|
|||
|
|
- Уменьшает размер бандла
|
|||
|
|
|
|||
|
|
## Примеры трансформации
|
|||
|
|
|
|||
|
|
### JSX Transform
|
|||
|
|
|
|||
|
|
**До (исходный код):**
|
|||
|
|
```jsx
|
|||
|
|
const App = () => {
|
|||
|
|
return <div>Hello World</div>
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**После (с automatic runtime):**
|
|||
|
|
```javascript
|
|||
|
|
import { jsx as _jsx } from 'react/jsx-runtime'
|
|||
|
|
|
|||
|
|
const App = () => {
|
|||
|
|
return _jsx('div', { children: 'Hello World' })
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### TypeScript
|
|||
|
|
|
|||
|
|
**До:**
|
|||
|
|
```typescript
|
|||
|
|
const sum = (a: number, b: number): number => {
|
|||
|
|
return a + b
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**После:**
|
|||
|
|
```javascript
|
|||
|
|
const sum = (a, b) => {
|
|||
|
|
return a + b
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Modern JavaScript
|
|||
|
|
|
|||
|
|
**До (ES6+):**
|
|||
|
|
```javascript
|
|||
|
|
const numbers = [1, 2, 3]
|
|||
|
|
const doubled = numbers.map(n => n * 2)
|
|||
|
|
const [first, ...rest] = numbers
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**После (ES5):**
|
|||
|
|
```javascript
|
|||
|
|
var numbers = [1, 2, 3]
|
|||
|
|
var doubled = numbers.map(function(n) { return n * 2 })
|
|||
|
|
var first = numbers[0]
|
|||
|
|
var rest = numbers.slice(1)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Интеграция с webpack
|
|||
|
|
|
|||
|
|
Babel используется через `babel-loader` в webpack конфигурации:
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
// config/build/loaders/buildBabelLoader.ts
|
|||
|
|
{
|
|||
|
|
test: /\.(js|jsx|tsx)$/,
|
|||
|
|
exclude: /node_modules/,
|
|||
|
|
use: {
|
|||
|
|
loader: 'babel-loader',
|
|||
|
|
options: {
|
|||
|
|
presets: ['@babel/preset-env'],
|
|||
|
|
plugins: [
|
|||
|
|
isDev && require.resolve('react-refresh/babel')
|
|||
|
|
].filter(Boolean)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## React Refresh (только в dev режиме)
|
|||
|
|
|
|||
|
|
В режиме разработки добавляется плагин `react-refresh/babel` для горячей перезагрузки React компонентов без потери состояния.
|
|||
|
|
|
|||
|
|
**Преимущества:**
|
|||
|
|
- Мгновенное обновление компонентов при изменении кода
|
|||
|
|
- Сохранение состояния компонентов
|
|||
|
|
- Сохранение позиции скролла
|
|||
|
|
- Улучшенный DX (Developer Experience)
|
|||
|
|
|
|||
|
|
## Связанные файлы
|
|||
|
|
- `webpack.config.ts` - использует babel-loader
|
|||
|
|
- `config/build/loaders/buildBabelLoader.ts` - конфигурация loader
|
|||
|
|
- `tsconfig.json` - конфигурация TypeScript
|
|||
|
|
- `package.json` - зависимости Babel
|
|||
|
|
|
|||
|
|
## Зависимости
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"@babel/core": "^7.26.0",
|
|||
|
|
"@babel/preset-env": "^7.26.0",
|
|||
|
|
"@babel/preset-react": "^7.26.0",
|
|||
|
|
"@babel/preset-typescript": "^7.26.0",
|
|||
|
|
"babel-loader": "^9.2.0"
|
|||
|
|
}
|
|||
|
|
```
|