Kami menggunakan benang untuk semua instalasi pkg deterministik kami tetapi tidak mencegah pengguna menggunakan npm - Saya menduga memiliki kedua file ini akan menyebabkan masalah. Haruskah ada yang ditambahkan ke direktori .gitignore Anda?
118
Jawaban:
Selalu lakukan file kunci ketergantungan secara umum
Seperti yang dibahas di tempat lain, file kunci ketergantungan, yang didukung oleh banyak sistem manajemen paket (misalnya: komposer dan bundler ), harus terikat pada basis kode dalam proyek akhir rantai - sehingga setiap individu yang mencoba menjalankan proyek itu melakukan jadi dengan persis set dependensi yang diuji.
Tidak jelas apakah file kunci harus selalu dimasukkan ke dalam paket yang dimaksudkan untuk disertakan dalam proyek lain (di mana dependensi yang lebih longgar diinginkan). Namun, Yarn dan NPM (seperti yang dicakup oleh @Cyrille) secara cerdas mengabaikan
yarn.lock
danpackage-lock.json
masing - masing jika diperlukan, sehingga aman untuk selalu melakukan lockfile ini.Jadi, Anda harus selalu melakukan setidaknya satu
yarn.lock
ataupackage-lock.json
bergantung pada pengelola paket yang Anda gunakan.Haruskah Anda menggunakan yarn.lock dan package-lock.json?
Saat ini kami memiliki dua sistem manajemen paket yang berbeda, yang keduanya menginstal set yang sama dependensi dari
package.json
, tetapi yang menghasilkan dan dibaca dari dua lockfiles yang berbeda. NPM 5 menghasilkanpackage-lock.json
, sedangkan Yarn menghasilkanyarn.lock
.Jika Anda berkomitmen
package-lock.json
maka Anda membangun dukungan untuk orang yang menginstal dependensi Anda dengan NPM 5. Jika Anda berkomitmenyarn.lock
, Anda membangun dukungan untuk orang yang menginstal dependensi dengan Yarn.Apakah Anda memilih untuk berkomitmen
yarn.lock
ataupackage-lock.json
keduanya bergantung pada apakah mereka yang mengembangkan proyek Anda hanya menggunakan Yarn atau NPM 5 atau keduanya. Jika proyek Anda open-source, hal yang paling ramah komunitas untuk dilakukan mungkin adalah berkomitmen pada keduanya dan memiliki proses otomatis untuk memastikanyarn.lock
danpackage-lock.json
selalu tetap sinkron.Update: Benang sekarang telah memperkenalkan sebuah
import
perintah yang akan menghasilkanyarn.lock
file daripackage-lock.json
berkas. Ini bisa berguna untuk menjaga kedua file tetap sinkron. (Terima kasih @weish)Masalah ini dibahas panjang lebar pada proyek Benang di:
Keduanya sekarang sudah ditutup.
sumber
yarn import
diperkenalkan pada 2018. yarnpkg.com/blog/2018/06/04/yarn-import-package-lockAnda harus mengkomit 1 file kunci pohon ketergantungan, tetapi Anda tidak boleh mengkomit keduanya. Ini juga membutuhkan standarisasi pada benang atau npm (tidak keduanya) untuk membangun + mengembangkan proyek.
Berikut artikel benang tentang mengapa yarn.lock harus dilakukan, jika Anda melakukan standarisasi pada benang.
Jika Anda memasukkan kedua
yarn.lock
file tersebut, DANpackage-lock.json
file file tersebut ada banyak cara agar 2 file dapat menyediakan pohon ketergantungan yang berbeda (bahkan jika algoritma resolusi pohon benang dan npm identik), dan tidak sepele untuk memastikan bahwa mereka menyediakan jawaban yang sama. Karena tidak sepele, tidak mungkin pohon dependensi yang sama akan dipertahankan di kedua file, dan Anda tidak menginginkan perilaku yang berbeda bergantung pada apakah build dilakukan menggunakan benang atau npm.Jika dan ketika benang beralih dari menggunakan
yarn.lock
kepackage-lock.json
( masalah di sini ), maka pilihan file kunci untuk komit menjadi mudah, dan kita tidak perlu lagi khawatir tentang benang dan npm yang menghasilkan build yang berbeda. Berdasarkan entri blog ini , ini adalah perubahan yang tidak semestinya kami harapkan segera (entri blog juga menjelaskan perbedaan antarayarn.lock
danpackage-lock.json
.sumber
Saya sedang memikirkan pertanyaan yang sama. Ini pemikiran saya, semoga membantu:
The dokumentasi NPM paket-lock.json mengatakan berikut:
Ini bagus karena mencegah efek "bekerja pada mesin saya".
Tanpa file ini, jika Anda
npm install --save A
, NPM akan menambah"A": "^1.2.3"
ke Andapackage.json
. Ketika orang lain berjalannpm install
pada proyek Anda, adalah mungkin bahwa versi1.2.4
dariA
telah dirilis. Karena ini adalah versi terbaru yang tersedia yang memenuhi kisaran semver yang ditentukan di Andapackage.json
, versi ini akan diinstal. Tetapi bagaimana jika ada bug baru yang diperkenalkan pada versi ini? Orang ini akan mengalami masalah yang tidak dapat Anda tiru karena Anda memiliki versi sebelumnya, tanpa bug.Dengan memperbaiki status
node_modules
direktori Anda ,package-lock.json
file mencegah masalah ini karena setiap orang akan memiliki versi yang sama dari setiap paket.Tetapi, bagaimana jika Anda menulis dan menerbitkan modul npm? Dokumentasinya mengatakan sebagai berikut:
Jadi, meskipun Anda mengkomitnya, saat pengguna menginstal modul Anda, dia tidak akan mendapatkan
package-lock.json
file, tetapi hanyapackage.json
file. Jadi npm akan menginstal versi terbaru yang memenuhi rentang semver dari semua dependensi Anda. Ini berarti bahwa Anda selalu ingin menguji modul Anda dengan versi-versi ini dari dependensi Anda, dan bukan yang Anda instal ketika Anda mulai menulis modul Anda. Jadi, dalam hal itu,package-lock.json
jelas tidak berguna. Terlebih lagi, itu bisa mengganggu.sumber
Inilah aturan praktis saya: jika Anda mengerjakan sebuah aplikasi, lakukan file kunci. Jika Anda mengelola pustaka, tambahkan ke daftar yang diabaikan. Apa pun itu, Anda harus menggunakan rentang semver yang akurat dalam
package.json
. Yehuda Katz ( cache ) menulis penjelasan yang bagus tentang kapan harus berkomitmenGemfile.lock
(file kunci Ruby) dan kapan harus tidak. Setidaknya baca bagian tl; dr.sumber
.gitignore
, dan biasanya berada di root proyek.Kamu benar! Mengizinkan keduanya
npm
danyarn
digunakan akan menyebabkan masalah. Simak artikel ini .Anda mungkin tidak menginginkan keduanya
npm
danyarn
sebagai manajer paket Anda.sumber
File-file ini dikelola oleh perkakas Anda, jadi – dengan asumsi penggunaan benang akan secara efektif memperbarui
package-lock.json
–Saya kira melakukan kedua file akan bekerja dengan baik.Saya pikir yang paling penting bagi pengguna Anda
package-lock.json
(I, misalnya, tidak menggunakan benang) sehingga satu ini memiliki harus dilakukan.Untuk
yarn.lock
itu, tergantung apakah Anda bekerja sendiri atau dalam tim. Jika solo, maka saya kira tidak perlu melakukan itu. Jika Anda (berencana untuk) bekerja dalam sebuah tim, maka Anda mungkin harus melakukannya, setidaknya sampai benang mendukungnya 🙂Saya kira tim benang pada akhirnya akan berhenti menggunakan
yarn.lock
dan menggunakanpackage-json.lock
sebagai gantinya, saat ini akan menjadi lebih sederhana 😛sumber
Tidak, menggunakan kedua file kunci secara bersamaan akan paling sering menyebabkan ketidakkonsistenan dalam pohon ketergantungan Anda, terutama saat berkolaborasi dalam sebuah tim. Mengabaikan satu kunci atau lainnya adalah solusi sederhana. Pastikan tim Anda mengerti dan setuju dengan perubahan ini.
sumber