Το npm 5 κυκλοφόρησε σήμερα και ένα από τα νέα χαρακτηριστικά περιλαμβάνει ντετερμινιστικές εγκαταστάσεις με τη δημιουργία ενός αρχείου package-lock.json
.
Υποτίθεται ότι αυτό το αρχείο πρέπει να διατηρείται στον έλεγχο του πηγαίου κώδικα;
Υποθέτω ότι είναι παρόμοιο με το yarn.lock
και το composer.lock
, τα οποία υποτίθεται ότι διατηρούνται στον έλεγχο του πηγαίου κώδικα.
Ναι, το αρχείο package-lock.json
προορίζεται να ελεγχθεί στον έλεγχο πηγής. Αν χρησιμοποιείτε το npm 5, μπορεί να δείτε αυτό στη γραμμή εντολών: Δημιουργήθηκε ένα αρχείο κλειδώματος ως package-lock.json. Θα πρέπει να δεσμεύσετε αυτό το αρχείο.
Σύμφωνα με το npm help package-lock.json
:
Το
package-lock.json
δημιουργείται αυτόματα για οποιεσδήποτε λειτουργίες όπου το npm τροποποιεί είτε το δέντροnode_modules
, είτε τοpackage.json
. Περιγράφει το ακριβές δέντρο που δημιουργήθηκε, έτσι ώστε οι επόμενες εγκαταστάσεις να είναι σε θέση να παράγουν πανομοιότυπα δέντρα, ανεξάρτητα από τις ενδιάμεσες ενημερώσεις εξαρτήσεων.
Αυτό το αρχείο προορίζεται να δεσμευτεί σε αποθετήρια πηγής, και χρησιμεύει διάφορους σκοπούς:
- Περιγράφει μια ενιαία αναπαράσταση ενός δέντρου εξαρτήσεων, έτσι ώστε οι συνεργάτες, οι αναπτύξεις και η συνεχής ολοκλήρωση να εγγυώνται ότι εγκαθιστούν ακριβώς τις ίδιες εξαρτήσεις.
- Να παρέχει στους χρήστες τη δυνατότητα να "ταξιδεύουν στο χρόνο" σε προηγούμενες καταστάσεις του
node_modules
χωρίς να χρειάζεται να δεσμεύσουν τον ίδιο τον κατάλογο.
- Διευκόλυνση της μεγαλύτερης ορατότητας των αλλαγών στο δέντρο μέσω αναγνώσιμων διαφορών ελέγχου πηγής.
- Και να βελτιστοποιήσει τη διαδικασία εγκατάστασης επιτρέποντας στο npm να παραλείπει επαναλαμβανόμενες αναλύσεις μεταδεδομένων για πακέτα που έχουν εγκατασταθεί προηγουμένως.
Μια βασική λεπτομέρεια σχετικά με το
package-lock.json
είναι ότι δεν μπορεί να δημοσιευτεί, και είναι θα αγνοηθεί εάν βρεθεί σε οποιοδήποτε άλλο μέρος εκτός από το toplevel πακέτο. Μοιράζεται μια μορφή με το npm-shrinkwrap.json(5), το οποίο είναι ουσιαστικά το ίδιο αρχείο, αλλά επιτρέπει τη δημοσίευση. Αυτό δεν συνιστάται, εκτός αν αναπτύσσετε ένα εργαλείο CLI ή άλλως χρησιμοποιείτε τη διαδικασία δημοσίευσης για την παραγωγή πακέτων παραγωγής.
Εάν τόσο το
package-lock.json
όσο και τοnpm-shrinkwrap.json
είναι παρόντα στη ρίζα του ενός πακέτου, τοpackage-lock.json
θα αγνοηθεί πλήρως.
Ναι, μπορείτε να δεσμεύσετε αυτό το αρχείο. Από τα npm's official docs:
Το
package-lock.json
δημιουργείται αυτόματα για οποιεσδήποτε λειτουργίες όπου τοnpm
τροποποιεί είτε το δέντροnode_modules
, είτε τοpackage.json
. Περιγράφει το ακριβές δέντρο που δημιουργήθηκε, έτσι ώστε οι επόμενες εγκαταστάσεις να είναι σε θέση να δημιουργήσουν πανομοιότυπα δέντρα, ανεξάρτητα από τις ενδιάμεσες ενημερώσεις εξαρτήσεων. >, Αυτό το αρχείο προορίζεται για δέσμευση σε αποθετήρια πηγής[.]