Για τροποποίηση npm node_modules δέντρου ή οποιαδήποτε ενέργεια package.json, θα δημιουργηθεί αυτόματα ένα package-lock.json. Περιγράφει το ακριβές δέντρο που δημιουργείται έτσι ώστε οι επόμενες εγκαταστάσεις να μπορούν να δημιουργήσουν το ίδιο δέντρο, ανεξάρτητα από τις ενδιάμεσες ενημερώσεις εξαρτήσεων.
Αυτό το αρχείο προορίζεται να υποβληθεί στο αποθετήριο πηγαίου κώδικα και είναι διαθέσιμο για διάφορους σκοπούς:
Περιγράφει μια ενιαία αναπαράσταση του δέντρου εξαρτήσεων για να εγγυηθεί ότι οι συμπαίκτες, οι αναπτύξεις και η συνεχής ενοποίηση διασφαλίζουν ότι εγκαθίστανται οι ίδιες ακριβώς εξαρτήσεις.
Παρέχετε στους χρήστες ένα εργαλείο για να "προχωρήσουν" σε μια προηγούμενη κατάσταση node_modules χωρίς να χρειάζεται να δεσμεύσουν τον ίδιο τον κατάλογο.
Διευκολύνετε τη μεγαλύτερη ορατότητα των αλλαγών δέντρων μέσω αναγνώσιμων διαφορών ελέγχου πηγής.
Και βελτιστοποιήστε τη διαδικασία εγκατάστασης επιτρέποντας στο npm να παραλείψει την ανάλυση διπλών μεταδεδομένων των πακέτων που έχουν εγκατασταθεί προηγουμένως.
Μια βασική λεπτομέρεια σχετικά με package-lock.json είναι ότι δεν μπορεί να κυκλοφορήσει και θα αγνοηθεί εάν βρεθεί οπουδήποτε εκτός του κορυφαίου πακέτου. Μοιράζεται τη μορφή με npm-shrinkwrap.json, είναι βασικά το ίδιο αρχείο αλλά επιτρέπει τη δημοσίευση. Αυτό δεν συνιστάται, εκτός εάν αναπτύξετε ένα εργαλείο CLI ή χρησιμοποιήσετε με άλλο τρόπο τη διαδικασία έκδοσης για να δημιουργήσετε ένα πακέτο παραγωγής.
Εάν υπάρχουν και package-lock.json και npm-shrinkwrap.json στον ριζικό κατάλογο ενός πακέτου, package-lock.json θα αγνοηθεί εντελώς.
Αρχικός σύνδεσμος: https://docs.npmjs.com/files/package-lock.json
Από την κυκλοφορία του npm 5.x, ο ρόλος του κλειδώματος 5.6.0 έχει αλλάξει πολλές φορές και τώρα πολλά μικρά λευκά κείμενα στο Διαδίκτυο έχουν κολλήσει στην προηγούμενη μετάφραση εγγράφων.
Ενημέρωσα από npm3.x σε npm5, αλλά διαπίστωσα ότι το φαινόμενο κατά την εκτέλεση του 'npm i' δεν ήταν σύμφωνο με το δημοφιλές επιστημονικό άρθρο στο Διαδίκτυο.
Αναφέρεται ότι ανεξάρτητα από το πώς τροποποιείται package.json αρχείο, εάν το npm i εκτελείται επανειλημμένα, το npm θα γίνει λήψη σύμφωνα με τις πληροφορίες έκδοσης που περιγράφονται στο αρχείο κλειδώματος.
Αναφέρεται επίσης ότι κατά την επανάληψη του npm i, το npm θα αγνοήσει τις πληροφορίες κλειδώματος και θα κατεβάσει τη μονάδα ενημέρωσης σύμφωνα με τις πληροφορίες έκδοσης Semantic versioning του πακέτου στο package.json (το κλείδωμα φαίνεται να είναι άχρηστο).
**Σύμφωνα με τις πληροφορίες, οι κανόνες του npm i έχουν αλλάξει τρεις φορές από την κυκλοφορία του npm 5.0. **
1. Έκδοση npm 5.0.x, ανεξάρτητα από το πώς αλλάζει η package.json, το npm i θα ληφθεί σύμφωνα με το αρχείο κλειδώματος
package-lock.json αρχείο δεν ενημερώθηκε μετά package.json αλλαγή του αρχείου · Τεύχος #16866 · npm/npm https://github.com/npm/npm/issues/16866 Αυτό το θέμα παραπονιέται για αυτό το πρόβλημα, προφανώς άλλαξα το package.json χειροκίνητα, γιατί δεν μου δίνεις πακέτο αναβάθμισης! Και μετά οδηγεί στο θέμα της 5.1.0...
2. Μετά την έκδοση 5.1.0, η εγκατάσταση npm θα αγνοήσει το αρχείο κλειδώματος για λήψη του πιο πρόσφατου npm
Τότε κάποιος έθεσε αυτό το ζήτημα γιατί αγνοείται το κλείδωμα πακέτου; · Τεύχος #17979 · npm/npm https://github.com/npm/npm/issues/17979 Η καταγγελία τελικά εξελίχθηκε στους κανόνες μετά την έκδοση 5.4.2.
3. Μετά την έκδοση 5.4.2, γιατί αγνοείται το κλείδωμα πακέτου; · Τεύχος #17979 · npm/npm https://github.com/npm/npm/issues/17979
Σε γενικές γραμμές, εάν το package.json αλλάξει και το package.json είναι διαφορετικό από το αρχείο κλειδώματος, το npm θα κατεβάσει το πιο πρόσφατο πακέτο σύμφωνα με τον αριθμό έκδοσης και τη σημασιολογική σημασία του πακέτου κατά την εκτέλεση του 'npm i' και θα το ενημερώσει για κλείδωμα.
Εάν και τα δύο βρίσκονται στην ίδια κατάσταση, τότε εκτελώντας npm θα κατεβάσω σύμφωνα με το κλείδωμα, ανεξάρτητα από το αν η πραγματική έκδοση του πακέτου είναι νέα ή όχι.
|