Розробка бібліотеки Web Components на Lit

Різні розділи продукту живуть за власними правилами — інтерфейс розходиться, а кожне доопрацювання тягне за собою правки в кількох місцях. Ми розробляємо бібліотеку Web Components на Lit під ключ: єдині елементи, документація та передача команді. Скорочуємо час на збірку нових екранів і прибираємо розбіжності між розділами.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка бібліотеки Web Components на Lit
Складний
~1-2 тижні
Часті запитання

Чому бібліотека Web Components деградує при зростанні продукту

Перша версія бібліотеки Web Components зазвичай виглядає переконливо: кнопка, поле введення, випадаючий список, модальне вікно — кожен елемент в одному екземплярі, з описаними станами й передбачуваною поведінкою.

Проблема приходить не з коду, а з процесу: наступний розділ продукту робить свою кнопку, бо «потрібно терміново і трохи інакше», третій бере другу й дописує в неї окремий випадок. До релізу одна й та сама сутність у проєкті має три реалізації.

Далі працює комбінаторика.

П'ять розділів і двадцять елементів дають не двадцять компонентів, а десятки варіантів поведінки: в однієї кнопки є стан завантаження, в іншої немає; обробку фокуса реалізовано в одному місці й втрачено в іншому; відступи приходять із трьох різних наборів стилів.

Розбіжності між розділами накопичуються тихо — їх не видно на демонстрації, вони спливають у проді на конкретних сценаріях.

Ціна проявляється в підтримці інтерфейсу продукту. Будь-яка правка перестає бути однією задачею: потрібно знайти всі копії, оцінити, які з них відреагують на зміну, і не зламати розділ, який живе за власними правилами.

Повторювані дефекти верстки повертаються після кожного релізу — виправляють симптом на конкретній сторінці, а не джерело. Тести дублюються за розділами: покриття зростає, а впевненість у поведінці продукту — ні.

Єдині компоненти інтерфейсу знімають це не домовленістю, а архітектурою. Елемент, його стани й стилі описані в одному місці, розділи підключають його як залежність і не можуть перевизначити поведінку потай, а зміна доїжджає до всіх споживачів одразу.

Нижче розбираємо, як влаштована така бібліотека Web Components і якими кроками закрити розбіжності між розділами при масштабуванні продукту.

Що змінюється після переведення інтерфейсу на єдині компоненти

Єдиний набір елементів змінює не зовнішній вигляд інтерфейсу, а вартість його змін.

Поки в кожного екрана свої кнопки, таблиці й форми, будь-яка правка розмножується по кодовій базі: валідацію, стани завантаження й обробку помилок доводиться повторювати в кожному розділі, і однакові дефекти спливають знову.

Варіанти, між якими реально обирають перед стартом:

Варіант Коли підходить Обмеження
Свій код під кожен екран один інтерфейс, короткий термін життя, одна команда правка вноситься в усіх місцях окремо, дефекти повторюються
Готова бібліотека елементів типовий інтерфейс без власних вимог до дизайну складно підлаштувати під фірмовий стиль, зайвий код у збірці
Своя бібліотека Web Components на Lit кілька продуктів або команд і спільний дизайн потрібен етап проєктування набору компонентів, документації та версіонування

Після переходу типовий екран збирається з готових блоків, тому термін випуску нового розділу скорочується в рази, а не на відсотки.

Частка повторних дефектів падає: виправлення всередині компонента закриває проблему одразу в усіх продуктах, і зникає цілий клас відмов — розбіжності у валідації, різні стани кнопок, роз'їхана верстка на сусідніх сторінках.

Трудовитрати на підтримку зміщуються з копіювання правок на зміну однієї реалізації, а зміна візуального стилю перетворюється на задачу одного модуля, а не серії узгоджених доопрацювань по всіх командах.

Варіанти постачання компонентної бібліотеки: порівняння режимів

Компонентну бібліотеку рідко замовляють «з чистого аркуша»: зазвичай уже є робочий інтерфейс, прийнята дизайн-система або чужий набір елементів, який потрібно вбудувати у свій контур.

Вибір зводиться до чотирьох режимів постачання — вони відрізняються не якістю, а тим, хто далі відповідає за розмітку, поведінку й сумісність версій.

Варіант Коли підходить Обмеження підходу
Своя бібліотека компонентів (наприклад, на Lit) Продукт розвивається роками, потрібна єдина візуальна мова й передбачуваний темп оновлень Потребує регламенту версіонування й зворотної сумісності; перший реліз виходить пізніше, ніж в обгорток
Обгортки над готовою системою Дизайн-систему вже прийнято в компанії, терміни стиснуті, готовий набір закриває більшу частину екранів Успадковуємо чужі рішення й чужий темп релізів: мажорна версія зовнішньої системи ламає обгортки
Замовний набір елементів Вузький сценарій із важкою логікою — редактор, інтерактивна карта, складна форма Вища вартість підтримки на один компонент, перевикористання за межами проєкту майже нульове
Поступова заміна розрізнених елементів Працює успадкований інтерфейс, який не можна зупинити заради переписування Довго живуть два контури розмітки й стилів, потрібна явна межа сумісності

Обмеження кожного режиму проговорюємо до старту: що вважаємо публічним інтерфейсом компонента, як позначаємо застаріле, за якою ознакою розуміємо, що обгортку час міняти на своє.

Це і є критерій вибору — не «модність» підходу, а те, скільки правок він витримає на другому-третьому релізі.

Етапи впровадження: від аудиту інтерфейсів до передачі команді

Порядок етапів не випадковий: поки не зібрано повний список елементів, схема бібліотеки вийде вгадуванням. Інвентаризація дає пріоритети — що переносимо першим, а що залишаємо на сторінках.

  1. Аудит інтерфейсів. Збираємо повторювані елементи по всіх сторінках: кнопки, поля, списки, таблиці, модальні вікна. Перелік із частотою використання й списком дублів задає чергу робіт.
  2. Схема бібліотеки. Розкладаємо елементи за рівнями — базові, складені, предметні — і фіксуємо залежності, щоб простий елемент не тягнув за собою складний.
  3. Правила іменування. Спільний префікс в імені тега, дефіси замість пробілів, єдині імена властивостей і подій. Правила закріплюємо в автоперевірці коду: порушення видно на збірці, а не під час розбору.
  4. Реалізація на Lit. Реактивні властивості, ізольовані стилі, значення оформлення беремо з токенів теми. Один елемент — один файл і один набір атрибутів, оновлювати й відкочувати можна точково.
  5. Перевірка доступності. Для кожного елемента фіксуємо роль, роботу з клавіатури, порядок фокуса й контраст. Автопрогони йдуть у збірці, ключові сценарії перевіряємо зі скрінрідером вручну.
  6. Документація. Вітрина з живими прикладами, сторінка на елемент, журнал змін і правила оновлення версій — одне джерело замість листування в чаті.
  7. Передача команді. Розбір коду, цикл додавання нового елемента, зони відповідальності. Перший елемент команда додає сама, ми перевіряємо результат.

Після цього бібліотека розвивається без нас: елемент додається за шаблоном, а зміни проходять ті самі перевірки.

Що залишається в репозиторії та документації після здачі проєкту

Передаємо не «папку з кодом», а робочий репозиторій, у якому новий інженер розбереться без супровідних пояснень. Нижче — що саме залишається у вас після здачі бібліотеки компонентів на Lit: її можна розвивати власними силами або передати іншій команді без втрати контексту.

  • Вихідні коди й збірка. Монорепозиторій із пакетами компонентів, конфігурацією збірки та правилами перевірки коду; збірка відтворюється однією командою на чистій машині.
  • Правила версіонування. Семантичні версії пакетів і файл змін за типами — несумісні, нові можливості, виправлення; споживач бачить, яке оновлення безпечно ставити.
  • Документація компонентів. На кожен елемент: призначення, властивості та події, слоти, приклади розмітки, нотатки про доступність — усе в спільному каталозі.
  • Приклади використання. Стенди під типові сценарії — форма, таблиця, тема оформлення; запускаються локально й слугують основою для ваших сторінок.
  • Регламент оновлень. Порядок випуску версії: перевірки, збірка, публікація в приватний реєстр, оповіщення команд-споживачів і окремо — відкат до попередньої версії.
  • Ролі доступу. Розмежування прав на репозиторій, реєстр пакетів і каталог документації: хто вливає зміни в основну гілку, хто публікує версії.
  • Артефакти проєкту. Схема архітектури, журнал рішень щодо спірних місць і чек-лист приймання — щоб за пів року логіку не відновлювали з листування.

Передача закривається розбором із вашою командою: проходимо по репозиторію, показуємо випуск версії й відповідаємо на питання щодо будови компонентів.

Кейс: як прибрали розбіжності між розділами одного продукту

Продукт зростав розділами: каталог, особистий кабінет, оформлення замовлення й розділ підтримки збирали різні команди в різний час. Кожна йшла від своєї верстки, тому одна й та сама кнопка, поле введення й таблиця фільтрів існували в семи незалежних варіантах.

Зовні вони майже збігалися, а за поведінкою — ні: десь кнопка блокувала повторне натискання, десь надсилала запит двічі, десь не показувала стан завантаження.

Що змінили

Інтерфейсні елементи винесли в одну бібліотеку Web Components на Lit — єдине джерело елементів для всіх розділів. У кожного елемента тепер один вихідний код, версія й описані стани, а розділи перестали тримати власні копії та підключають спільний набір.

Для мобільного сценарію свідомо залишили компактний варіант — він відрізняється лише щільністю відступів, поведінка спільна.

Метрики до і після

Було: сім варіантів одного елемента і термін випуску правки в чотири-шість днів — зміна проходила всі розділи по черзі, кожен зі своєю перевіркою.

Стало: один вихідний код плюс один усвідомлений мобільний варіант, правка викладається того ж дня й приїжджає в усі розділи одночасно; набір перевірок скоротився з п'яти до одного.

Зник цілий клас відмов — розбіжність поведінки між розділами. Далі підтримка продукту йде від одного джерела: новий розділ підключає готові елементи, замість того щоб проєктувати їх заново й знову накопичувати відхилення.

Чим відрізняється дизайн-система від набору готових елементів

Набір готових елементів відповідає на питання «як виглядає кнопка». Дизайн-система відповідає на інше: «чому вона така і що зміниться, якщо виправити одне значення в токенах». Це різниця в межах відповідальності, а не в кількості файлів у постачанні.

У набір зазвичай входять макети екранів або окремі фрагменти інтерфейсу.

У дизайн-систему — шар токенів (колір, типографіка, відступи, стани), самі компоненти як Web Components, правила їх композиції, версіонування пакета, автотести й документація щодо публічного інтерфейсу кожного елемента.

Розподіл ролей тут жорсткий. Дизайнер володіє візуальною мовою й змінює значення токенів, інженер відповідає за реалізацію, доступність і зворотну сумісність. Спірні випадки вирішуються на рівні токена, а не правкою верстки на конкретному екрані.

Практична різниця видна вже на першому редизайні. Набір елементів доводиться правити посторінково: чим більше екранів, тим вищий ризик розбіжностей і втрачених станів. Зміна токена в дизайн-системі розноситься по всіх компонентах одразу, а тести показують, які місця відреагували.

Бібліотеки такого рівня ми збираємо на Lit — компоненти залишаються легкими й вбудовуються в наявні сторінки без переписування.

Підсумок: у постачанні ви отримуєте не картинки, а робочий артефакт — пакет компонентів, токени, правила й документацію, які живуть у репозиторії та оновлюються разом із продуктом.

Технічні сумніви: сумісність, доступність, оновлення

Інтеграція бібліотеки піднімає чотири заперечення: сумісність зі старим інтерфейсом, доступність, порядок оновлень і міграція без зупинки сайту. Розбираємо за механікою — на рівні ухвалених рішень, а не обіцянок.

Базовий принцип: компоненти на Lit — це нативні теги браузера. Вони сусідять із попередньою версткою й підключаються блоками, а не одноразовою заміною всього інтерфейсу.

Чи уживеться бібліотека зі старими розділами?

Компонент — звичайний тег з ізольованими стилями: він стає в будь-яку сторінку поруч зі старою версткою, шаблонізатор продовжує працювати. Перекладаємо по одному блоку — спочатку фільтри й форми. Резервні реалізації потрібні лише там, де браузер не підтримує вбудовані механізми.

Як закривається клавіатурна навігація й доступність інтерфейсу?

У компонента задаємо порядок обходу фокуса, видиму обводку, роботу Enter і стрілок, відсутність пасток у модальних вікнах. Динамічні блоки повідомляють про зміни скрінрідеру.

Доступність перевіряємо на рівні компонента, а не готової сторінки — правка не перетворюється на переробку розділу.

У якому порядку виходять оновлення бібліотеки?

Виправлення й зміни поведінки випускаємо роздільно, про несумісні зміни попереджаємо заздалегідь і тримаємо старий виклик робочим до узгодженого терміну. До кожного випуску додаємо журнал змін та інструкцію з переходу.

Чи можна мігрувати без зупинки роботи сайту?

Переїзд іде маршрутом: новий розділ вмикається на частину трафіку, старий залишається доступним, поведінку порівнюємо на живих сеансах. Перемикання — прапорець маршруту, тому відкат повертає попередній варіант без нової збірки.

Обговоримо задачу і повернемося з оцінкою та планом робіт

Щоб обговорити задачу предметно, нам потрібен контекст: які інтерфейси вже є, де дублюються спільні елементи і чи є напрацювання на Web Components, які потрібно зберегти або перевести.

На розборі ми дивимося структуру застосунків, обмеження платформи й те, як бібліотека буде підключатися до вашого контуру. Підсумок зустрічі — не презентація, а документ, за яким можна запускати роботу.

  • Розбір поточних інтерфейсів: які елементи повторюються між продуктами і що справді варто виносити в спільну бібліотеку, а що залишити на місцях.
  • Склад робіт: етапи, ролі з обох сторін, залежності й точки, де потрібні рішення вашої команди, а не наші.
  • Цільова схема бібліотеки: склад пакетів, правила версіонування, ізоляція стилів і підтримка тем оформлення.
  • Порядок передачі: як компоненти, документація й правила оновлення переходять до ваших розробників і хто відповідає за приймання.
  • План виходу в продукти: пілот на одному застосунку, критерії готовності й порядок підключення решти.
  • Оцінка та план робіт: терміни за етапами й умови, за яких вони переглядаються.
  • Старт проєкту: що потрібно від вас на першому тижні — доступи, репозиторії, відповідальні й канал зв'язку.

Опишіть задачу — скільки продуктів, які платформи, що вже зроблено власними силами. Повернемося з оцінкою та планом робіт, а також запропонуємо час для розбору деталей.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060