Atomico — это современная библиотека для создания веб-компонентов с реактивностью, похожей на React, но с нативной поддержкой Custom Elements. Для эффективного использования Atomico в проекте необходима корректная настройка сборщика модулей, в частности Webpack.
Начальная установка включает следующие шаги:
npm install atomico
npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env @babel/preset-react
Babel используется для трансформации современного JavaScript и JSX-синтаксиса, который Atomico применяет в своих компонентах.
Файл .babelrc должен содержать следующие настройки:
{
"presets": [
["@babel/preset-env", { "targets": "defaults" }],
"@babel/preset-react"
],
"plugins": []
}
Важно: Atomico использует JSX-подобный синтаксис для
создания элементов, поэтому @babel/preset-react необходим,
даже если React не используется напрямую.
Создается файл webpack.config.js с базовой
конфигурацией:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
},
resolve: {
extensions: ['.js']
},
mode: 'development'
};
Ключевые моменты:
entry указывает на основной файл проекта, содержащий
компоненты Atomico.babel-loader трансформирует JSX и современный
JavaScript в код, совместимый с большинством браузеров.resolve.extensions позволяет импортировать файлы без
указания расширения .js.Atomico поддерживает Shadow DOM, что требует отдельного подхода к
стилям. Для Webpack необходимо добавить style-loader и
css-loader:
npm install --save-dev style-loader css-loader
Конфигурация модулей:
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader'
}
]
}
Особенности работы со стилями в Atomico:
import './button.css';.Для быстрого прототипирования полезно включить HMR:
npm install --save-dev webpack-dev-server
Webpack конфигурация:
devServer: {
static: path.resolve(__dirname, 'dist'),
hot: true,
port: 8080
}
HMR обеспечивает:
Для production-сборки используется минификация и разделение кода:
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
splitChunks: {
chunks: 'all'
}
}
};
Преимущества:
import().Atomico полностью совместим с TypeScript. Для этого необходимо:
npm install --save-dev typescript ts-loader
Webpack конфигурация:
module: {
rules: [
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: 'ts-loader'
}
]
},
resolve: {
extensions: ['.ts', '.tsx', '.js']
}
Особенности:
props).tsx позволяет использовать JSX-синтаксис
вместе с типами TypeScript.Atomico хорошо работает с динамическим импортом:
const Button = async () => await import('./components/button.js');
Webpack автоматически создаст отдельный чанк для такого компонента, что уменьшает начальный вес бандла.
Atomico создает нативные Custom Elements, поэтому:
babel-loader должен сохранять современный синтаксис ES
Modules.<my-component></my-component>./project
/src
index.js
/components
button.js
card.js
/styles
main.css
/dist
bundle.js
webpack.config.js
package.json
.babelrc
Такое расположение файлов обеспечивает чистую архитектуру и совместимость с Webpack, поддерживая все возможности Atomico: реактивность, Shadow DOM и динамическую загрузку.