Wraz z wydaniem npm @ 5 , będzie teraz pisać, package-lock.json
chyba że npm-shrinkwrap.json
już istnieje.
Zainstalowałem npm @ 5 globalnie przez:
npm install npm@5 -g
A teraz, jeśli npm-shrinkwrap.json
zostanie znaleziony podczas:
npm install
zostanie wydrukowane ostrzeżenie:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
Więc moim wnioskiem jest to, że powinienem wymienić folię na plik package-lock.json
.
Ale dlaczego istnieje nowy format? Co może package-lock.json
zrobić, czego npm-shrinkwrap.json
nie mogą?
źródło
package-lock.json
(co nie jest możliwe), a następnie, jeśli były do zainstalowania tej biblioteki jako zależność jakiegoś innego pakietu, że bibliotekipackage-lock.json
będą ignorowane przez KMP. Jeśli jednak biblioteka publikujenpm-shrinkwrap.json
i instalujesz bibliotekę jako zależność, wówczas jako dodatkowe zależności zainstalujesz również dokładne wersje wszystkich zależności określonych w bibliotecenpm-shrinkwrap.json
.npm ci
istnieje, aby zapewnić instalacjępackage-lock.json
jako tylko do odczytu. (npm install
mutujepackage-lock.json
powodujące zamieszanie i potencjalne błędy i nie wykorzystuje tego samegopackage-lock.json
)npm ci
uchwytynpm-shrinkwrap.json
ipackage-lock.json
- jakie ma to znaczenie w przypadku tego pytania o różnicę między dwoma plikami? Ponadto po przeczytaniu dookoła: myślę, że „npm install
... nie korzysta zpackage-lock.json
” było fałszywe od npm 5.4 - myślę, żenpm install
teraz szanuje twoje,package-lock
chyba że jest całkowicie niezgodne z twoimpackage.json
, w takim przypadku to drugie będzie miało pierwszeństwo. (Ale przez jakiś czas byłem poza światem JavaScript - czy coś mi brakuje?)Wyjaśnienie od programisty NPM :
źródło
npm-shrinkwrap
dotyczy dokładnych modułów node_modules .... Zakładam, żepackage-lock.json
blokowanie jest mniejsze niż dokładne? A jeśli tak, to co nie blokuje, a conpm-shrinkwrap
blokuje?npm-shrinkwrap
. Jak zauważyłem w mojej odpowiedzi, konwersja apackage-lock.json
do annpm-shrinkwrap.json
jest dosłownie wykonywana poprzez zmianę nazwy pliku; oni są „ten sam kod”.Myślę, że chodziło o to, aby - zapisywanie i powłoka były wykonywane domyślnie, ale unikały potencjalnych problemów z powłoką, która miałaby miejsce tam, gdzie nie byłaby potrzebna. Więc po prostu nadali mu nową nazwę pliku, aby uniknąć konfliktów. Ktoś z npm wyjaśnił to dokładniej tutaj:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
Odpowiednia wycena:
źródło