Ledger Live Monorepo Project: Part 2 - The Tools (Make it Shine) | Καθολικό

Ledger Live Monorepo Project: Part 2 – The Tools (Make it Shine) | Καθολικό

Κόμβος πηγής: 2985172

Δεύτερη καταχώρηση της σειράς αναρτήσεων ιστολογίου "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

Σφραγίδα ώρας:

Περισσότερα από Καθολικό