yarn: ουσία, εναλλακτικός διαχειριστής πακέτων για React Native

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-13 Χρόνος ανάγνωσης: 10 λεπ

yarn — ένας εναλλακτικός διαχειριστής πακέτων για Node.js, που δημιουργήθηκε από τη Facebook σε συνεργασία με τις Exponent, Google και Tilde το 2016. Το yarn έλυνε προβλήματα ταχύτητας και ασφάλειας του npm 2-4: παράλληλη εγκατάσταση, αυστηρό lock-αρχείο και offline cache. Σήμερα το yarn διατηρεί τη δημοτικότητά του στο React Native, το Expo και τα monorepository. Περισσότερα — στο yarn Documentation.

Κύρια σημεία

  • yarn — διαχειριστής πακέτων για Node.js, που δημιουργήθηκε από τη Facebook το 2016 για την επίλυση προβλημάτων του npm
  • yarn.lock — αρχείο καθήλωσης ακριβών εκδόσεων όλων των εξαρτήσεων, που δημιουργείται αυτόματα
  • yarn install — παράλληλη εγκατάσταση πακέτων με χρήση καθολικής cache χωρίς διπλασιασμό
  • yarn workspaces — μηχανισμός διαχείρισης monorepository με κοινό φάκελο node_modules
  • Plug'n'Play — εναλλακτική λύση για node_modules με αποθήκευση πακέτων σε ZIP αρχεία στην καθολική cache

Τι είναι το yarn — διαχειριστής πακέτων;

yarn (Yet Another Resource Negotiator) κυκλοφόρησε τον Οκτώβριο του 2016 ως απάντηση της Facebook στα προβλήματα του npm 2-4: αργή εγκατάσταση, έλλειψη lock-αρχείου και μη ασφαλή πακέτα. Το yarn πρόσφερε παράλληλη λήψη πακέτων, ντετερμινιστικό yarn.lock και επαλήθευση ακεραιότητας μέσω αθροισμάτων ελέγχου. Το 2020 το yarn μεταπήδησε στην έκδοση 2 (Berry) με Plug'n'Play και προσέγγιση TypeScript-first.

Η αρχιτεκτονική του yarn διαφέρει από το npm: το yarn κατεβάζει πακέτα παράλληλα (το npm μέχρι την έκδοση 5 — σειριακά), αποθηκεύει στην cache κάθε πακέτο στο ~/.cache/yarn χωρίς διπλασιασμό μεταξύ έργων και επαληθεύει την ακεραιότητα μέσω checksum. Το yarn πάντα δημιουργεί yarn.lock σε κάθε εγκατάσταση, ενώ το package-lock.json στο npm εμφανίστηκε μόνο στην έκδοση 5.

Από yarn 2 (Berry, 2020) και μετά, το yarn ξαναγράφτηκε πλήρως σε TypeScript και υποστηρίζει Plug'n'Play, workspaces, constraints για monorepository και πρωτόκολλα εγκατάστασης από διαφορετικές πηγές (npm, git, tarball). Το yarn 3+ (2022) πρόσθεσε το Zero-Installs — αποθήκευση της cache στο repository για άμεση εγκατάσταση χωρίς δίκτυο.

Πώς το yarn διαχειρίζεται την εγκατάσταση εξαρτήσεων

yarn install — η κύρια εντολή που διαβάζει το package.json και το yarn.lock και εγκαθιστά εξαρτήσεις. Το yarn κατεβάζει πακέτα παράλληλα, επιταχύνοντας την εγκατάσταση 2-3 φορές σε σύγκριση με το npm 4 και παλαιότερες εκδόσεις. Το yarn χρησιμοποιεί offline cache: αν ένα πακέτο έχει ήδη ληφθεί σε άλλο έργο, αντιγράφεται από την cache, δεν γίνεται ξανά λήψη.

bash
# Κύριες εντολές yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Διαδραστική ενημέρωση
$ yarn upgrade-interactive
# Αφαίρεση διπλότυπων πακέτων
$ yarn dedupe

yarn add — εντολή για εγκατάσταση νέου πακέτου. yarn add <package> προσθέτει στο dependencies, yarn add --dev — στο devDependencies. Το yarn ενημερώνει αυτόματα το yarn.lock. yarn upgrade ενημερώνει τα πακέτα στις τελευταίες εκδόσεις εντός του σημασιολογικού εύρους. yarn upgrade-interactive — διαδραστική λειτουργία επιλογής συγκεκριμένων πακέτων για ενημέρωση.

yarn cache — καθολική cache στο ~/.cache/yarn/v6. Κάθε πακέτο αποθηκεύεται μία φορά σε ZIP αρχείο με άθροισμα ελέγχου. Η yarn cache καθαρίζεται αυτόματα, αλλά μπορεί να εκτελεστεί yarn cache clean χειροκίνητα. Το yarn cache dir δείχνει τη διαδρομή προς την cache. Το yarn cache list — λίστα των πακέτων στην cache.

yarn.lock: σκοπός και δομή του αρχείου

yarn.lock — αρχείο καθήλωσης ακριβών εκδόσεων όλων των εξαρτήσεων και των μεταβατικών πακέτων τους. Σε αντίθεση με το package-lock.json (JSON), το yarn.lock χρησιμοποιεί μορφή YAML με επίπεδη δομή. Το yarn.lock δημιουργείται πάντα αυτόματα κατά την yarn install ή yarn add — αυτό εγγυάται ότι όλοι οι προγραμματιστές και οι διακομιστές CI λαμβάνουν το ίδιο σύνολο πακέτων.

yaml
# Παράδειγμα δομής yarn.lock
react@^18.3.0:
  version: "18.3.1"
  resolution: "react@npm:18.3.1"
  dependencies:
    loose-envify: "^1.1.0"
  checksum: "abc123def456..."

react-native@^0.76.0:
  version: "0.76.3"
  resolution: "react-native@npm:0.76.3"
  dependencies:
    react: "18.3.1"
  checksum: "def789ghi012..."

Πεδία του yarn.lock: version — ακριβής έκδοση του πακέτου, resolution — πηγή και έκδοση, dependencies — εξαρτήσεις του, checksum — άθροισμα ελέγχου για επαλήθευση. Το yarn.lock γίνεται commit στο repository και είναι η μοναδική πηγή αλήθειας για τις εξαρτήσεις. Αν το yarn.lock και το package.json δεν συμφωνούν, το yarn εκδίδει προειδοποίηση.

Yarn constraints — σύστημα κανόνων για monorepository που ελέγχει και επιβάλλει εκδόσεις εξαρτήσεων στο yarn.lock. Οι περιορισμοί περιγράφονται στο αρχείο yarn.constraints.js στη γλώσσα Yarn Constraint Language. Τα Constraints επιτρέπουν την εγγύηση ότι όλα τα πακέτα στο monorepository χρησιμοποιούν την ίδια έκδοση React ή TypeScript.

yarn στο οικοσύστημα React Native

React Native είναι παραδοσιακά στενά συνδεδεμένο με το yarn. Το Expo CLI, το React Native CLI και το Create React Native App χρησιμοποιούσαν αρχικά το yarn. Σε έργα React Native, το yarn.lock καθηλώνει εκδόσεις native modules, κάτι που είναι κρίσιμο για σταθερή μεταγλώττιση μέσω CocoaPods (iOS) και Gradle (Android). Τα yarn workspaces είναι δημοφιλή σε React Native monorepository με κοινό κώδικα.

yarn workspaces σε React Native monorepository: το root package.json περιέχει "workspaces": ["packages/*", "mobile"]. Το yarn install δημιουργεί έναν ενιαίο φάκελο node_modules στο root επίπεδο. Τα πακέτα αναφέρονται μεταξύ τους μέσω symlink. Το npx pod-install εκτελείται μετά την αλλαγή native εξαρτήσεων για ενημέρωση των CocoaPods.

json
{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/mobile",
    "apps/web"
  ],
  "scripts": {
    "mobile:start": "yarn workspace mobile start",
    "mobile:ios": "yarn workspace mobile ios",
    "lint": "yarn workspaces run lint"
  }
}

Expo SDK 50+ συνιστά επίσημα το yarn για νέα έργα που δημιουργούνται μέσω npx create-expo-app. Το yarn εξασφαλίζει συμβατότητα με modules του Expo και δημιουργεί αυτόματα σωστό yarn.lock. Το Zero-Installs στο yarn 3+ επιτρέπει το commit της cache στο repository — οι προγραμματιστές λαμβάνουν έτοιμο περιβάλλον χωρίς εγκατάσταση εξαρτήσεων μετά το git clone.

yarn και npm: συγκριτική ανάλυση

npm και yarn λύνουν την ίδια εργασία — διαχείριση πακέτων Node.js. Με την κυκλοφορία του npm 5-7, το λειτουργικό χάσμα εξαφανίστηκε πρακτικά. Το npm 7+ περιλαμβάνει workspaces, npm ci (αντίστοιχο του yarn install --frozen-lockfile) και παράλληλη εγκατάσταση. Ωστόσο, το yarn διατηρεί πλεονεκτήματα σε συγκεκριμένα σενάρια: Plug'n'Play, Zero-Installs και ώριμο σύστημα constraints.

Χαρακτηριστικόnpmyarn
Έτος δημιουργίας20102016
Lock-αρχείοpackage-lock.json (JSON)yarn.lock (YAML)
ΕγκατάστασηΣειριακή (npm 5+)Παράλληλη
Plug'n'PlayΌχιΝαι (yarn 2+)
WorkspacesΝαι (npm 7+)Ναι
Zero-InstallsΌχιΝαι (yarn 3+)
Cachenode_modules με flatteningΚαθολική ~/.cache/yarn
Γλώσσα υλοποίησηςJavaScriptTypeScript (yarn 2+)

Πότε να επιλέξετε yarn: έργα σε Expo SDK 50+, μεγάλα monorepository (100+ πακέτα), ομάδες που εκτιμούν το Zero-Installs για γρήγορη ρύθμιση περιβάλλοντος και παλαιότερα έργα που ήδη χρησιμοποιούν yarn. Πότε να επιλέξετε npm: τυπικά έργα create-react-app, Next.js, Vite, ομάδες χωρίς ειδικές απαιτήσεις για τον διαχειριστή πακέτων.

yarn 4 (2024) εισήγαγε βελτιωμένη απόδοση, εγγενή υποστήριξη ESM και βελτιστοποίηση για μεγάλα monorepository. Το npm 10+ συνεχίζει να αναπτύσσεται με έμφαση στην ασφάλεια και τη συμβατότητα. Η επιλογή μεταξύ npm και yarn σήμερα είναι θέμα προτιμήσεων της ομάδας και συγκεκριμένων απαιτήσεων του έργου, όχι τεχνικής υπεροχής ενός εργαλείου.

Συχνές Ερωτήσεις

Ποια είναι η κύρια διαφορά μεταξύ yarn και npm;

yarn αρχικά ξεπέρασε το npm σε ταχύτητα χάρη στην παράλληλη εγκατάσταση πακέτων και την επιθετική αποθήκευση cache. Το yarn.lock δημιουργείται αυτόματα σε κάθε εγκατάσταση, ενώ το package-lock.json εμφανίστηκε στο npm 5. Το yarn προσφέρει Plug'n'Play — μια εναλλακτική για node_modules με μηδενικό χρόνο εγκατάστασης. Από το npm 7+, η διαφορά σε ταχύτητα και λειτουργικότητα για βασικά σενάρια είναι ελάχιστη.

Πώς λειτουργούν τα yarn workspaces σε monorepository;

yarn workspaces — μηχανισμός διαχείρισης πολλαπλών πακέτων σε ένα repository. Το root package.json περιέχει το πεδίο "workspaces": ["packages/*"]. Το yarn install εγκαθιστά κοινές εξαρτήσεις στο ανώτερο επίπεδο σε ένα ενιαίο node_modules, δημιουργεί symlink μεταξύ τοπικών πακέτων και αποφεύγει τον διπλασιασμό. Οι εντολές εκτελούνται για όλα τα workspace μέσω yarn workspaces run <script>.

Τι είναι το yarn Plug'n'Play και σε τι χρησιμεύει;

Plug'n'Play (PnP) — μια εναλλακτική για τον παραδοσιακό φάκελο node_modules, που παρουσιάστηκε στο yarn 2. Αντί να αντιγράφει αρχεία, το yarn δημιουργεί έναν χάρτη εξαρτήσεων στο .pnp.cjs και αποθηκεύει πακέτα σε ZIP αρχεία στην καθολική cache. Πλεονεκτήματα PnP: εγκατάσταση σε δευτερόλεπτα, μείωση χρόνου εκκίνησης Node.js κατά 30-50%, απουσία node_modules και σχετικών προβλημάτων διαδρομών.

Πώς να μεταφέρω ένα έργο από npm σε yarn;

Εγκαταστήστε το yarn καθολικά: npm install -g yarn. Στη ρίζα του έργου εκτελέστε yarn import — το yarn θα διαβάσει το package-lock.json και θα δημιουργήσει ισοδύναμο yarn.lock. Διαγράψτε το node_modules και το package-lock.json, εκτελέστε yarn install για επαλήθευση. Ενημερώστε τη διαμόρφωση CI/CD, αντικαθιστώντας το npm με yarn. Το yarn είναι πλήρως συμβατό με το package.json.

Πώς να διορθώσω σφάλματα κλειδώματος εκδόσεων στο yarn;

Το σφάλμα "Integrity check failed" εμφανίζεται όταν το yarn.lock και το node_modules δεν συμφωνούν. Λύση: διαγράψτε το node_modules, το yarn.lock και καθαρίστε την cache (yarn cache clean), στη συνέχεια εκτελέστε ξανά yarn install. Για συγκρούσεις εκδόσεων, χρησιμοποιήστε το yarn upgrade-interactive για επιλογή συγκεκριμένων ενημερώσεων. Το yarn dedupe θα αφαιρέσει διπλότυπα πακέτα.

Σύνοψη

  • yarn — εναλλακτικός διαχειριστής πακέτων Node.js, που δημιουργήθηκε από τη Facebook το 2016
  • yarn.lock — αρχείο καθήλωσης ακριβών εκδόσεων όλων των εξαρτήσεων σε μορφή YAML
  • yarn install — παράλληλη εγκατάσταση πακέτων με χρήση καθολικής offline cache
  • Plug'n'Play — καινοτόμος μηχανισμός yarn 2+ χωρίς φάκελο node_modules
  • yarn workspaces — διαχείριση monorepository με ενιαίο node_modules
  • yarn στο React Native — τυπικός διαχειριστής πακέτων για έργα Expo και React Native
  • Zero-Installs — commit της cache στο repository για άμεση εγκατάσταση χωρίς λήψη πακέτων

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης