Czy istnieje sposób, aby zmusić npm do wygenerowania package-lock.json?

132

Usunąłem go przypadkowo i od tego czasu wprowadziłem wiele zmian package.json. npm installLub npm updatenie generują package-lock.jsonjuż. Próbowałem wyczyścić pamięć podręczną npm i pamięć podręczną nvm, ale wydaje się, że nic nie działa. Wypróbowałem to na kilku wersjach Node.js (6.10.3 Node.js - 3.10.10 npm to jest to, na czym chciałbym, aby działał) i nie działa na żadnej.

Czy istnieje sposób, aby zmusić npm do wygenerowania package-lock.jsonpliku?

Duże pieniądze
źródło
2
Myślę, że pakiet-lock.json jest specyficzny dla npm 5
Brett Merrifield
3
package-lock.jsongeneruje się automatycznie w npm począwszy od v5, w poprzednich wersjach plik blokady miał nazwę npm-shrinkwrap.jsoni został wygenerowany ręcznie za pomocą npm shrinkwrappolecenia.
alexmac
@BrettMerrifield Dziękuję! To był mój problem. Zaktualizowałem do node 8.6.0iz nim npm 5.3.0i zadziałało.
Big Money
Sprawdź swoje .gitignore. Przypadkowo package-lock.jsonw .gitignorejakiś sposób to zrobiłem, a ponieważ package-lock.jsonsię w git statusnim nie pojawiałem, wyrzucało mnie to.
Joshua Pinter

Odpowiedzi:

156

Domyślnie package-lock.jsonjest aktualizowany po każdym uruchomieniu npm install. Jednak to może być wyłączone przez ustawienie globalnie package-lock=falsew ~/.npmrc.

Gdy package-lock=falseustawienie globalne jest aktywne, nadal możesz wymusić package-lock.jsonaktualizację pliku projektu, uruchamiając:

npm install --package-lock

To polecenie jest jedynym pewnym sposobem wymuszenia package-lock.jsonaktualizacji.

Mathias Bynens
źródło
@RonNewcomb Czy możesz podać więcej informacji? Co masz na myśli mówiąc „to nie działa”? Której wersji NPM używasz?
Mathias Bynens
npm wersja 3.10.10 Węzeł 6.10.3 Wydaje się, że polecenie, które podałeś, nie działa? Nic się nie dzieje. Żadnego błędu, żadnej zmiany pliku, nic.
Ron Newcomb,
2
Jeśli używasz npm v3 w swoim projekcie, nie będziesz mieć package-lock.json. package-lock.jsonjest obsługiwany tylko przez npm v5 +.
Mathias Bynens
8
npm v 6.4.1 i to nie tworzy package-lock.json
mjuopperi
1
U mnie działa, w 6.4.1. Ustawienie wartości false również zapobiega jego tworzeniu.
Kevin B
94

W npm 6.x możesz użyć

npm i --package-lock-only

Według https://docs.npmjs.com/cli/install.html

Argument --package-lock-only zaktualizuje tylko plik package-lock.json, zamiast sprawdzać node_modules i pobierać zależności.

Janusz Przybylski
źródło
12
To jest teraz poprawna odpowiedź, inne są stare i nie będą działać.
Vaibhav Singh
Masz jakąś wskazówkę, jak wygenerować pakiet-lock.json bez devDependencies? Potrzebuję tego do czystych instalacji produkcyjnych. npm i --package-lock-only --only=productionnie wydaje się działać.
Robert
Nie sądzę, aby można było generować package-lock.jsontylko dla zależności produkcyjnych. Ale jeśli uruchomisz npm i --only=production, powinieneś zainstalować tylko zależności produkcyjne. Twój proces kompilacji może wyglądać tak: zainstaluj wszystkie zależności, skompiluj aplikację, usuń node_modulesi zainstaluj tylko zależności produkcyjne.
Janusz Przybylski
14

Odpowiadają na to komentarze; package-lock.jsonto funkcja dostępna w npmwersji 5 i nowszych. npm shrinkwraptak tworzysz plik blokujący we wszystkich wersjach npm.

LJHarb
źródło
1
należy jednak pamiętać, że package-lock.jsonpliki s nie są dokładnie tym samym, co pliki powłoki.
strugee
7
w npm 5+ są w rzeczywistości dokładnie takie same, w każdym szczególe, z jednym wyjątkiem: npm-shrinkwrap.jsonzostaną opublikowane w rejestrze, a package-lock.jsonnie.
LJHarb
6
Tak. To jednak dość ważna różnica, dlatego zostawiłem komentarz.
strugee
1
npm shrinkwrapgeneruje npm-shrinkwrap.json, ale jak generujesz package-lock.json?
Vic
5
Jest to automatyczne w npm 5+ lub możesz wymusić to w 5+ z--package-lock
LJHarb
1

Jak wyjaśniło kilka odpowiedzi, powinieneś uruchomić:

npm i

ALE jeśli to nie rozwiąże ...

Sprawdź wersję swojego npmpliku wykonywalnego. (Dla mnie był to 3.xx, który nie używa package-lock.json(w ogóle))

npm -v

Powinien mieć co najmniej 5.xx (który wprowadził plik package-lock.json).

Aby zaktualizować npm na Lunix, postępuj zgodnie z tymi instrukcjami.

Aby uzyskać więcej informacji na temat plików pakietu, przeczytaj historię na medium .

betontalpfa
źródło
0

Jeśli Twoja wersja npm jest niższa niż wersja 5, zainstaluj wyższą wersję, aby uzyskać automatyczne generowanie pliku package-lock.json .

Przykład: Uaktualnij obecny npm do wersji 6.14.0

npm i -g npm@6.14.0

Możesz wyświetlić najnowszą listę wersji npm według

npm view npm versions
SridharKritha
źródło
-3

Package-lock.json jest generowany ponownie przy każdym uruchomieniu npm i.

Mcanic
źródło
13
Dotyczy to tylko niektórych wersji nodei npm. Myślę, że to npm> = 5.0i node> = 7.0, ale nie jestem tego w 100% pewien. node 6.11.3Dla mnie to nie działa .
Thor84no
2
Również nie jest prawdziwe, jeśli blokada pakietu jest ustawiona na false w konfiguracji npm. Użyj 'npm config list', aby sprawdzić
Damo
Package-lock.json jest generowany automatycznie dla wszystkich operacji, w których npm modyfikuje drzewo node_modules lub package.json. Acorrding to docs.npmjs.com/files/package-lock.json . Ale wersja npm nie została określona.
NanoNova