Czy potrzebuję zarówno package-lock.json, jak i package.json?

149

Po zaktualizowaniu mojego NPM do najnowszej wersji (z 3.X do 5.2.0) i uruchomieniu npm installna istniejącym projekcie, otrzymuję automatycznie utworzony package-lock.jsonplik.

Mogę powiedzieć, że package-lock.jsondaje mi dokładne drzewo zależności, w przeciwieństwie do package.json.

Na podstawie samych tych informacji wydaje się, że package.jsonsą one zbędne i nie są już potrzebne.

Czy oba są niezbędne do działania NPM?
Czy użycie samego package-lock.jsonpliku jest bezpieczne lub możliwe ?

Dokumentacja na package-lock.json ( doc1 , doc2 ) nic o tym nie wspomina.

Edycja :

Po dłuższym przemyśleniu doszedłem do wniosku, że jeśli ktoś chciałby używać twojego projektu ze starszą wersją NPM (przed 5.x), to nadal instalowałby wszystkie zależności, ale z mniej dokładnymi wersjami (wersje łatek)

Omri Luzon
źródło
3
link
Lakshmipriya Mukundan

Odpowiedzi:

103

Czy potrzebujesz obu package-lock.jsoni package.json? Nie .

Czy potrzebujesz package.json? Tak .

Czy możesz mieć projekt tylko z package-lock.json? Nie .

package.jsonJest używany przez ponad zależnościami - jak definiowanie właściwości projektu, opis, autor i licencja informacyjnych, skrypty, itp package-lock.jsonsą wykorzystywane wyłącznie do zamka zależności do liczby określonej wersji.

Markus Stefanko
źródło
19

package-lock.json: rejestruje dokładną wersję każdego zainstalowanego pakietu, co pozwala na ich ponowne zainstalowanie. Przyszłe instalacje będą mogły zbudować identyczne drzewo zależności.

package.json: rejestruje minimalną wersję, której potrzebuje aplikacja. Jeśli zaktualizujesz wersje określonego pakietu, zmiana nie zostanie tutaj odzwierciedlona.

Narendar Reddy M
źródło
1
Jeśli powyższe jest prawdą i package.jsonzapisuje minimalną wersję wymaganą przez aplikację, a package-lock.json zapisuje dokładną wersję każdego zainstalowanego pakietu, to mam dziwną sytuację, w której moduł jest ustawiony na wersję 0.112.1 w pakiecie .json i 0.110.0 w pakiecie-lock.json ...
Jean-François Beauchamp
6

Jeśli twoje pytanie dotyczy tego, czy plik blokady powinien być przypisany do kontroli źródła - powinien. W pewnych okolicznościach zostanie zignorowany.

Zauważyłem, że wzdęcia są żądaniami ściągnięcia i historią zatwierdzeń, więc jeśli zauważysz, że to się zmienia, zrób dla tego osobne zatwierdzenie.

Stanley Kirdey
źródło
1
Nie, nie pytałem o zmiany w kontroli źródła. Tylko jeśli NPM potrzebuje ich obu jednocześnie do pracy. package-lock.jsonwydaje się być bardziej szczegółową wersją programu package.json, więc jest bezpieczne lub możliwe użycie tylko pliku blokady.
Omri Luzon
Widzę, zostawiłem w swoich projektach package.json, głównie po to, żeby mieć miejsce na skrypty npm.
Stanley Kirdey
1
Obecnie pojawia się osobne pytanie, czy poddać się package-lock.jsonkontroli wersji.
Adrian W
0

Dokładniejsze i szczegółowe wyjaśnienie powodu utrzymywania pliku package-lock.json można znaleźć tutaj

Vivek Goel
źródło