В последнее время вокруг веб-компонентов очень много шума. И это оправдано, ведь они уже неплохо поддерживаются в современных браузерах и воплощают в себе долгожданный стандарт для работы с модульным кодом.

Веб-компоненты это про повторное использование, стабильность, абстракцию, стандартизацию и уменьшение затрат на разработку. Пока мы ждем полноценной реализации таких технологий как web-assembly, будущее уже приходит в веб.

В этой статье рассмотрим 5 инструментов, с которыми должен быть знаком любой веб-разработчик, желающий использовать веб-компоненты уже сейчас.

Начинаем погружение!

1. Bit

Bit – это платформа и опенсорсный инструмент, облегчающий разработку, использование и шаринг компонентов.

Во-первых, он умеет автоматически определять зависимости отдельного компонента, что позволяет легко изолировать его от целого проекта. Вы можете опубликовать несколько компонентов с помощью одной команды и без всякого рефакторинга!

Во-вторых, и это очень круто, в дополнение к установке через npm/yarn вы можете использовать Bit, чтобы перенести компонент в новый проект и продолжать его разрабатывать в нем, изменять код, играть со стилями. Больше никаких пулл-реквестов, все происходит автоматически.

В-третьих, Bit может управлять исходным кодом и графом зависимостей компонента между проектами. Вы можете синхронизировать внесенные изменения с помощью одной команды и точно знать, какие зависимости изменяются. Это чрезвычайно полезно для постепенного рефакторинга и делает поддержку проектов гораздо менее болезненной.

Наконец, все компоненты из репозитория можно расшарить на bit.dev, где они организованы в удобные коллекции. Так ваша команда может быстро обмениваться и повторно использовать компоненты.

Вот пример библиотеки веб-компонентов wired-elements на bit.dev. Обратите внимание, что с каждым компонентом можно поиграть, прежде чем использовать его.

Библиотека wired elements на bit

Bit ускоряет разработку модульных приложений, упрощает поддержку кодовой базы, помогает увеличить тестовое покрытие и повысить повторяемость кода.

2. lit-html и lit-element

Lit-html – это, в общих чертах, настраиваемый конструктор для веб-компонентов. Это «эффективная, выразительная, расширяемая библиотека шаблонов HTML для JavaScript». Другими словами, Lit-html использует шаблонные строки JavaScript для создания динамических шаблонов с литералами шаблона (пример).

lit-html использует такие встроенные фичи, как элементы <template>, и сочетает их с собственным клонированием для повышения эффективности. При изменениях данных не происходит полного ререндеринга шаблона – получается очень быстро.

import { html, render } from 'lit-html';

// Шаблоны lit-html используют тег `html`:
let sayHello = (name) => html`<h1>Hello ${name}</h1>`;

// Для рендера используется функция `render()`:
render(sayHello('Wordl'), document.body);

// Ререндер только обновляет данные в шаблоне:
render(sayHello('Everyone'), document.body);

Шаблоны-это значения (строки, узлы DOM, гетерогенные списки, вложенные шаблоны и т. д.), которые могут быть вычислены, переданы функциям, получены из них и вложены друг в друга. Выражения могут включать в себя все, что необходимо.

Директивы настраивают способ обработки значений, позволяя использовать асинхронные значения, эффективные повторения с ключом, ошибки и многое другое.

Lit-element – это «простой базовый класс для создания быстрых и легких веб-компонентов». Он использует lit-html для визуализации Shadow DOM элементов и добавляет API для управления свойствами и атрибутами. LitElement реагирует на изменения свойств и визуализирует их декларативно с помощью lit-html.

import { LitElement, html, property, customElement } from 'lit-element';

@customElement('simple-greeting')
export class SimpleGreeting extends LitElement {
  @property() name = 'World';

  render() {
    return html`<p>Hello, ${this.name}!</p>`;
  }
}
<simple-greeting name="Everyone"></simple-greeting>

LitElement составляет очень мощную комбинацию с Bit — для простого создания, повторного использования, управления и синхронизации компонентов. П

3. StencilJS

Stencil от команды Ionic – это компилятор веб-компонентов для создания быстрых, переиспользуемых блоков пользовательского интерфейса и прогрессивных веб-приложений (PWA).

Он использует TypeScript, JSX, крошечный виртуальный DOM, эффективную одностороннюю привязку данных, асинхронный конвейер рендеринга и ленивую загрузку для создания веб-компонентов на основе стандартов, которые работают в современных и устаревших браузерах.

Stencil также открывает новые возможности:

  • отрисовка на стороне сервера без необходимости запуска headless браузера4
  • пререндеринг;
  • свойства в виде объектов, а не только строк.

Компоненты Stencil – это простые классы ES6/TypeScript с декораторами метаданных, поэтому работать с ними очень просто.

4. Svelte JS

Svelte – это «компилятор, который принимает ваши декларативные компоненты и преобразует их в эффективный JavaScript, который точечно обновляет DOM» при изменении состояния вашего приложения. Это означает, что вы можете создавать boiler-plate free компоненты, используя CSS, HTML и чистый JavaScript, а Svelte скомпилирует его в легкий JS-код со встроенной реактивностью.

Пример компиляции Svelte

Звучит умопомрачительно и просто, не так ли? Еще одна полезная возможность – встроенная поддержка любой библиотеки CSS-in-JS, не привязанной к какому-либо фреймворку.

Пример компиляции Svelte

Svelte является важным шагом на пути к framework-agnostic веб-компонентами. Рабочий процесс позволяет выполнение постепенного рефакторинга.

Вы также можете легко комбинировать Svelte с Bit.

5. Angular Elements

Angular elements – это новый пакет в Angular, который помогает публиковать компоненты Angular как пользовательские элементы. По сути он компилирует их в веб-компоненты.

Это весомая и очень интересная попытка преодолеть разрыв между фреймворком и framework-agnostic разработкой. Пакет @angular/elements экспортирует API createCustomElement, который обеспечивает мост от интерфейса компонентов Angular и обнаружения изменений до встроенного DOM API.

Практически вы можете использовать новую функцию createCustomElement() для преобразования компонента в класс и регистрации его в браузере в качестве пользовательского элемента. Затем вы можете использовать новый элемент так же, как встроенный HTML-элемент. Это открывает множество новых возможностей: от лучшего разделения задач и возможности повторного использования до SSR!

Angular Elements

6. Hybrids

Hybrids – это «UI библиотека для создания веб-компонентов, которая предпочитает простые объекты и чистые функции классам и синтаксису this”. Она предлагает простой и функциональный API для создания пользовательских элементов.

Hybrids предоставляет декларативный способ создания пользовательских элементов. Это сочетание функциональной и объектно-ориентированной архитектуры с уникальным подходом к определению пользовательских элементов. Вот пример, который передает три базовые идеи библиотеки, связанные со свойствами: дескрипторы, фабрики и трансляция. Библиотека использует механизм обнаружения изменений и кэширования для упрощения жизненного цикла компонента.

import { define } from 'hybrids';
const MyElement = {
 count: 0,
 render: ({ count }) => {...},
};
define('my-element', MyElement);

«Бонусные» фичи:

  • движок шаблонов, основанный на tagged template literals;
  • поддержка замены модулей для более быстрой разработки.

7. Sigil

Sigil – это «функциональная библиотека веб-компонентов». Она использует виртуальный DOM для супер быстрого рендеринга с использованием snabbadom, язык шаблонов html, который позволяет привязки к атрибутам и свойствам, чистый функциональный стиль для уменьшения перерисовок, поддержку неизменяемых хранилищ, как в Redux и Kamea. Вы можете поэкспериментировать с Sigil на JSFiddle.

0 комментариев

Оставить комментарий

*Доступные HTML-теги: a, abbr, blockquote, code, pre, del, i, em, strong, b, strike
*Не будет опубликован