Apakah saya membutuhkan package-lock.json dan package.json?

164

Setelah memperbarui NPM saya ke versi terbaru (dari 3.X ke 5.2.0) dan menjalankan npm installproyek yang ada, saya mendapatkan package-lock.jsonfile yang dibuat secara otomatis .

Saya tahu package-lock.jsonmemberi saya pohon ketergantungan yang tepat sebagai lawan package.json.

Dari info itu saja, sepertinya package.jsonsudah mubazir dan tidak dibutuhkan lagi.

Apakah keduanya diperlukan agar NPM bekerja?
Apakah aman atau mungkin hanya menggunakan package-lock.jsonfile tersebut?

Dokumen di package-lock.json ( doc1 , doc2 ) tidak menyebutkan apapun tentang itu.

Edit :

Setelah memikirkannya lagi, saya sampai pada kesimpulan bahwa jika seseorang ingin menggunakan proyek Anda dengan versi NPM yang lebih lama (sebelum 5.x), ia masih akan menginstal semua dependensi, tetapi dengan versi yang kurang akurat (versi patch)

Omri Luzon
sumber
3
tautan
Lakshmipriya Mukundan

Jawaban:

125

Apakah Anda membutuhkan keduanya package-lock.jsondan package.json? Tidak .

Apakah Anda membutuhkan package.json? Iya .

Bisakah Anda memiliki proyek hanya dengan package-lock.json? Tidak .

The package.jsondigunakan untuk lebih dari dependensi - seperti mendefinisikan sifat proyek, deskripsi, penulis & lisensi informasi, script, dll package-lock.jsonsemata-mata digunakan untuk dependensi kunci ke nomor versi tertentu.

Markus Stefanko
sumber
26

package-lock.json: mencatat versi persis dari setiap paket yang diinstal yang memungkinkan Anda untuk menginstalnya kembali. Penginstalan di masa mendatang akan dapat membangun pohon dependensi yang identik.

package.json: mencatat versi minimum yang Anda perlukan aplikasi. Jika Anda memperbarui versi dari paket tertentu, perubahan tidak akan terlihat di sini.

Narendar Reddy M
sumber
1
Jika hal di atas benar, dan package.jsonmencatat versi minimum yang dibutuhkan oleh aplikasi dan package-lock.json mencatat versi yang tepat dari setiap paket yang diinstal, maka saya mengalami situasi yang aneh di mana modul disetel pada versi 0.112.1 dalam paket .json dan 0.110.0 di package-lock.json ...
Jean-François Beauchamp
6

Jika pertanyaan Anda adalah apakah file kunci harus diserahkan ke kontrol sumber Anda - seharusnya. Ini akan diabaikan dalam keadaan tertentu.

Saya menemukan itu membengkak permintaan tarik dan melakukan sejarah, jadi jika Anda melihatnya berubah, lakukan komit terpisah untuk itu.

Stanley Kirdey
sumber
1
Tidak, saya tidak bertanya tentang komitmen pada kontrol sumber. Hanya jika NPM membutuhkan keduanya pada saat yang sama untuk bekerja. package-lock.jsonSepertinya versi yang lebih panjang package.json, jadi apakah aman atau mungkin menggunakan hanya file kunci.
Omri Luzon
Begitu, saya telah meninggalkan package.json dalam proyek saya, terutama untuk memiliki tempat untuk skrip npm.
Stanley Kirdey
1
Sekarang ada pertanyaan terpisah tentang apakah akan diletakkan di package-lock.jsonbawah kontrol versi.
Adrian W
1

Penjelasan yang lebih akurat dan rinci tentang alasan di balik menyimpan package-lock.json dapat ditemukan di sini

Vivek Goel
sumber