Dengan rilis npm @ 5 , sekarang akan menulis a package-lock.json
kecuali npm-shrinkwrap.json
sudah ada.
Saya menginstal npm @ 5 secara global melalui:
npm install npm@5 -g
Dan sekarang, jika a npm-shrinkwrap.json
ditemukan selama:
npm install
peringatan akan dicetak:
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!
Jadi take-away saya adalah saya harus mengganti shrinkwrap dengan package-lock.json
.
Namun mengapa ada format baru untuk itu? Apa yang bisa package-lock.json
dilakukan yang npm-shrinkwrap.json
tidak bisa?
sumber
package-lock.json
(yang tidak mungkin), maka jika Anda menginstal perpustakaan yang sebagai ketergantungan beberapa paket lain, ini perpustakaanpackage-lock.json
akan diabaikan oleh NPM. Namun, jika perpustakaan menerbitkannpm-shrinkwrap.json
, dan Anda menginstal perpustakaan sebagai dependensi, maka Anda juga akan menginstal sebagai dependensi sekunder versi yang tepat dari semua dependensi yang ditentukan dalam perpustakaannpm-shrinkwrap.json
.npm ci
ada untuk memastikan instalasipackage-lock.json
hanya-baca. (npm install
bermutasipackage-lock.json
menyebabkan kekacauan dan kemungkinan bug dan tidak memanfaatkanpackage-lock.json
per se.)npm ci
menanganinpm-shrinkwrap.json
danpackage-lock.json
- apa relevansinya dengan pertanyaan ini tentang perbedaan antara dua file? Juga, setelah membaca sekitar: Saya pikir bahwa "npm install
... tidak mengambil keuntungan daripackage-lock.json
" telah salah sejak npm 5.4 - Saya percayanpm install
sekarang menghormati Andapackage-lock
kecuali itu benar-benar tidak sesuai dengan Andapackage.json
, dalam hal ini yang terakhir akan diutamakan. (Tapi saya sudah keluar dari dunia JavaScript sebentar - apakah saya melewatkan sesuatu?)Penjelasan dari Pengembang NPM :
sumber
npm-shrinkwrap
untuk node_modules yang tepat .... Saya menganggappackage-lock.json
mengunci kurang dari tepat? Dan jika demikian, apa yang tidak mengunci yangnpm-shrinkwrap
mengunci?npm-shrinkwrap
. Seperti yang saya perhatikan dalam jawaban saya, mengonversikanpackage-lock.json
ke anpm-shrinkwrap.json
secara harfiah dilakukan dengan mengganti nama file; mereka adalah "kode yang sama".Saya pikir idenya adalah agar - save dan shrinkwrap terjadi secara default tetapi hindari masalah potensial dengan shrinkwrap yang terjadi di tempat yang tidak diinginkan. Jadi, mereka hanya memberinya nama file baru untuk menghindari konflik. Seseorang dari npm menjelaskannya lebih menyeluruh di sini:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
Kutipan yang relevan:
sumber