Stencil изначально проектировался как инструмент, способный встраиваться в существующие экосистемы без необходимости полного переписывания приложения. Ключевая идея — использование Web Components как нейтрального слоя, который может сосуществовать с любым фреймворком или вовсе без него. Это делает Stencil особенно подходящим для поэтапной миграции крупных фронтенд-проектов, где мгновенный переход невозможен из-за масштаба, рисков или организационных ограничений.
Постепенная миграция предполагает одновременное существование старого стека и нового решения на базе Stencil с контролируемым увеличением доли компонентов, реализованных через Web Components.
Stencil компилирует компоненты в стандартные Web Components, опираясь на спецификации Custom Elements, Shadow DOM и ES Modules. Это создает четкий архитектурный контракт:
Благодаря этому Stencil-компонент может быть использован:
Наиболее распространенный сценарий — вынос UI-библиотеки в отдельный пакет на базе Stencil. Существующее приложение продолжает работать без изменений, но новые визуальные элементы реализуются как Web Components.
Преимущества подхода:
Stencil хорошо подходит для реализации:
В больших кодовых базах часто существуют зоны с высокой сложностью и плохой поддерживаемостью. Такие участки могут быть инкапсулированы в Web Components без изменения остальной архитектуры.
Процесс выглядит следующим образом:
Stencil позволяет:
Stencil официально поддерживает генерацию Angular-оберток. В процессе сборки создаются прокси-компоненты, которые:
Stencil-компоненты могут использоваться параллельно с Angular-компонентами, что позволяет мигрировать экран за экраном.
В React используется механизм Custom Elements с дополнительными прокси-компонентами для корректной типизации и обработки событий.
Особенности:
Этот подход позволяет постепенно заменять React-компоненты, не меняя структуру приложения.
Stencil-компоненты могут использоваться напрямую через HTML-разметку:
<my-datepicker value="2025-01-01"></my-datepicker>
Коммуникация осуществляется через:
Это особенно полезно при миграции старых серверных приложений с минимальным JavaScript.
Stencil не навязывает конкретную модель state management. Это критично для поэтапного перехода.
Возможные варианты:
Stencil-компоненты могут выступать как:
Это позволяет не ломать существующую логику управления данными.
Stencil по умолчанию использует Shadow DOM, что:
При необходимости Shadow DOM может быть отключен, если:
Stencil поддерживает:
Для поддержки старых браузеров Stencil автоматически подключает необходимые полифиллы. Это особенно важно при миграции, где часть пользователей может работать в устаревших окружениях.
Stencil:
Таким образом, внедрение Web Components не ухудшает существующие SLA по производительности.
При постепенной миграции часто используется следующая структура:
Stencil хорошо работает в:
Это упрощает:
Stencil поддерживает:
Stencil-компоненты могут тестироваться независимо от legacy-кода, что:
Постепенная миграция не обязательно предполагает полный отказ от старого фреймворка. В ряде случаев Stencil остается:
Если же цель — полная замена, Stencil-компоненты уже готовы к использованию в любом новом окружении без переписывания, что делает финальный этап миграции технически простым и предсказуемым.