Общие библиотеки
Общий код ChurchApps публикуется в npm под областью @churchapps/*. Все общие пакеты находятся в одном репозитории — Packages — управляется как рабочее пространство Yarn (Berry) и версируется с помощью changesets.
Пакеты
| Пакет | Описание | Используется |
|---|---|---|
@churchapps/helpers | Уровень фундамента: функции помощника без фреймворка и общие интерфейсы TypeScript, которые образуют кросс-приложение контракт данных | Все проекты |
@churchapps/apihelper | Утилиты Express на стороне сервера: аутентификация, базовые контроллеры, доступ к базе данных, интеграции AWS и электронной почты | Все API |
@churchapps/apphelper | Общие React-компоненты и модули функций (вход, пожертвования, формы, markdown, веб-сайт) | Все веб-приложения |
@churchapps/content-providers | Абстракция над провайдерами контента третьих сторон (Lessons.church, Planning Center, Dropbox и другие) | Api, B1Admin, B1App, FreePlay |
@churchapps/integration-sdk | Набор инструментов для построения интеграций B1.church: проверка вебхука, типизированный REST клиент, помощники OAuth | Разработчики внешних интеграций |
@churchapps/texting | Абстракция провайдера SMS (Text In Church, Clearstream, Mutual Ministry) | Api |
Направление зависимостей строго направлено вниз: приложения зависят от apihelper и apphelper, которые объявляют @churchapps/helpers как peer зависимость, так что каждое приложение разрешает ровно одну копию.
Установка рабочего пространства
git clone https://github.com/ChurchApps/Packages.git
cd Packages
yarn install
yarn build
Репо использует Yarn Berry (поле packageManager в корне авторитетно) с единственным lockfile. yarn build создаёт каждый пакет в порядке зависимостей; yarn test запускает все тесты пакетов.
Выпуск с Changesets
Каждое изменение пакета поставляется с changeset:
- Запустите
yarn changesetв корне рабочего пространства. Выберите пакет(ы), которые вы трогали, тип bump (patch = исправление, minor = новый экспорт или функция, major = breaking), и напишите одностроковое резюме — оно становится записью CHANGELOG. - Зафиксируйте сгенерированный файл
.changeset/*.mdвместе с вашим изменением кода. Pre-commit hook блокирует коммиты, которые изменяют источник пакета без staged changeset. - Когда будете готовы к публикации, запустите
yarn publish-allв корне. Это потребляет ожидающие changesets (изменяя версии, пиша CHANGELOGs, синхронизируя диапазоны зависимостей внутри), создаёт всё в порядке зависимостей и публикует изменённые пакеты в npm. Затем зафиксируйте и перемещайте изменения версии.
Никогда не запускайте необработанный npm publish внутри отдельного пакета — это пропускает порядок сборки и учёт версий, которые обрабатывает сценарий выпуска. Публикация требует учётной записи npm с правами публикации для области @churchapps.
Локальная разработка в потребляющем приложении
Внутри рабочего пространства пакеты создаются напрямую против их братьев и сестёр — связывание не требуется. Для тестирования несоциированной сборки пакета внутри потребляющего приложения (B1Admin, B1App и т.д.) добавьте временный Yarn portal в потребителя:
# в потребляющем проекте
yarn link ../Packages/helpers
# ... тестирование ...
yarn unlink ../Packages/helpers && yarn install
Сначала соберите пакет (yarn build в корне рабочего пространства) — потребитель читает выведённый выход dist/, не источник.
yarn link пишет разрешение portal в package.json потребителя. Никогда не фиксируйте его — всегда yarn unlink и переустановите когда будете готовы.