SkateJS — это легковесная библиотека для создания веб-компонентов на основе нативного API Custom Elements. Для эффективной работы в современных проектах она часто интегрируется с Webpack, что позволяет собирать компоненты, использовать модульную структуру и оптимизировать код.
Создается стандартная структура проекта:
/project
/src
index.js
/components
my-button.js
package.json
webpack.config.js
Устанавливаются необходимые зависимости:
npm install skatejs lit-html webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env --save-dev
skatejs — основная библиотека.lit-html — используется для шаблонов в
компонентах.webpack и webpack-cli — для сборки
проекта.webpack-dev-server — для локальной разработки.babel-loader и пресеты — для транспиляции современного
JavaScript.Создается webpack.config.js:
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
},
devServer: {
static: path.resolve(__dirname, 'dist'),
compress: true,
port: 9000
}
};
entry указывает точку входа.output задает имя и путь для итогового бандла.module.rules настраивает обработку JS через Babel.devServer обеспечивает быстрый просмотр изменений при
разработке.Компоненты создаются через функцию define и класс,
наследующий Skate.Component. Пример кнопки:
import { define, h, Component } from 'skatejs';
class MyButton extends Component {
static get props() {
return {
label: String
};
}
render() {
return h('button', { onclick: () => alert('Clicked!') }, this.label || 'Click me');
}
}
define(MyButton);
props описывает свойства компонента.render возвращает виртуальный DOM через функцию
h.define регистрирует компонент в браузере.В index.js:
import './components/my-button.js';
const app = document.createElement('div');
app.innerHTML = `
<my-button label="Нажми меня"></my-button>
`;
document.body.appendChild(app);
Сборка через Webpack создаст единый файл bundle.js,
который подключается в index.html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>SkateJS + Webpack</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>
Webpack позволяет импортировать CSS напрямую в JS. Для этого устанавливаются загрузчики:
npm install style-loader css-loader --save-dev
Добавляется правило в webpack.config.js:
{
test: /\.css$/i,
use: ['style-loader', 'css-loader']
}
Пример использования:
import './components/my-button.css';
mode: 'production' и минификацию через
TerserPlugin.Webpack Dev Server обеспечивает Hot Module Replacement (HMR):
devServer: {
static: path.resolve(__dirname, 'dist'),
hot: true,
port: 9000
}
Это ускоряет разработку, обновляя компоненты без полной перезагрузки страницы.
h или
lit-html./src
/components
button.js
modal.js
/styles
button.css
modal.css
index.js
Каждый компонент содержит свой JS и CSS, Webpack объединяет их в
bundle.js. Это обеспечивает модульность,
переиспользуемость и легкость сопровождения проекта.
Эта конфигурация и структура создают удобный и масштабируемый стек для разработки веб-компонентов с использованием SkateJS и Webpack, позволяя интегрировать современные подходы и инструменты оптимизации.