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?


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.


@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.


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.


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 .


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

-3

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.