npm (Node Package Manager) — ο τυπικός διαχειριστής πακέτων για την πλατφόρμα Node.js, που περιλαμβάνεται στην εγκατάσταση του Node.js. Το npm διαχειρίζεται εξαρτήσεις έργων JavaScript και TypeScript: εγκαθιστά βιβλιοθήκες στο node_modules, ενημερώνει εκδόσεις πακέτων, επιλύει συγκρούσεις εκδόσεων. package.json — το κεντρικό αρχείο διαμόρφωσης με μεταδεδομένα και λίστα εξαρτήσεων. npm Registry — το μεγαλύτερο μητρώο πακέτων. Περισσότερα στο npm Registry.
Κύρια Σημεία
npm δημιουργήθηκε το 2010 από τον Isaac Schlueter ως λύση για τη διαχείριση εξαρτήσεων Node.js. Από το 2014 το npm διαχειρίζεται η εταιρεία npm, Inc., η οποία εξαγοράστηκε από Microsoft/GitHub το 2020. Το εργαλείο αποτελείται από δύο μέρη: CLI (γραμμή εντολών) για εγκατάσταση και διαχείριση πακέτων, και Registry — το κεντρικό αποθετήριο όλων των δημοσιευμένων μονάδων στη διεύθυνση registry.npmjs.org.
npm Registry — το μεγαλύτερο μητρώο πακέτων: πάνω από 2 εκατομμύρια πακέτα και πάνω από 10 δισεκατομμύρια λήψεις μηνιαίως. Κάθε πακέτο έχει έκδοση SemVer, περιγραφή, εξαρτήσεις, άδεια χρήσης και συγγραφέα. Η δημοσίευση δικού σας πακέτου γίνεται μέσω npm publish. Το npm υποστηρίζει scoped πακέτα για οργανισμούς (@scope/package), ιδιωτικά μητρώα και ενσωματωμένο έλεγχο ασφαλείας.
Node.js έκδοση 18+ περιλαμβάνει npm 9+ με βελτιωμένη απόδοση, workspaces για αποθετήρια πολλαπλών πακέτων και ανασχεδιασμένο μηχανισμό peer dependencies. Το οικοσύστημα npm καλύπτει JavaScript από πλευράς διακομιστή, frontend (React, Vue, Angular), ανάπτυξη κινητών (React Native), εργαλεία δόμησης (Webpack, Vite) και βοηθητικά προγράμματα CLI. Το npm είναι το κύριο κανάλι διανομής βιβλιοθηκών JavaScript.
npm install — η κύρια εντολή που διαβάζει το package.json και το package-lock.json για να εγκαταστήσει όλες τις εξαρτήσεις στο node_modules. Κατά την πρώτη εκτέλεση, το npm υπολογίζει το γράφημα εξαρτήσεων, επιλύει συγκρούσεις εκδόσεων και δημιουργεί το package-lock.json. Η εντολή npm install <package> εγκαθιστά ένα συγκεκριμένο πακέτο· η σημαία --save-dev προσθέτει στα devDependencies, --global — καθολικά.
npx — εκτελεστής πακέτων, που περιλαμβάνεται στο npm από την έκδοση 5.2. Το npx επιτρέπει την εκτέλεση βοηθητικών προγραμμάτων CLI χωρίς καθολική εγκατάσταση: npx react-native init ή npx create-react-app my-app. Το npx κατεβάζει το πακέτο σε προσωρινή μνήμη cache, το εκτελεί και μετά το καθαρίζει. Το npx είναι επίσης χρήσιμο για την εκτέλεση συγκεκριμένων εκδόσεων εργαλείων.
npm audit σαρώνει το δέντρο εξαρτήσεων για γνωστές ευπάθειες από τη βάση δεδομένων npm. Η εντολή εμφανίζει αναφορά με επίπεδα κρισιμότητας (critical, high, moderate) και προτείνει npm audit fix για αυτόματη ενημέρωση ευάλωτων πακέτων. npm cache αποθηκεύει τα ληφθέντα πακέτα τοπικά. npm cache clean --force καθαρίζει την προσωρινή μνήμη σε περίπτωση προβλημάτων εγκατάστασης. npm outdated εμφανίζει παλιά πακέτα.
# Βασικές εντολές npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Εκτέλεση χωρίς καθολική εγκατάσταση
$ npx react-native init MyApp
# Έλεγχος ασφαλείας
$ npm audit --fix
package.json — είναι ένα αρχείο JSON στη ρίζα του έργου που περιγράφει τα μεταδεδομένα, τις εξαρτήσεις και τη διαμόρφωσή του. Υποχρεωτικά πεδία: name (μοναδικό όνομα πακέτου) και version (έκδοση SemVer, π.χ. 1.0.0). Το αρχείο δημιουργείται με την εντολή npm init -y για γρήγορη αρχικοποίηση ή χειροκίνητα.
Semantic Versioning (SemVer) — πρότυπο έκδοσης MAJOR.MINOR.PATCH. Η κύρια έκδοση αλλάζει σε μη συμβατές αλλαγές API, η δευτερεύουσα — κατά την προσθήκη λειτουργικότητας (συμβατή προς τα πίσω), η διόρθωση — κατά τη διόρθωση σφαλμάτων. Το σύμβολο ^ πριν από την έκδοση επιτρέπει ενημερώσεις δευτερεύουσας έκδοσης και διόρθωσης, το ~ μόνο διόρθωσης.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Πεδίο | Σκοπός | Παράδειγμα τιμής |
|---|---|---|
| scripts | Εντολές εκτέλεσης για npm run | "start": "node index.js" |
| dependencies | Εξαρτήσεις παραγωγής της εφαρμογής | "react": "^18.3.0" |
| devDependencies | Εργαλεία ανάπτυξης και δοκιμών | "jest": "^29.7.0" |
| peerDependencies | Εξαρτήσεις κεντρικού υπολογιστή για βιβλιοθήκες | "react": ">=17.0.0" |
| engines | Απαιτήσεις έκδοσης Node.js | {"node": ">=18.0.0"} |
React Native έργα χρησιμοποιούν ενεργά το npm για τη διαχείριση εξαρτήσεων. Το τυπικό σύνολο περιλαμβάνει react, react-native, βιβλιοθήκες πλοήγησης (React Navigation), αιτήματα HTTP (axios), διαχείριση κατάστασης (Redux, Zustand) και στοιχεία UI. Το npm επιτρέπει την εγκατάσταση χιλιάδων συμβατών πακέτων από το μητρώο.
npx pod-install — υποχρεωτική εντολή μετά την εγκατάσταση εγγενών μονάδων στο React Native για iOS. Το npm δημιουργεί αυτόματα Podfile.lock βάσει του package-lock.json. Σε έργα Expo χρησιμοποιείται expo install αντί για npm install, καθώς επιλέγει εκδόσεις συμβατές με την τρέχουσα έκδοση του Expo SDK.
Συγκρούσεις εκδόσεων — συχνό πρόβλημα στο React Native: τα react-native-reanimated, react-native-gesture-handler και react-native-safe-area-context απαιτούν συμβατές εκδόσεις. Λύση — ενημέρωση όλων των πακέτων στις τελευταίες συμβατές εκδόσεις ή χρήση --legacy-peer-deps. Το package-lock.json είναι κρίσιμο για εγγενείς μονάδες που μεταγλωττίζονται μέσω CocoaPods και Gradle.
npm — ο τυπικός διαχειριστής πακέτων, που περιλαμβάνεται στο Node.js. Κύριες εναλλακτικές: yarn (δημιουργήθηκε από το Facebook το 2016) και pnpm (γρήγορο, με σκληρούς συνδέσμους). Από το npm 5, η διαφορά ταχύτητας και λειτουργικότητας μεταξύ npm και yarn είναι ελάχιστη. Το npm 7+ πρόσθεσε workspaces, καθιστώντας το ανταγωνιστικό για αποθετήρια πολλαπλών πακέτων.
| Χαρακτηριστικό | npm | yarn | pnpm |
|---|---|---|---|
| Έτος δημιουργίας | 2010 | 2016 | 2017 |
| Αρχείο κλειδώματος | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Εγκατάσταση | Σειριακή (npm 5+) | Παράλληλη | Παράλληλη |
| Χώρος δίσκου | Τυπικός | Τυπικός | Ελάχιστος (σύνδεσμοι) |
| Workspaces | Ναι (npm 7+) | Ναι | Ναι |
| Plug'n'Play | Όχι | Ναι | Όχι |
Σύμφωνα με το State of JS 2025: το npm χρησιμοποιείται από 62% των προγραμματιστών, το yarn — 35% (κυρίως παλιά έργα και λάτρεις του PnP), το pnpm — 3%. Για έργα React Native και τα δύο εργαλεία είναι ισοδύναμα, αλλά το npm συναντάται συχνότερα σε έργα Expo SDK 50+ και νέες αρχικοποιήσεις React Native.
yarn διατηρεί πλεονέκτημα σε εξαιρετικά μεγάλα αποθετήρια πολλαπλών πακέτων (100+ πακέτα) χάρη στην πιο ώριμη υλοποίηση workspaces και Plug'n'Play. Το pnpm κερδίζει στην εξοικονόμηση χώρου δίσκου μέσω σκληρών συνδέσμων προς το καθολικό κατάστημα. Η επιλογή διαχειριστή εξαρτάται από τις προτιμήσεις της ομάδας και την υποδομή.
Συχνές Ερωτήσεις
npm install ενημερώνει το package-lock.json και μπορεί να εγκαθιστά νέες δευτερεύουσες εκδόσεις εντός του σημασιολογικού εύρους. npm ci (Clean Install) διαγράφει το node_modules και εγκαθιστά πακέτα αυστηρά σύμφωνα με το package-lock.json χωρίς ενημέρωσή του. Το npm ci είναι ταχύτερο, χρησιμοποιείται σε CI/CD και εγγυάται ταυτόσημο περιβάλλον σε όλες τις μηχανές. Αν το package-lock.json λείπει, το npm ci επιστρέφει σφάλμα.
Από το npm 7, οι συγκρούσεις peer dependencies προκαλούν σφάλμα δόμησης. Λύσεις: ενημέρωση όλων των πακέτων σε συμβατές εκδόσεις μέσω npm update, χρήση της σημαίας --legacy-peer-deps για λειτουργία npm 6, ή προσθήκη ενότητας overrides στο package.json για εξαναγκασμένη καθήλωση έκδοσης συγκεκριμένου πακέτου. Η καλύτερη επιλογή — ενημέρωση εξαρτήσεων σε συμβατές εκδόσεις.
npm audit σαρώνει το δέντρο εξαρτήσεων για γνωστές ευπάθειες από τη βάση δεδομένων npm Security Advisory. Η εντολή εμφανίζει αναφορά με επίπεδο κρισιμότητας (critical, high, moderate, low) και προτείνει npm audit fix για αυτόματη ενημέρωση ευάλωτων πακέτων σε ασφαλείς εκδόσεις. Η τακτική εκτέλεση npm audit — βασική πρακτική ασφαλείας σε έργα JavaScript.
npm workspaces επιτρέπουν τη διαχείριση πολλαπλών πακέτων σε ένα αποθετήριο. Προσθέστε το πεδίο "workspaces": ["packages/*"] στο ριζικό package.json. Πλεονεκτήματα: ενιαία εγκατάσταση όλων των εξαρτήσεων σε κοινό node_modules, αυτόματοι συμβολικοί σύνδεσμοι μεταξύ τοπικών πακέτων, εκτέλεση σεναρίων για όλα τα πακέτα από τη ρίζα, εξάλειψη διπλοτύπων εκδόσεων.
package-lock.json καθηλώνει τις ακριβείς εκδόσεις όλων των εξαρτήσεων και των μεταβατικών πακέτων τους. Χωρίς αυτό, διαφορετικοί προγραμματιστές και διακομιστές CI μπορεί να λάβουν διαφορετικές εκδόσεις βιβλιοθηκών εντός του σημασιολογικού εύρους, οδηγώντας σε σφάλματα «λειτουργεί στη μηχανή μου». Το commit του αρχείου κλειδώματος εγγυάται αναπαραγώγιμες δομές και ταυτόσημη συμπεριφορά σε όλα τα περιβάλλοντα.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης