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?
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?
Jawaban:
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
dan package-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.
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 menghasilkan package-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 berkomitmen yarn.lock
, Anda membangun dukungan untuk orang yang menginstal dependensi dengan Yarn.
Apakah Anda memilih untuk berkomitmen yarn.lock
atau package-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 memastikan yarn.lock
dan package-lock.json
selalu tetap sinkron.
Update: Benang sekarang telah memperkenalkan sebuah import
perintah yang akan menghasilkan yarn.lock
file dari package-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.
yarn import
diperkenalkan pada 2018. yarnpkg.com/blog/2018/06/04/yarn-import-package-lock
Anda 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.
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
ke package-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 antara yarn.lock
dan package-lock.json
.
Saya sedang memikirkan pertanyaan yang sama. Ini pemikiran saya, semoga membantu:
The dokumentasi NPM paket-lock.json mengatakan berikut:
package-lock.json secara otomatis dibuat untuk setiap operasi di mana npm mengubah pohon node_modules, atau package.json. Ini menjelaskan pohon persis yang dibuat, sehingga penginstalan selanjutnya dapat menghasilkan pohon yang identik, terlepas dari pembaruan dependensi menengah.
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 Anda package.json
. Ketika orang lain berjalan npm install
pada proyek Anda, adalah mungkin bahwa versi 1.2.4
dari A
telah dirilis. Karena ini adalah versi terbaru yang tersedia yang memenuhi kisaran semver yang ditentukan di Anda package.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:
Satu detail penting tentang package-lock.json adalah bahwa ia tidak dapat dipublikasikan, dan akan diabaikan jika ditemukan di tempat lain selain paket tingkat atas.
Jadi, meskipun Anda mengkomitnya, saat pengguna menginstal modul Anda, dia tidak akan mendapatkan package-lock.json
file, tetapi hanya package.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.
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 berkomitmen Gemfile.lock
(file kunci Ruby) dan kapan harus tidak. Setidaknya baca bagian tl; dr.
.gitignore
, dan biasanya berada di root proyek.
Kamu benar! Mengizinkan keduanya npm
dan yarn
digunakan akan menyebabkan masalah. Simak artikel ini .
Saat ini, kami berencana menambahkan beberapa peringatan kepada pengguna yang menggunakan keduanya
yarn
dannpm
di repositori yang sama untuk menginstal paket.Kami sangat menyarankan Anda untuk menghapus
package-lock.json
file jika Anda memutuskan untuk menggunakan benang untuk menghindari kebingungan di masa depan dan kemungkinan masalah konsistensi.
Anda mungkin tidak menginginkan keduanya npm
dan yarn
sebagai manajer paket Anda.
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 menggunakan package-json.lock
sebagai gantinya, saat ini akan menjadi lebih sederhana 😛
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.