41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
/**
|
||
* Конфигурация Babel loader для webpack
|
||
*
|
||
* Обрабатывает файлы JavaScript, JSX и TSX с помощью Babel.
|
||
* В режиме разработки включает React Refresh для горячей перезагрузки компонентов.
|
||
*
|
||
* @param {boolean} isDev - Флаг режима разработки
|
||
* @returns {Object} Конфигурация babel-loader
|
||
*
|
||
* @example
|
||
* const babelLoader = buildBabelLoader(true)
|
||
* // Возвращает loader с React Refresh для разработки
|
||
*/
|
||
export function buildBabelLoader(isDev: boolean) {
|
||
const babelLoader = {
|
||
test: /\.(js|jsx|tsx|ts)$/,
|
||
exclude: [
|
||
/node_modules/,
|
||
/\.test\.(ts|tsx)$/, // Исключаем тестовые файлы
|
||
/\.spec\.(ts|tsx)$/, // Исключаем spec файлы
|
||
/\.stories\.(ts|tsx)$/, // Исключаем Storybook файлы
|
||
],
|
||
use: {
|
||
loader: 'babel-loader',
|
||
options: {
|
||
cacheDirectory: true, // Включаем кеширование для ускорения пересборки
|
||
presets: [
|
||
'@babel/preset-env',
|
||
['@babel/preset-react', { runtime: 'automatic' }], // Поддержка React 17+ (новый JSX transform)
|
||
'@babel/preset-typescript', // Поддержка TypeScript через Babel
|
||
],
|
||
plugins: [isDev && require.resolve('react-refresh/babel')].filter(
|
||
Boolean
|
||
),
|
||
},
|
||
},
|
||
}
|
||
|
||
return babelLoader
|
||
}
|