pub — ο επίσημος διαχειριστής πακέτων για τη γλώσσα Dart και το Flutter SDK. Αυτοματοποιεί τη λήψη, εγκατάσταση, ενημέρωση και διαγραφή βιβλιοθηκών τρίτων, τη διαχείριση εκδόσεων εξαρτήσεων και τη δημοσίευση δικών σας πακέτων. Κεντρικό αποθετήριο — pub.dev, όπου φιλοξενούνται περισσότερα από 50.000 πακέτα. Η διαμόρφωση του έργου περιγράφεται στο αρχείο pubspec.yaml.
Κύρια σημεία
npm για JavaScript ή pip για Pythonpubspec.lock καθορίζει ακριβείς εκδόσεις για αναπαραγώγιμη μεταγλώττισηpub (Package Universal Browser) — ο ενσωματωμένος διαχειριστής πακέτων που παρέχεται με το Dart SDK. Διαχειρίζεται εξωτερικές βιβλιοθήκες, επιλύει συγκρούσεις εκδόσεων, κατεβάζει μεταβατικές εξαρτήσεις και αποθηκεύει προσωρινά πακέτα τοπικά. Στο οικοσύστημα Flutter, το pub χρησιμοποιείται ως κύριο εργαλείο για τη σύνδεση προσθηκών πλοήγησης, πελατών HTTP, διαχειριστών κατάστασης και άλλων στοιχείων.
Οι κύριες λειτουργίες του pub περιλαμβάνουν: εγκατάσταση εξαρτήσεων από το μητρώο pub.dev, τοπικών διαδρομών (path εξαρτήσεις) και αποθετηρίων git; επίλυση εκδόσεων σύμφωνα με τους κανόνες σημασιολογικής εκδοσήμανσης; προσωρινή αποθήκευση ληφθέντων πακέτων στον κατάλογο συστήματος; δημοσίευση δικών σας πακέτων στο ανοιχτό μητρώο. Όλες αυτές οι λειτουργίες είναι διαθέσιμες μέσω της εντολής CLI dart pub ή της ισοδύναμης flutter pub.
Η αρχιτεκτονική του pub βασίζεται σε ένα κλειστό γράφημα εξαρτήσεων: ο διαχειριστής χτίζει ένα δέντρο όπου κάθε πακέτο εμφανίζεται ακριβώς μία φορά. Εάν δύο βιβλιοθήκες απαιτούν διαφορετικές εκδόσεις του ίδιου πακέτου, το pub προσπαθεί να βρει ένα συμβατό διάστημα ή αναφέρει σφάλμα σύγκρουσης. Αυτό διαφέρει από την προσέγγιση του npm, όπου επιτρέπονται πολλαπλές εκδόσεις του ίδιου πακέτου σε διαφορετικούς κόμβους του δέντρου.
Το αρχείο pubspec.yaml — το κεντρικό αρχείο διαμόρφωσης κάθε έργου Dart ή Flutter. Είναι γραμμένο σε μορφή YAML και περιέχει μεταδεδομένα, εξαρτήσεις, διαμόρφωση μεταγλώττισης και περιορισμούς SDK. Παρακάτω παρατίθεται ένα τυπικό παράδειγμα για εφαρμογή Flutter:
name: my_app
description: Παράδειγμα εφαρμογής Flutter
version: 1.0.0+1
publish_to: none
environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.10.0"
dependencies:
flutter:
sdk: flutter
http: ^1.1.0
provider: ^6.0.5
shared_preferences: ^2.2.0
path_provider: ^2.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
mockito: ^5.4.3
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/fonts/Βασικά πεδία του pubspec.yaml: name — μοναδικό όνομα πακέτου (μόνο λατινικοί χαρακτήρες, κάτω παύλα, αριθμοί); description — σύντομη περιγραφή (υποχρεωτική για δημοσίευση); version — σημασιολογική έκδοση με προαιρετικό αριθμό build μετά το σύμβολο συν; environment — ελάχιστες εκδόσεις Dart SDK και Flutter SDK; dependencies — κύριες εξαρτήσεις της εφαρμογής; dev_dependencies — εξαρτήσεις μόνο για ανάπτυξη και δοκιμές; flutter — ενότητα διαμόρφωσης Flutter (assets, fonts, plugins).
Το πεδίο publish_to ελέγχει τη διαθεσιμότητα δημοσίευσης: η τιμή none απαγορεύει τη δημοσίευση (τυπικό για εφαρμογές), η προεπιλεγμένη τιμή — https://pub.dev. Το πεδίο dependency_overrides επιτρέπει την αναγκαστική παράκαμψη της έκδοσης ενός πακέτου σε περίπτωση σύγκρουσης — χρησιμοποιήστε το με προσοχή, μόνο ως προσωρινή λύση.
Το pub υποστηρίζει τέσσερις τύπους εξαρτήσεων, ο καθένας με τη δική του σύνταξη στο pubspec.yaml:
Τυπικός τύπος — το πακέτο λαμβάνεται από το μητρώο pub.dev ή άλλο συμβατό μητρώο. Καθορίζεται το όνομα πακέτου και η έκδοση. Παράδειγμα: http: ^1.1.0 θα λάβει την πιο πρόσφατη συμβατή έκδοση από το διάστημα >=1.1.0 και <2.0.0 σύμφωνα με τους κανόνες εκδοσήμανσης caret.
Χρησιμοποιούνται για σύνδεση Flutter SDK ή Dart SDK. Σύνταξη: flutter: sdk: flutter. Το πακέτο προέρχεται από την τοπική εγκατάσταση Flutter SDK, όχι από το μητρώο. Οι εξαρτήσεις SDK δεν έχουν εκδόσεις — η έκδοσή τους καθορίζεται από την τρέχουσα εγκατεστημένη έκδοση Flutter.
Υποδεικνύει έναν τοπικό κατάλογο με το πακέτο. Χρήσιμο κατά την ανάπτυξη βιβλιοθήκης και δοκιμή χωρίς δημοσίευση. Σύνταξη:
dependencies:
my_local_lib:
path: ../my_local_libΟι εξαρτήσεις διαδρομής δεν καταγράφονται στο pubspec.lock — κάθε ενημέρωση επιλύεται εκ νέου από την καθορισμένη διαδρομή.
Επιτρέπουν τη σύνδεση πακέτου απευθείας από αποθετήριο git. Υποστηρίζονται κλάδοι, ετικέτες και commits:
dependencies:
my_git_lib:
git:
url: https://github.com/user/my_git_lib.git
ref: mainΟι εξαρτήσεις Git είναι βολικές για forks, μη δημοσιευμένες διορθώσεις ή εργασία σε Pull Request. Συνιστάται να καθορίζετε συγκεκριμένη ετικέτα ή commit αντί για κλάδο, για να αποφύγετε απροσδόκητες αλλαγές κατά τη μεταγλώττιση.
Το pub ακολουθεί αυστηρά το Semantic Versioning 2.0: μορφή MAJOR.MINOR.PATCH, όπου MAJOR — μη συμβατές αλλαγές, MINOR — συμβατές προς τα πίσω προσθήκες, PATCH — συμβατές προς τα πίσω διορθώσεις. Βάσει αυτού του σχήματος, το pub καθορίζει τη συμβατότητα πακέτων και επιλύει συγκρούσεις.
Για τον καθορισμό εκδόσεων χρησιμοποιούνται τρεις κύριοι τελεστές στο pubspec.yaml:
^1.2.3 ισοδυναμεί με >=1.2.3 και <2.0.0. Ο πιο διαδεδομένος τελεστής, καθώς προϋποθέτει συμβατότητα εντός της κύριας έκδοσης. Για πακέτα με κύρια έκδοση 0 (μηδέν) — ^0.1.2 σημαίνει >=0.1.2 και <0.2.0, που αντιστοιχεί στους κανόνες SemVer για ασταθείς εκδόσεις.~1.2.3 ισοδυναμεί με >=1.2.3 και <1.3.0. Καθορίζει τη δευτερεύουσα έκδοση, επιτρέποντας μόνο ενημερώσεις patch. Χρησιμοποιείται λιγότερο συχνά, κυρίως όταν είναι γνωστή η ασυμβατότητα σε επίπεδο δευτερεύουσας έκδοσης.>=1.2.0 <2.0.0 — ρητή σημειογραφία που παρέχει πλήρη έλεγχο. Χρήσιμο για σύνθετους περιορισμούς, για παράδειγμα όταν χρησιμοποιούνται πολλαπλές εκδόσεις μεταβατικών εξαρτήσεων.Μετά την εκτέλεση dart pub get, το pub δημιουργεί το αρχείο pubspec.lock, το οποίο καθορίζει τις ακριβείς εκδόσεις όλων των επιλυμένων πακέτων (άμεσων και μεταβατικών). Αυτό το αρχείο πρέπει να συμπεριληφθεί στο σύστημα ελέγχου εκδόσεων για να διασφαλιστούν αναπαραγώγιμες μεταγλωττίσεις σε όλες τις μηχανές. Κατά την εκτέλεση dart pub upgrade, το lock αρχείο ενημερώνεται στις πιο πρόσφατες συμβατές εκδόσεις εντός των καθορισμένων περιορισμών.
Το σφάλμα dependency conflict προκύπτει όταν δύο πακέτα απαιτούν μη επικαλυπτόμενα διαστήματα της ίδιας εξάρτησης. Το pub αναφέρει ποια πακέτα ήρθαν σε σύγκρουση και για ποιο λόγο. Λύση: ενημερώστε ένα από τα συγκρουόμενα πακέτα σε συμβατή έκδοση, χρησιμοποιήστε dependency_overrides (προσωρινό μέτρο) ή αντικαταστήστε το πακέτο με εναλλακτικό.
Όλες οι λειτουργίες του pub εκτελούνται μέσω μιας ενοποιημένης διεπαφής CLI. Στο Dart SDK χρησιμοποιείται η εντολή dart pub, στο Flutter SDK — η ισοδύναμη flutter pub (επιπλέον λαμβάνει υπόψη εξαρτήσεις Flutter SDK και προσθήκες). Παρακάτω παρατίθενται οι βασικές εντολές:
dart pub get — λαμβάνει όλες τις εξαρτήσεις που καθορίζονται στο pubspec.yaml, επιλύει εκδόσεις και δημιουργεί/ενημερώνει το pubspec.lock. Εκτελείται κατά το πρώτο κλώνο του έργου ή μετά από αλλαγή εξαρτήσεων.dart pub upgrade — ενημερώνει όλες τις εξαρτήσεις στις πιο πρόσφατες εκδόσεις εντός των περιορισμών του pubspec.yaml και αντικαθιστά το pubspec.lock. Μπορεί να ενημερώσει ένα μεμονωμένο πακέτο: dart pub upgrade http.dart pub add <package> — προσθέτει νέα εξάρτηση στο pubspec.yaml και εκτελεί αμέσως pub get. Παράδειγμα: dart pub add dio θα προσθέσει την πιο πρόσφατη έκδοση του πακέτου dio.dart pub remove <package> — αφαιρεί την εξάρτηση από το pubspec.yaml και επανεκκινεί την επίλυση γραφήματος.dart pub cache repair — φορτώνει ξανά όλα τα προσωρινά αποθηκευμένα πακέτα. Βοηθά σε περίπτωση βλάβης της τοπικής προσωρινής μνήμης ή σφαλμάτων αθροίσματος ελέγχου.dart pub deps — εμφανίζει το δέντρο εξαρτήσεων σε ευανάγνωστη μορφή κειμένου. Χρήσιμο για ανάλυση μεταβατικών εξαρτήσεων και εύρεση διπλοεγγραφών.dart pub publish — δημοσιεύει το τρέχον πακέτο στο pub.dev. Πριν από τη δημοσίευση, ελέγχει την ορθότητα του pubspec.yaml, την άδεια χρήσης και την περιγραφή.dart pub outdated — εμφανίζει λίστα παρωχημένων εξαρτήσεων με τρέχουσα, επιθυμητή και τελευταία διαθέσιμη έκδοση. Ανάλογο του npm outdated.Όλες οι εντολές είναι διαθέσιμες και σε συντομευμένη μορφή: dart pub get ως dart pub g (όχι όλες οι συντομεύσεις). Σε έργα Flutter, το πρόθεμα flutter προστίθεται στις εντολές pub: flutter pub get, flutter pub add και ούτω καθεξής. Η έκδοση Flutter ελέγχει επιπλέον τη συμβατότητα των προσθηκών με την πλατφόρμα-στόχο.
pub.dev — το κεντρικό μητρώο πακέτων του οικοσυστήματος Dart και Flutter. Τον Ιανουάριο του 2025, εκεί είχαν δημοσιευθεί περισσότερα από 50.000 πακέτα, με συνολικές λήψεις άνω των 10 δισεκατομμυρίων. Κάθε πακέτο έχει σελίδα με περιγραφή, τεκμηρίωση, αξιολογήσεις δημοτικότητας (Popularity), βαθμολογίες Pub Points και εκδόσεις.
Pub Points — αυτόματο σύστημα αξιολόγησης ποιότητας πακέτου από 0 έως 130 βαθμούς. Λαμβάνονται υπόψη: ύπαρξη άδειας χρήσης, περιγραφή, παραδείγματα, συμβατότητα με την τελευταία σταθερή έκδοση Dart, απουσία τρωτών σημείων, κάλυψη δοκιμών, ορθότητα μορφοποίησης. Η υψηλή βαθμολογία αυξάνει την ορατότητα του πακέτου στην αναζήτηση και την εμπιστοσύνη των χρηστών.
Η διαδικασία δημοσίευσης περιλαμβάνει διάφορα βήματα:
pubspec.yaml: ύπαρξη name, description, version, license (συνιστάται η αναγραφή αναγνωριστικού SPDX, π.χ. MIT).dart pub publish --dry-run — προσομοίωση δημοσίευσης χωρίς αποστολή στον διακομιστή, εμφανίζει όλα τα αρχεία που θα συμπεριληφθούν στο πακέτο και πιθανά σφάλματα.dart pub publish θα ανοίξει το πρόγραμμα περιήγησης για έλεγχο ταυτότητας OAuth.Σημαντικοί κανόνες: μόνο πακέτα με μοναδικό όνομα μπορούν να δημοσιευθούν; μια έκδοση που έχει δημοσιευθεί δεν μπορεί να διαγραφεί (μπορεί μόνο να αποκρυφθεί — dart pub unpublish — εντός 7 ημερών); για μεγάλες ενημερώσεις πρέπει να ακολουθούνται οι κανόνες Semantic Versioning, χωρίς διακοπή του δημόσιου API χωρίς αλλαγή της κύριας έκδοσης.
Συχνές ερωτήσεις
dart pub get και dart pub upgrade;Το pub get λαμβάνει εκδόσεις από το υπάρχον pubspec.lock χωρίς να το τροποποιεί (αν δεν υπάρχει lock αρχείο — το δημιουργεί). Το pub upgrade αγνοεί το lock αρχείο και επιλύει όλες τις εξαρτήσεις εκ νέου σύμφωνα με το πιο πρόσφατο συμβατό διάστημα, στη συνέχεια αντικαθιστά το lock αρχείο.
Χρησιμοποιήστε εξάρτηση path: dependencies: my_package: path: ../my_package. Η διαδρομή καθορίζεται σε σχέση με τη ρίζα του έργου. Μια τέτοια εξάρτηση δεν καταγράφεται στο pubspec.lock — σε κάθε μεταγλώττιση, το pub λαμβάνει το τρέχον περιεχόμενο του καταλόγου.
Ενημερώστε τα συγκρουόμενα πακέτα σε εκδόσεις με επικαλυπτόμενα διαστήματα. Εάν αυτό δεν είναι δυνατό — χρησιμοποιήστε προσωρινά dependency_overrides στο pubspec.yaml ή αντικαταστήστε ένα από τα πακέτα με εναλλακτικό. Είναι χρήσιμο να εκτελέσετε dart pub deps για οπτικοποίηση του δέντρου εξαρτήσεων.
Το pubspec.lock καθορίζει τις ακριβείς εκδόσεις όλων των εξαρτήσεων (άμεσων και μεταβατικών), διασφαλίζοντας αναπαραγώγιμη μεταγλώττιση σε όλες τις μηχανές προγραμματιστών και στο CI/CD. Χωρίς αυτό, κάθε εκτέλεση pub get μπορεί να επιλέξει ελαφρώς διαφορετικές εκδόσεις λόγω νέων εκδόσεων patch.
Εκτελέστε dart pub publish --dry-run για προκαταρκτικό έλεγχο, στη συνέχεια dart pub publish. Κατά την πρώτη δημοσίευση απαιτείται εξουσιοδότηση μέσω Google. Το πακέτο πρέπει να έχει μοναδικό όνομα, περιγραφή, άδεια χρήσης και σωστή έκδοση.
Pub Points — σύστημα αξιολόγησης ποιότητας από 0 έως 130. Η βαθμολογία μπορεί να βελτιωθεί με προσθήκη άδειας χρήσης (MIT, Apache-2.0), εκτεταμένης περιγραφής, παραδειγμάτων χρήσης, δοκιμών, διατήρησης συμβατότητας με την τελευταία έκδοση Dart και διόρθωσης συντακτικών παρατηρήσεων του αναλυτή.
Σύνοψη
pub get έως pub publish καλύπτουν τον πλήρη κύκλο ζωής διαχείρισης πακέτωνΘα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης