Спільні бібліотеки
Спільний код 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: перевірка webhook, типізований REST-клієнт, допоміжні засоби OAuth | Зовнішні розробники інтеграцій |
@churchapps/texting | Абстракція провайдерів SMS (Text In Church, Clearstream, Mutual Ministry, MinistryStuff, Nalo Solutions, Twilio) | Api |
Напрямок залежностей строго спрямований вниз: застосунки залежать від apihelper і apphelper, які оголошують @churchapps/helpers як peer dependency, щоб кожен застосунок використовував рівно одну копію цього пакета.
Налаштування робочого простору
git clone https://github.com/ChurchApps/Packages.git
cd Packages
yarn install
yarn build
Репозиторій використовує Yarn Berry (поле packageManager у корені є визначальним) з одним lock-файлом. yarn build збирає кожен пакет у порядку залежностей; yarn test запускає тести всіх пакетів.
Випуск через Changesets
Кожна зміна в пакеті супроводжується changeset:
- Виконайте
yarn changesetу корені робочого простору. Виберіть пакет(и), які ви змінювали, тип підвищення версії (patch = виправлення, minor = новий експорт або функція, major = зміна, що порушує сумісність) і напишіть короткий підсумок в один рядок — він стане записом у CHANGELOG. - Додайте згенерований файл
.changeset/*.mdдо коміту разом зі зміною коду. Hook pre-commit блокує коміти, які змінюють вихідний код пакета без доданого до індексу changeset. - Коли все готово до публікації, виконайте
yarn publish-allу корені. Ця команда обробляє очікувані changesets (підвищує версії, записує CHANGELOG, синхронізує діапазони внутрішніх залежностей), збирає все у порядку залежностей і публікує оновлені пакети в npm. Потім зробіть коміт і відправте підвищення версій.
Ніколи не запускайте звичайний npm publish всередині окремого пакета — це пропускає порядок збірки та облік версій, яким займається скрипт випуску. Для публікації потрібен обліковий запис npm з правами на публікацію в області @churchapps.
Локальна розробка з застосунком-споживачем
У робочому просторі пакети збираються безпосередньо з власних сусідніх пакетів — прив'язка (linking) не потрібна. Щоб протестувати неопубліковану збірку пакета всередині застосунку-споживача (B1Admin, B1App тощо), додайте тимчасовий Yarn portal у споживачі:
# in the consuming project
yarn link ../Packages/helpers
# ... test ...
yarn unlink ../Packages/helpers && yarn install
Спочатку зберіть пакет (yarn build у корені робочого простору) — споживач читає скомпільований вивід dist/, а не вихідний код.
yarn link записує resolution portal у package.json споживача. Ніколи не комітьте його — після завершення завжди виконуйте yarn unlink і переінсталюйте залежності.