Обновить

Комментарии 16

Было бы интересно увидеть открытый вариант (open source) Вашей библиотеки. Тогда было бы больше, что обсуждать.
Суть не в библиотеке, а в подходе ;)
Мы рассматриваем возможность опенсорса библиотеки.

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

Кстати, насчет кода… мои коллеги делились некоторыми наработками, сделанными во время работы над библиотекой. Возможно вам будет интересно:

По вашему опыту, насколько реально автоматизировать и поддерживать актуальным список проектов, в которых используется тот или иной компонент?

Если проекты-пользователи — это ваши внутренние наработки, к коду которых есть доступ, то это совершенно реально. Мы пробовали разные подходы — на основе импортов модулей (у нас Angular, соответственно речь про ангуляровские модули) и на основе анализа шаблонов, у каждого есть свои плюсы и минусы.

Думаю, об этом можно написать отдельную статью.

Тут на неделе Денис Колесников из Авито рассказывал, какой у них Data Science навернут для этого. Рекомендую. Интересующая тематика начинается примерно с 2:14:00.
http://longestjs.org/#talk-01

Я так понимаю, у вас только Angular компоненты. А что делаете с мажорными обновлениями фреймворка? Поддерживаете несколько версий библиотеки или обновляетесь все разом?

> Я так понимаю, у вас только Angular компоненты

Если говорить о библиотеке компонентов, описанной в статье, то да, это именно Angular. Но в целом в компании есть и реализация дизайн-системы для проектов на React.

> А что делаете с мажорными обновлениями фреймворка? Поддерживаете несколько версий библиотеки или обновляетесь все разом?

Библиотеки на Angular 6/7 совместимы с приложениями на Angular 6/7/8 (более старых версий фреймворка у нас нет). Мы не поднимаем версию Angular немедленно после выхода мажорной версии фреймворка, т.к. это не требуется для приложений-пользователей на свежем Angular, но помешает приложениям на более старом.

Со временем, поднимая версию Angular в библиотеке, будем увеличивать мажорную версию самой библиотеки.

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

Не думали о реализации общих компонент на одном из легковесных фреймворков типа $mol или Svelte, чтобы использовать их в приложениях на любом фреймворке, а не реализовывать их отдельно для Ангуляра, отдельно для Реакта, отдельно для <что там будет в моде через год>?

Да, мы действительно рассматривали разные варианты, чтобы не делать две реализации. Но в итоге остановились на подходе с отдельными версиями.

  • Так можем в полную меру использовать возможности фреймворка.
  • Разрабатывать проще, потому что есть экспертиза в Angular. И наоборот, работая над китом, разработчики кита еще сильнее прокачиваются Angular и дают ценные советы коллегам из других команд.
  • Разработчики из команд-пользователей могут присылать пулл-реквесты. У нас есть выделенная команда для поддержки кита, но мы поддерживаем и «внутренний open source». Для других ребят это возможность быстрее занести свои изменения и попробовать новый вид задач, не похожий на то, что делают в своем проекте.

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

Перед нашей командой сейчас стоит похожая проблема: как донести до потребителей (разработчиков из других команд) подробную информацию обо всех имеющихся в библиотеке компонентах, их свойствах, примерах использования, и так далее.
Привет. По статистике Юля ответила ниже, просто промахнулась, похоже :) По поводу документации — в статье есть гифки с нашей интерактивной витриной. Мы вынесли её в отдельный пакет и продолжаем увеличивать её автоматизацию, пишем схематики для генерации и тому подобное. Но в корне своём она всё-таки собирается руками. Она состоит обычно из 3 вкладок:

  1. Примеры, которые уж точно не автоматизировать. Там мы показываем несколько особенных примеров использования, покрывающие основные нужды пользователей. Часто, разработчик копирует оттуда код, как отправную точку, близкую к тому, что ему нужно.
  2. Интерактивная документация. Тут лежит компонент и показаны все его инпуты, значения которых можно покрутить и сразу увидеть эффект.
  3. Инструкция по подключению. Тут для большинства страниц примерно одно и то же, подключаем модуль, вставляем в шаблон.

У разработчиков такая витрина пользуется большой популярностью. В ней есть разделы и поиск, кроме того «натыканные» входные данные со страницы документации сохраняются в URL так что можно передавать друг другу ссылки сразу на готовое состояние компонентов. Кроме разработчиков, витрина полезна технологам и дизайнерам проектов, чтобы видеть что уже можно переиспользовать и какие возможности уже есть у тех или иных компонентов.
Спасибо за ответ.

То есть без ручной работы всё же не обойтись.

Мы когда-то использовали ExtJS и у нас было своё подобие Sencha Kitchen Sink как раз для этих целей, но её приходилось пополнять и поддерживать вручную одному человеку.

Теперь пишем на Lightning Web Components и возникла необходимость собрать нечто подобное Lightning Strike от Appiphony, однако на этот раз хочется заавтоматизировать всё это донельзя. Поэтому интересно знать как это сделано у других, чтобы не наступать на те же грабли.
Я отвечу на вопрос о статистике использования компонентов, а мой коллега завтра подробнее расскажет о сборке документации, как раз он ее недавно доработал.

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

В первой версии получали только сам факт использования компонента. Сейчас дорабатываем новую версию, которая дополнительно сохраняет и какие параметры компонентов (inputs, outputs) используются, какие значения в них обычно передаются, умеет выявлять некоторые неправильные использования параметров (например, someInput="true" вместо [someInput]="true").

Подробности технической реализации, кажется, тянут на еще одну статью.

Дополнительно из package.json и package-lock.json берем информацию о версии библиотеки, TypeScript и Angular. Это вообще реализуется элементарно, а планировать обновления и следить за состоянием фронтенда в целом помогает очень и очень сильно.

Вы главное скажите: вы до сих пор разделяете поля в форме не отступами в стилях, а с помощью <br>, как на одной из первых картинок поста?

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

Информация

Сайт
l.tbank.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия