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 tę 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.