SkateJS — это библиотека для создания веб-компонентов на JavaScript, ориентированная на декларативное описание поведения и структуру компонентов через классы и функции рендеринга. Для полноценного использования возможностей ES6+ и современного синтаксиса рекомендуется интеграция с Babel.
Babel используется для трансформации современного JavaScript (ES6/ESNext) в код, совместимый с браузерами. В контексте SkateJS это особенно важно для:
class MyComponent extends Skate.Component)import / export)Пример конфигурации Babel
(babel.config.json):
{
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": [">0.25%", "not ie 11", "not op_mini all"]
},
"modules": "auto"
}]
],
"plugins": [
"@babel/plugin-proposal-class-properties",
"@babel/plugin-proposal-private-methods",
"@babel/plugin-proposal-decorators"
]
}
SkateJS поддерживает модульную структуру через ES-модули:
import { h, define, Component } from 'skatejs';
Babel корректно транспилирует import/export для работы в
средах без поддержки модулей (например, в старых браузерах через UMD или
SystemJS).
Пример компонента с использованием современного синтаксиса:
import { h, define, Component } from 'skatejs';
class MyButton extends Component {
static get props() {
return {
label: String,
disabled: Boolean
};
}
renderCallback() {
return h('button', {
disabled: this.disabled
}, this.label || 'Нажми меня');
}
}
define('my-button', MyButton);
Ключевые моменты:
props описывает свойства компонента, автоматически
синхронизируемые с DOM-атрибутами.renderCallback возвращает виртуальный DOM, создаваемый
через функцию h.class и static get props()
полностью поддерживается Babel.SkateJS позволяет использовать декораторы для упрощения синхронизации свойств:
import { h, define, Component, prop } from 'skatejs';
class MyInput extends Component {
@prop({ type: String })
value = '';
renderCallback() {
return h('input', {
value: this.value,
onInput: e => this.value = e.target.value
});
}
}
define('my-input', MyInput);
Babel с включённым plugin-proposal-decorators корректно
обработает @prop. Это обеспечивает:
SkateJS нативно использует JSX-подобный синтаксис через
h. Для полноценной работы с Babel нужно подключить плагин
@babel/plugin-transform-react-jsx
с настройкой фабрики:
{
"plugins": [
["@babel/plugin-transform-react-jsx", {
"pragma": "h"
}]
]
}
Пример JSX:
renderCallback() {
return <button disabled={this.disabled}>{this.label || 'Кнопка'}</button>;
}
h, что делает код
совместимым с SkateJS.Для сборки проекта с SkateJS и Babel обычно используют:
babel-loaderПример конфигурации Webpack:
module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
}
};
node_modules ускоряет сборку.Использование Babel в проектах с SkateJS даёт следующие преимущества:
Такое сочетание обеспечивает современный, декларативный и безопасный подход к созданию веб-компонентов с полной трансляцией для любых целей — от прототипов до продакшен-проектов.