Haunted — это лёгкая библиотека для создания веб-компонентов с использованием функциональных подходов, вдохновлённых React Hooks. Для полноценной интеграции в современные рабочие процессы разработки важно правильно организовать сборку проекта, используя плагины для сборщиков, таких как Webpack, Rollup или Vite. Плагины позволяют оптимизировать код, управлять зависимостями и обеспечивать поддержку новых возможностей JavaScript и CSS.
Haunted распространяется как модуль ES6, что делает его совместимым с большинством современных сборщиков. Основные шаги подключения:
npm install haunted
import { html, component, useState } from 'haunted';
В зависимости от сборщика могут потребоваться плагины для корректной обработки ES-модулей.
Для Webpack ключевыми являются следующие аспекты:
Пример конфигурации:
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: __dirname + '/dist'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
Haunted хорошо сочетается с Webpack, так как плагины для оптимизации
кода (например, TerserPlugin) минимизируют размер сборки
без потери функциональности.
Rollup идеально подходит для библиотек и компонентов благодаря поддержке tree-shaking, что уменьшает итоговый размер кода.
Основные плагины для Haunted:
@rollup/plugin-node-resolve — позволяет использовать
импорты из node_modules.@rollup/plugin-commonjs — конвертирует CommonJS-модули
в ES6, если используются сторонние зависимости.rollup-plugin-terser — минификация.Пример конфигурации Rollup:
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import { terser } from 'rollup-plugin-terser';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
},
plugins: [
resolve(),
commonjs(),
terser()
]
};
Использование этих плагинов позволяет создавать оптимизированные ES-модули с поддержкой Haunted без избыточного кода.
Vite предоставляет нативную поддержку ES-модулей и использует esbuild для высокой скорости сборки. Для Haunted специфических плагинов почти не требуется, но рекомендуется:
optimizeDeps.include для зависимостей,
требующих предварительной обработки:// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
optimizeDeps: {
include: ['haunted']
}
});
@vitejs/plugin-legacy, если
требуется поддержка старых браузеров.Vite обеспечивает мгновенную перезагрузку компонентов Haunted при разработке и корректно обрабатывает функциональные хуки библиотеки.
Haunted построен модульно, что позволяет использовать tree-shaking для удаления неиспользуемого кода. Основные рекомендации:
import { html, useState } from 'haunted';
Для полноценной работы компонентов Haunted важно подключать CSS и другие ресурсы через плагины:
.css файлов в JS.Пример подключения CSS в Haunted-компоненте:
import { html, component } from 'haunted';
import './styles.css';
const MyButton = () => html`
<button class="primary">Нажми меня</button>
`;
customElements.define('my-button', component(MyButton));
Сборщики обеспечивают корректное внедрение стилей в финальный бандл.
Haunted полностью совместим с TypeScript. Для сборщиков нужны следующие плагины:
Пример импорта с типами:
import { html, component } from 'haunted';
const Counter: () => HTMLElement = () => {
const [count, setCount] = useState(0);
return html`
<button @click=${() => setCount(count + 1)}>
Счётчик: ${count}
</button>
`;
};
customElements.define('my-counter', component(Counter));
Haunted совместим с большинством инструментов для горячей перезагрузки:
webpack-dev-server +
react-refresh аналог.rollup-plugin-livereload и
rollup-plugin-serve.Hot-reload позволяет мгновенно обновлять компоненты без потери состояния хуков.
Haunted, будучи минималистичной и функциональной библиотекой, отлично интегрируется с современными сборщиками при помощи правильно подобранных плагинов, обеспечивая быстрый, оптимизированный и поддерживаемый процесс сборки веб-приложений.