साझा लाइब्रेरीज़
ChurchApps का साझा कोड npm पर @churchapps/* scope के अंतर्गत प्रकाशित किया जाता है। सभी साझा packages एक एकल repository -- Packages -- में रहते हैं, जिसे Yarn (Berry) workspace के रूप में प्रबंधित किया जाता है और changesets के साथ versioned किया जाता है।
पैकेज
| पैकेज | विवरण | उपयोग किए गए |
|---|---|---|
@churchapps/helpers | Foundation layer: framework-free helper functions और shared TypeScript interfaces जो cross-app data contract बनाते हैं | सभी projects |
@churchapps/apihelper | Server-side Express utilities: auth, base controllers, database access, AWS और email integrations | सभी APIs |
@churchapps/apphelper | साझा React components और feature modules (login, donations, forms, markdown, website) | सभी web apps |
@churchapps/content-providers | तीसरे पक्ष के content providers का abstraction (Lessons.church, Planning Center, Dropbox, और अन्य) | Api, B1Admin, B1App, FreePlay |
@churchapps/integration-sdk | B1.church integrations बनाने के लिए toolkit: webhook verification, typed REST client, OAuth helpers | बाहरी integration developers |
@churchapps/texting | SMS provider abstraction (Text In Church, Clearstream, Mutual Ministry) | Api |
Dependency direction strictly downward है: apps apihelper और apphelper पर निर्भर करते हैं, जो peer dependency के रूप में @churchapps/helpers को declare करते हैं ताकि प्रत्येक app बिल्कुल एक copy को resolve करे।
Workspace Setup
git clone https://github.com/ChurchApps/Packages.git
cd Packages
yarn install
yarn build
Repo Yarn Berry का उपयोग करता है (root packageManager field authoritative है) एक एकल lockfile के साथ। yarn build dependency order में प्रत्येक package को build करता है; yarn test सभी package tests चलाता है।
Changesets के साथ प्रकाशन
हर package change एक changeset के साथ ships:
- Workspace root पर
yarn changesetचलाएं। Package(s) चुनें जिन्हें आपने छुआ है, bump type (patch = fix, minor = new export या feature, major = breaking), और एक-पंक्ति सारांश लिखें -- यह CHANGELOG entry बन जाता है। - Generated
.changeset/*.mdfile को अपने code change के साथ commit करें। एक pre-commit hook उन commits को ब्लॉक करता है जो एक package के source को बदलते हैं बिना staged changeset के। - Publish के लिए तैयार होने पर, root पर
yarn publish-allचलाएं। यह pending changesets को consume करता है (versions को bump करते हुए, CHANGELOGs लिखते हुए, internal dependency ranges को sync करते हुए), dependency order में सब कुछ को build करता है, और bumped packages को npm पर publish करता है। फिर version bumps को commit और push करें।
कभी भी एक single package के अंदर raw npm publish न चलाएं -- यह build ordering को skip करता है और version bookkeeping को जो release script handle करता है। Publishing के लिए @churchapps scope पर publish rights के साथ एक npm account की आवश्यकता है।
एक Consuming App के विरुद्ध स्थानीय विकास
Workspace के अंदर, packages directly अपने siblings के विरुद्ध build करते हैं -- कोई linking की आवश्यकता नहीं है। एक unpublished package build को consuming app (B1Admin, B1App, आदि) के अंदर परीक्षण करने के लिए, consumer में एक अस्थायी Yarn portal जोड़ें:
# consuming project में
yarn link ../Packages/helpers
# ... परीक्षण ...
yarn unlink ../Packages/helpers && yarn install
पहले package को build करें (yarn build workspace root पर) -- consumer compiled dist/ output को पढ़ता है, source को नहीं।
yarn link consumer के package.json में एक portal resolution लिखता है। इसे कभी भी commit न करें -- जब done हो तो हमेशा yarn unlink करें और reinstall करें।