Apakah saya melakukan paket-lock.json file yang dibuat oleh npm 5?
npm 5 dirilis hari ini dan salah satu fitur baru termasuk deterministic menginstal dengan penciptaan paket-lock.json
file.
File ini seharusnya disimpan di sumber kendali?
I'm asumsi itu's mirip dengan yarn.lock
dan komposer.lock
, yang keduanya seharusnya disimpan dalam kontrol sumber.
1165
10
Ya,
paket-lock.json
ini dimaksudkan untuk diperiksa ke kontrol sumber. Jika anda're menggunakan npm 5, anda mungkin melihat ini pada baris perintah:menciptakan lockfile sebagai paket-lock.json. Anda harus melakukan ini file.
Menurutnpm bantuan paket-lock.json
:Ya, itu's dimaksudkan untuk diperiksa. Saya ingin menunjukkan bahwa hal itu mendapat sendiri yang unik komit. Kami menemukan bahwa hal itu menambah banyak suara untuk kami diffs.
Ya, praktek terbaik adalah untuk check-in (YA, CHECK-IN)
Saya setuju bahwa itu akan menyebabkan banyak kebisingan atau konflik ketika melihat diff. Tapi manfaat adalah:
^1.2.3
dalampaket.json
, tapi bagaimana u dapat memastikan setiap waktunpm install
akan mengambil versi yang sama di dev anda dan mesin dalam membangun server, terutama yang tidak langsung paket ketergantungan? Nah,paket-lock.json
akan memastikan bahwa. (Dengan bantuannpm ci
yang menginstal paket-paket berdasarkan mengunci file)npm audit memperbaiki
(saya pikir audit fitur dari npm versi 6).Saya don't melakukan file ini dalam proyek-proyek saya. Apa's the point ?
Meskipun itu's benar bahwa saya tidak pernah menggunakan ^ di paket saya.json untuk libs karena saya punya pengalaman buruk dengan itu.
Untuk orang-orang mengeluh tentang kebisingan ketika melakukan git diff:
Apa yang saya lakukan adalah menggunakan alias:
Untuk mengabaikan paket-lock.json di diffs untuk seluruh repositori (semua orang menggunakan ini), anda dapat menambahkan ini ke
.gitattributes
:Hal ini akan mengakibatkan diffs yang menunjukkan "file Biner a/paket-lock.json dan b/paket-lock.json berbeda setiap kali paket mengunci file yang diubah. Selain itu, beberapa Git jasa (terutama GitLab, tapi tidak GitHub) juga akan mengecualikan file-file ini (tidak lebih 10k garis berubah!) dari diffs ketika melihat secara online ketika melakukan hal ini.
Ya, anda HARUS:
paket-lock.json
.npm ci
bukannpm install
ketika membangun aplikasi anda pada CI dan pengembangan lokal anda, mesinThe
npm ci
alur kerja membutuhkan keberadaanpaket-lock.json
.Besar kelemahan dari
npm install
perintah adalah perilaku tak terduga yang mungkin bermutasipaket-lock.json
, sedangkannpm ci
hanya menggunakan versi yang ditentukan dalam lockfile dan menghasilkan kesalahanpaket-lock.json
danpaket.json
yang keluar dari sinkronisasipaket-lock.json
hilang.Oleh karena itu, menjalankan
npm install
lokal, esp. di tim yang lebih besar dengan beberapa pengembang, dapat menyebabkan banyak konflik dalampaket-lock.json
dan pengembang untuk memutuskan untuk benar-benar menghapuspaket-lock.json
sebagai gantinya.Belum ada yang kuat use-case untuk mampu percaya bahwa proyek's dependensi mengatasi repeatably dalam cara yang dapat diandalkan di mesin yang berbeda.
Dari
paket-lock.json
anda mendapatkan apa yang: a diketahui-untuk-pekerjaan negara.Di masa lalu, aku punya proyek tanpa
paket-lock.json
/npm-shrinkwrap.json
/benang.lock
file-file yang membangun akan gagal satu hari karena random ketergantungan punya melanggar update.Itu masalah yang sulit untuk menyelesaikan karena kadang-kadang anda harus menebak apa kerja terakhir versi.
Jika anda ingin menambahkan dependensi baru, anda masih menjalankan
npm install {ketergantungan}
. Jika anda ingin meng-upgrade, menggunakannpm update {ketergantungan}
ataunpm install ${dependendency}@{version}
dan melakukan perubahanpaket-lock.json
.Jika upgrade gagal, anda dapat kembali ke terakhir yang diketahui bekerja
paket-lock.json
.Untuk quote npm doc:
Dan dalam hal perbedaan antara
npm ci
vsnpm install
:Catatan: saya memposting jawaban serupa di sini
Ya, anda dapat melakukan file ini. Dari npm's resmi docs:
Menonaktifkan paket-lock.json secara global
ketik perintah berikut di terminal anda:
ini benar-benar bekerja untuk saya seperti sihir
Ya, itu's praktek standar untuk melakukan paket-lock.json
Alasan utama untuk melakukan paket-lock.json adalah bahwa setiap orang dalam proyek ini adalah pada paket yang sama versi.
Kelebihan:-
npm install
Cons:-
Saya menggunakan npm adalah untuk menghasilkan minified/uglified css/js dan untuk menghasilkan javascript yang dibutuhkan dalam halaman yang disajikan oleh sebuah aplikasi django. Di aplikasi saya, Javascript berjalan di sisi halaman untuk membuat animasi, beberapa kali melakukan panggilan ajax, bekerja dalam VUE kerangka dan/atau bekerja dengan css. Jika paket-lock.json memiliki beberapa override kontrol atas apa yang ada dalam paket.json, maka mungkin perlu bahwa ada salah satu versi dari berkas ini. Dalam pengalaman saya itu tidak berpengaruh apa yang diinstal oleh npm install, atau jika tidak, Itu tidak untuk saat ini terpengaruh aplikasi saya untuk menyebarkan pengetahuan saya. Saya don't menggunakan mongodb atau aplikasi lain seperti yang secara tradisional thin client.
Aku menghapus paket-lock.json dari repo karena npm install menghasilkan file ini, dan npm install adalah bagian dari menyebarkan proses pada masing-masing server yang menjalankan aplikasi. Versi kontrol dari node dan npm yang dilakukan secara manual pada masing-masing server, tapi saya berhati-hati bahwa mereka adalah sama.
Ketika
npm install
dijalankan pada server, perubahan paket-lock.json, dan jika ada perubahan ke file yang direkam oleh repo di server, selanjutnya menyebarkan TIDAK akan memungkinkan anda untuk menarik perubahan baru dari negara asal. Yang anda dapat't menyebarkan karena tarikan akan menimpa perubahan yang telah dibuat untuk paket-lock.json.Anda dapat't bahkan menimpa lokal menghasilkan paket-lock.json dengan apa yang ada di repo (reset hard asal master), sebagai npm akan mengeluh ketika pernah anda mengeluarkan perintah jika paket-lock.json tidak mencerminkan apa yang ada di node_modules karena npm install, sehingga melanggar menyebarkan. Sekarang jika hal ini mengindikasikan bahwa versi yang sedikit berbeda telah terinstal di node_modules, sekali lagi bahwa tidak pernah menyebabkan masalah-masalah saya.
Jika node_modules tidak di repo (dan tidak boleh), maka paket-lock.json harus diabaikan.
Jika saya kehilangan sesuatu, tolong koreksi saya di komentar, tapi intinya bahwa versi ini diambil dari file ini tidak masuk akal. File paket.json memiliki nomor versi di atasnya, dan saya asumsikan file ini merupakan salah satu yang digunakan untuk membangun paket ketika npm install terjadi, seperti ketika aku menghapusnya, npm install mengeluh sebagai berikut:
dan gagal membangun, namun ketika menginstal node_modules atau menerapkan npm untuk membangun js/css, tidak ada keluhan jika saya menghapus paket-lock.json