Δεύτερη καταχώρηση της σειράς αναρτήσεων ιστολογίου "Ledger Live Monorepo Project", όπου ένας προγραμματιστής του Ledger μας αφηγείται την ιστορία της τεράστιας μετανάστευσης της βάσης κωδικών Ledger Live σε ένα μονοφωνικό αποθετήριο. Αν χάσατε το μέρος 1, δείτε το εδώ:
Αφού διαπιστώσαμε ότι μια αρχιτεκτονική monorepo ήταν μια βιώσιμη λύση, αρχίσαμε να εξετάζουμε τα διαθέσιμα εργαλεία για να εφαρμόσουμε το σχέδιό μας.
Χειρισμός πολλαπλών έργων
Στην ομάδα του Ledger Live πλοηγούμαστε στο οικοσύστημα JavaScript και, ευτυχώς για εμάς, γνωρίζαμε ήδη αρκετούς τρόπους χειρισμού πολλαπλών έργων με τον διαχειριστή πακέτων μας. Μερικές από αυτές τις πιθανές λύσεις περιλαμβάνουν:
- NPM (έχει υποστήριξη για χώρους εργασίας αλλά καλύτερες εναλλακτικές),
- Νήματα 1 (γίνοντας πολύ μεγάλοι, καλύτερες και πιο αποτελεσματικές εναλλακτικές λύσεις),
- Νήματα ≥ 2 (ενδιαφέρουσα ιδέα, αλλά το plug n play δεν υποστηρίζεται καλά παντού, ειδικά με το React Native)
- PNPM (σύνδεσμοι συμβόλων, κατασκευασμένοι με γνώμονα τους χώρους εργασίας, αποτελεσματικός δίσκος).
Αφού τα είδαμε όλα αυτά, αποφασίσαμε να πάμε μαζί PNPM για:
- την απόδοση του δίσκου (χρησιμοποιεί εικονικό κατάστημα και symlinks, έτσι τα πακέτα κατεβαίνουν μόνο μία φορά και στη συνέχεια συνδέονται με το node_modules σας από το εικονικό κατάστημα),
- την ταχύτητα (καθώς τα πακέτα αποθηκεύονται προσωρινά, οι επόμενες εγκαταστάσεις είναι πολύ πιο γρήγορες),
- χτισμένο για υποστήριξη χώρων εργασίας/μονόρεπο αρχιτεκτονικής (ψευδώνυμα, ενορχήστρωση κ.λπ.…).
Σε χαρτί PNPM είναι ένα απόλυτο στολίδι, αλλά οι συμβολικοί σύνδεσμοι ήταν λίγο περίεργοι να ρυθμιστούν σωστά (και πάλι, ειδικά με το React Native).
Εντάξει, λοιπόν η επιλογή μας έγινε, θα πηγαίναμε μαζί PNPM.
Ενορχήστρωση σεναρίου
Ακόμα κι αν PNPM προσθέτει όλο και περισσότερη ενορχήστρωση στα χαρακτηριστικά του, εξακολουθεί να μην καλύπτει όλα όσα θέλαμε να κάνουμε, όπως:
- διαδοχικές κατασκευές,
- προσωρινή αποθήκευση.
Για αυτά, βρήκαμε δύο ενδιαφέροντες υποψήφιους που έπρεπε να ρίξουμε μια ματιά:
- NX (από τη γωνιακή ομάδα),
- Turborepo (το οποίο μόλις ανακοίνωσε το v1.0.0 όταν ξεκινήσαμε να το δουλεύουμε και τώρα δουλεύουμε με την ομάδα της Vercel).
Κάναμε μια απόδειξη της ιδέας και στα δύο.
NX είχε πολύ περισσότερα χαρακτηριστικά, γεννήτριες, αυτοματισμούς, μεγάλα γραφήματα εξάρτησης κ.λπ.… αλλά, πρόσθεσε πολλά γενικά έξοδα, και επειδή είναι αρκετά αποδεκτό, θα πρέπει να ακολουθήσουμε τις συμβάσεις τους.
Turborepo από την άλλη πλευρά, είναι αρκετά βασικό χαρακτηριστικό. Ωστόσο, είναι μια βολική λύση plug and play που θα μπορούσαμε να την αλλάξουμε πολύ γρήγορα αν χρειαστεί.
Ακόμα κι αν Turborepo είχε λιγότερα χαρακτηριστικά από NX, έκανε τα 2 πράγματα που ψάχναμε:
- Ενορχήστρωση κτιρίων με σεβασμό στο δέντρο εξάρτησης (και ταυτόχρονες κατασκευές),
- Αποθήκευση προσωρινής αποθήκευσης (οι εκδόσεις αποθηκεύονται στην κρυφή μνήμη και «αναπαράγονται» εάν ο κώδικάς τους δεν έχει αλλάξει).
Αυτό, συν το εύκολο drop in / drop out, μας έκανε να επιλέξουμε το νέο παιδί στο μπλοκ, TurboRepo.
Έκδοση
Εξετάσαμε επίσης αρκετές λύσεις, αλλά τελικά αποφασίσαμε να χρησιμοποιήσουμε https://github.com/changesets/changesets καθώς ήταν ένα εργαλείο που συνιστούσε η TurboRepo και μετά από λίγη ανάγνωση της τεκμηρίωσης, φάνηκε να συμμορφώνεται με τις ανάγκες μας.
Οι προγραμματιστές θα πρέπει να είναι λίγο πιο αυστηροί στη ροή και την παροχή των προγραμματιστών τους changesets
(αρχείο που περιγράφει ποια βιβλιοθήκη αλλάζει ο κώδικάς τους, τη σοβαρότητα που ακολουθεί semver σύμβαση και περιγραφή της αλλαγής). Αυτά τα changesets
στη συνέχεια χρησιμοποιούνται για την αυτόματη εμφάνιση της έκδοσης των πακέτων σύμφωνα με τις δεδομένες σοβαρότητες, καθώς και για την αυτοματοποίηση της δημιουργίας αλλαγές καταγραφής. Επιπλέον, τα εργαλεία επιτρέπουν pre release
λειτουργία, το 🍒 στο 🍰.
Τι έπεται ?
Αφού αποφασίσαμε για τα εργαλεία, ήρθε η ώρα να αρχίσουμε να δουλεύουμε. Στο επόμενο άρθρο του ιστολογίου, θα μιλήσουμε για το σύστημα κατασκευής και όλα τα dev-ops / αυτοματισμό / συνεχή ενσωμάτωση στο πλαίσιο ενός mono repository.
Valentin DE ALMEIDA
Developer Experience & Core Tech – Ledger Live
- SEO Powered Content & PR Distribution. Ενισχύστε σήμερα.
- PlatoData.Network Vertical Generative Ai. Ενδυναμώστε τον εαυτό σας. Πρόσβαση εδώ.
- PlatoAiStream. Web3 Intelligence. Ενισχύθηκε η γνώση. Πρόσβαση εδώ.
- PlatoESG. Ανθρακας, Cleantech, Ενέργεια, Περιβάλλον, Ηλιακός, Διαχείριση των αποβλήτων. Πρόσβαση εδώ.
- PlatoHealth. Ευφυΐα βιοτεχνολογίας και κλινικών δοκιμών. Πρόσβαση εδώ.
- πηγή: https://www.ledger.com/blog/ledger-live-monorepo-project-part-2-the-tools-make-it-shine
- :έχει
- :είναι
- :δεν
- :που
- 1
- a
- Σχετικα
- Απόλυτος
- προστιθέμενη
- Προσθέτει
- Μετά το
- πάλι
- Όλα
- επιτρέπει
- ήδη
- εναλλακτικές λύσεις
- an
- και
- Γωνιώδης
- ανακοίνωσε
- αρχιτεκτονική
- ΕΙΝΑΙ
- άρθρο
- AS
- At
- αυτοματοποίηση
- αυτομάτως
- Αυτοματοποίηση
- διαθέσιμος
- βασικός
- BE
- να γίνει
- Καλύτερα
- Κομμάτι
- Αποκλεισμός
- Μπλοκ
- Μηνύματα Blog
- και οι δύο
- χτίζω
- Χτίζει
- χτισμένο
- αλλά
- by
- αλλαγή
- άλλαξε
- Αλλαγές
- έλεγχος
- επιλογή
- Επιλέξτε
- κωδικός
- Βάση κώδικα
- έρχεται
- συμμορφώνονται
- έννοια
- ανταγωνιστής
- συμφραζόμενα
- συνεχής
- Βολικός
- Σύμβαση
- συμβάσεις
- πυρήνας
- σωστά
- θα μπορούσε να
- κάλυμμα
- αποφάσισε
- Αποφασίζοντας
- Εξάρτηση
- Περιγράφοντας
- περιγραφή
- Dev
- Εργολάβος
- DID
- do
- τεκμηρίωση
- Όχι
- Πτώση
- εύκολος
- οικοσύστημα
- αποδοτικότητα
- αποτελεσματικός
- καταχώριση
- ειδικά
- δημιουργία
- Αιθέρας (ΕΤΗ)
- ΠΑΝΤΑ
- πάντα
- παντού
- εμπειρία
- γρηγορότερα
- Χαρακτηριστικό
- Χαρακτηριστικά
- Αρχεία
- ροή
- ακολουθήστε
- Εξής
- Για
- Ευτυχώς
- Βρέθηκαν
- από
- Κόσμημα
- γενεά
- Γεννήτριες
- δεδομένου
- Go
- γραφικές παραστάσεις
- εξαιρετική
- είχε
- χέρι
- λαβή
- Έχω
- εδώ
- HTTPS
- τεράστιος
- ιδέα
- if
- in
- περιλαμβάνουν
- ολοκλήρωση
- ενδιαφέρον
- σε
- IT
- ΤΟΥ
- το JavaScript
- μόλις
- Παιδί
- Καθολικό
- Ledger Live
- μείον
- Βιβλιοθήκη
- ζω
- ματιά
- κοίταξε
- κοιτάζοντας
- Παρτίδα
- που
- κάνω
- διευθυντής
- max-width
- μετανάστευση
- νου
- έχασε
- Τρόπος
- περισσότερο
- πιο αποτελεσματικό
- πολύ
- πολλαπλούς
- ντόπιος
- Πλοηγηθείτε
- Ανάγκη
- που απαιτούνται
- ανάγκες
- Νέα
- επόμενη
- τώρα
- of
- Παλιά
- on
- μια φορά
- ONE
- αποκλειστικά
- Δογματικός
- ενορχήστρωση
- ΑΛΛΑ
- δικός μας
- έξω
- πακέτο
- Packages
- Χαρτί
- μέρος
- Μέρος
- σχέδιο
- Πλάτων
- Πληροφορία δεδομένων Plato
- Πλάτωνα δεδομένα
- Δοκιμάστε να παίξετε
- βύσμα
- plug and play
- συν
- δυνατός
- Δημοσιεύσεις
- αρκετά
- σχέδιο
- έργα
- απόδειξη
- απόδειξη της έννοιας
- παρέχουν
- βάζω
- γρήγορα
- Αντίδραση
- Αντιδράστε εγγενή
- Ανάγνωση
- συνιστάται
- Αποθήκη
- σχετικά με
- αυστηρός
- φαινόταν
- Σειρές
- setup
- διάφοροι
- αυστηρότητα
- λάμψη
- αφού
- So
- λύση
- Λύσεις
- μερικοί
- ειδικώς
- ταχύτητα
- Εκκίνηση
- ξεκίνησε
- Ακόμη
- κατάστημα
- Ιστορία
- μεταγενέστερος
- τέτοιος
- υποστήριξη
- υποστηριζόνται!
- σύστημα
- Πάρτε
- Συζήτηση
- tech
- λέει
- από
- ότι
- Η
- Το μπλοκ
- τους
- τότε
- Αυτοί
- πράγματα
- εκείνοι
- αν και?
- ώρα
- προς την
- πολύ
- εργαλείο
- εργαλεία
- κορυφή
- δέντρο
- δύο
- τελικά
- us
- μεταχειρισμένος
- χρησιμοποιεί
- v1
- εκδοχή
- πολύ
- βιώσιμος
- Πραγματικός
- ήθελε
- ήταν
- τρόπους
- we
- ΛΟΙΠΌΝ
- ήταν
- πότε
- Ποιό
- θα
- ΣΟΦΌΣ
- με
- εργαζόμενος
- θα
- ακόμη
- εσείς
- Σας
- zephyrnet