2025-11-19 09:59:39 +03:00
|
|
|
|
import webpack from 'webpack'
|
|
|
|
|
|
|
|
|
|
|
|
import { buildBabelLoader } from './loaders/buildBabelLoader'
|
|
|
|
|
|
import { buildCssLoader } from './loaders/buildCssLoader'
|
|
|
|
|
|
import { buildFileLoader } from './loaders/buildFileLoader'
|
|
|
|
|
|
import { buildSvgrLoader } from './loaders/buildSvgrLoader'
|
|
|
|
|
|
import { BuildOptions } from './types/config'
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Собирает все webpack loaders в единый массив
|
2025-11-19 10:10:16 +03:00
|
|
|
|
*
|
2025-11-19 09:59:39 +03:00
|
|
|
|
* Порядок loaders важен! Webpack применяет их справа налево (снизу вверх).
|
|
|
|
|
|
* Текущий порядок:
|
|
|
|
|
|
* 1. fileLoader - обрабатывает изображения и шрифты
|
|
|
|
|
|
* 2. svgrLoader - преобразует SVG в React компоненты
|
2025-11-23 16:08:14 +03:00
|
|
|
|
* 3. babelLoader - транспилирует JS/JSX/TS/TSX с помощью Babel (включая TypeScript)
|
|
|
|
|
|
* 4. cssLoader - обрабатывает CSS/SCSS с модулями
|
|
|
|
|
|
*
|
|
|
|
|
|
* Примечание: TypeScript компилируется через Babel (@babel/preset-typescript),
|
|
|
|
|
|
* а не через ts-loader. Проверка типов выполняется отдельно через `tsc --noEmit`.
|
2025-11-19 10:10:16 +03:00
|
|
|
|
*
|
2025-11-19 09:59:39 +03:00
|
|
|
|
* @param {BuildOptions} options - Опции сборки
|
|
|
|
|
|
* @param {boolean} options.isDev - Флаг режима разработки
|
|
|
|
|
|
* @returns {webpack.RuleSetRule[]} Массив правил для webpack
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function buildLoaders({ isDev }: BuildOptions): webpack.RuleSetRule[] {
|
2025-11-23 13:34:15 +03:00
|
|
|
|
// Используем babel-loader для обработки JS и TS файлов
|
|
|
|
|
|
// Это ускоряет сборку, так как babel работает быстрее ts-loader
|
|
|
|
|
|
// Проверка типов должна выполняться отдельно (например, через tsc --noEmit)
|
2025-11-23 14:13:21 +03:00
|
|
|
|
// Исключаем тестовые и storybook файлы из production сборки
|
2025-11-23 13:34:15 +03:00
|
|
|
|
const codeBabelLoader = buildBabelLoader(isDev)
|
2025-11-19 09:59:39 +03:00
|
|
|
|
|
|
|
|
|
|
const fileLoader = buildFileLoader()
|
|
|
|
|
|
|
|
|
|
|
|
const svgrLoader = buildSvgrLoader()
|
|
|
|
|
|
|
|
|
|
|
|
const cssLoader = buildCssLoader(isDev)
|
|
|
|
|
|
|
2025-11-23 13:34:15 +03:00
|
|
|
|
return [fileLoader, svgrLoader, codeBabelLoader, cssLoader]
|
2025-11-19 09:59:39 +03:00
|
|
|
|
}
|