Preact — это легковесная альтернатива React, полностью совместимая с его API, но с минимальным размером. Для эффективной работы с Preact важно правильно настроить сборщик, чтобы получить быструю сборку, поддержку JSX и оптимизацию кода для продакшна. Основные сборщики, используемые с Preact: Webpack, Vite и Rollup. Каждый из них требует специфической конфигурации.
Установка и базовая конфигурация
Для работы с Webpack потребуется установить следующие зависимости:
npm install webpack webpack-cli webpack-dev-server html-webpack-plugin babel-loader @babel/core @babel/preset-env @babel/preset-react preact
Важным моментом является настройка babel-loader для
поддержки JSX и синтаксиса ES6+. Используется пресет
@babel/preset-react с указанием pragma для Preact:
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
resolve: {
alias: {
'react': 'preact/compat',
'react-dom': 'preact/compat'
}
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
['@babel/preset-react', { pragma: 'h' }],
'@babel/preset-env'
]
}
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html'
})
],
devServer: {
static: './dist',
hot: true,
}
};
Особенности Webpack с Preact
alias для React позволяет использовать существующие
React-библиотеки без изменений.babel-loader с указанием pragma: 'h'
необходим для корректного преобразования JSX в вызовы Preact.TerserPlugin для
минификации кода и DefinePlugin для замены
process.env.NODE_ENV.Быстрый старт и простота конфигурации
Vite изначально ориентирован на работу с современными фреймворками и предоставляет встроенную поддержку Preact через официальный плагин:
npm install vite @vitejs/plugin-react preact
Конфигурация Vite для Preact
// vite.config.js
import { defineConfig } from 'vite';
import preact from '@preact/preset-vite';
export default defineConfig({
plugins: [preact()],
resolve: {
alias: {
'react': 'preact/compat',
'react-dom': 'preact/compat'
}
}
});
Особенности Vite
Оптимизация для библиотек и маленьких проектов
Rollup часто используется для сборки библиотек благодаря эффективной tree-shaking оптимизации. Для Preact потребуется подключить плагины для JSX и Node-модулей:
npm install rollup @rollup/plugin-node-resolve @rollup/plugin-babel @rollup/plugin-commonjs preact
Конфигурация Rollup
// rollup.config.js
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import babel from '@rollup/plugin-babel';
import { terser } from 'rollup-plugin-terser';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'iife',
sourcemap: true,
},
plugins: [
resolve(),
commonjs(),
babel({
babelHelpers: 'bundled',
exclude: 'node_modules/**',
presets: [
['@babel/preset-react', { pragma: 'h' }],
'@babel/preset-env'
]
}),
terser()
]
};
Особенности Rollup
@rollup/plugin-node-resolve позволяет
использовать сторонние модули из node_modules.babel с pragma: 'h' обеспечивает
правильное преобразование JSX для Preact.| Сборщик | Подходит для | Основные преимущества | Сложности |
|---|---|---|---|
| Webpack | Большие SPA проекты | Гибкая конфигурация, экосистема плагинов | Сложная настройка |
| Vite | Быстрые проекты, prototyping | Мгновенная сборка, простота | Меньше возможностей плагинов для старых браузеров |
| Rollup | Библиотеки, оптимизация | Малый размер сборки, tree-shaking | Не так хорошо подходит для SPA с большим количеством файлов |
preact/compat, если планируется
использование сторонних React-библиотек.babel-loader или babel с
pragma: 'h' для правильного рендеринга JSX.