Полифиллы представляют собой участки кода, добавляющие поддержку современных возможностей языка JavaScript в старых окружениях, где эти возможности отсутствуют. В экосистеме Inferno это критично для обеспечения корректной работы компонентов на браузерах с устаревшими движками JavaScript.
Основные задачи полифиллов:
Promise,
Map, Set,
Array.prototype.includes, Object.assign.Object.assign для распространения
пропсов.Полифиллы интегрируются на этапе сборки проекта. В современных
сборках с использованием Webpack, Rollup или Vite можно подключать их
через core-js или аналогичные библиотеки. Типичный пример
подключения:
import 'core-js/stable';
import 'regenerator-runtime/runtime';
В этом случае гарантируется, что Inferno-компоненты смогут использовать асинхронные функции, методы массивов и объекты нового стандарта, независимо от браузера.
Транспайлер преобразует современный синтаксис JavaScript (ES6+) в более старые версии, совместимые с большим числом сред исполнения. Для Inferno это особенно важно при использовании JSX и функциональных компонентов с современными возможностями языка.
Babel является стандартным инструментом для транспиляции:
Inferno.createVNode, но JSX требует трансформации в вызовы
этой функции. Конфигурация Babel включает плагин
@babel/plugin-transform-react-jsx с указанием
pragma на Inferno.createVNode:{
"plugins": [
["@babel/plugin-transform-react-jsx", { "pragma":"Inferno.createVNode" }]
]
}
Сбалансированное использование полифиллов и транспайлеров позволяет:
Важно учитывать порядок подключения:
В сборках с Webpack или Rollup следует настроить транспайлинг для
всех исходных файлов проекта и внешних библиотек, если они используют
современный синтаксис. Пример настройки в
webpack.config.js:
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
['@babel/preset-env', { targets: "> 0.25%, not dead" }]
],
plugins: [
['@babel/plugin-transform-react-jsx', { pragma: 'Inferno.createVNode' }]
]
}
}
}
]
}
Для проектов, ориентированных на старые браузеры, добавление
include: /node_modules/ позволяет транспилировать
библиотеки с современным синтаксисом, что обеспечивает совместимость на
этапе выполнения.
Inferno активно использует возможности асинхронного рендеринга через
хуки и события. Для корректной работы необходимо подключение полифиллов
regenerator-runtime для поддержки
async/await:
import 'regenerator-runtime/runtime';
Транспайлер при этом преобразует асинхронные функции в генераторы, используя полифилл для исполнения кода.
targets,
чтобы не перегружать код лишними преобразованиями.Понимание роли полифиллов и транспайлеров является ключевым для стабильного и кроссбраузерного использования Inferno, позволяя создавать высокопроизводительные и совместимые интерфейсы.