Mithril.js — лёгкий и быстрый фронтенд-фреймворк, который не навязывает сложной архитектуры и прекрасно интегрируется с современными инструментами сборки. Эффективная работа с Mithril невозможна без грамотной настройки сборщиков модулей, таких как Webpack, Rollup или Vite, которые обеспечивают трансформацию, бандлинг и оптимизацию кода.
Mithril распространяется через NPM и доступен как модуль ES6 и CommonJS. Установка осуществляется командой:
npm install mithril
В файле исходного кода можно импортировать библиотеку:
import m from "mithril";
или через CommonJS:
const m = require("mithril");
ES-модули позволяют интегрировать Mithril с современными сборщиками, поддерживающими tree-shaking, что уменьшает размер итогового бандла.
Конфигурация Webpack обеспечивает трансформацию современного JavaScript и JSX-подобных структур для Mithril.
Пример минимальной конфигурации:
const path = require("path");
module.exports = {
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: "babel-loader",
},
],
},
resolve: {
extensions: [".js"],
},
mode: "development",
};
Ключевые моменты настройки Webpack:
development или
production) влияет на минификацию и оптимизацию.Для оптимизации производительности можно добавить плагин
TerserPlugin и включить
optimization.splitChunks для разбиения кода на чанки.
Rollup ориентирован на создание оптимизированных бандлов для библиотек и приложений, использующих ES-модули. Он идеально подходит для Mithril благодаря поддержке tree-shaking.
Пример конфигурации rollup.config.js:
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: "iife",
name: "App",
},
plugins: [
resolve(),
commonjs(),
terser()
],
};
Основные аспекты:
node_modules.<script>.Vite — современный сборщик с высокой скоростью запуска и «горячей» перезагрузкой модулей (HMR). Для Mithril достаточно базовой конфигурации:
import { defineConfig } from "vite";
export default defineConfig({
root: "./src",
build: {
outDir: "../dist",
rollupOptions: {
input: "src/index.js",
},
},
});
Преимущества использования Vite с Mithril:
Хотя Mithril использует функцию m() для создания
виртуальных DOM-элементов, возможно применение JSX через Babel:
/** @jsx m */
import m from "mithril";
const App = {
view: () => <div className="app">Hello Mithril</div>,
};
Для этого необходимо:
@babel/preset-react.pragma через
@babel/plugin-transform-react-jsx:{
"plugins": [
["@babel/plugin-transform-react-jsx", { "pragma": "m" }]
]
}
Webpack, Rollup и Vite корректно обрабатывают JSX, если настроен соответствующий Babel-loader или плагин.
Для продакшн-сборок важно:
Пример оптимизации Webpack:
optimization: {
splitChunks: {
chunks: "all",
},
minimize: true,
}
Rollup автоматически выполняет tree-shaking и минификацию при
использовании плагина terser.
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
}
import "./style.css";
rollup-plugin-postcss.m.Эта настройка формирует основу для стабильного, быстого и легко масштабируемого проекта на Mithril.