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.

Mengomentari pertanyaan (4)
Larutan

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. Menurut npm bantuan paket-lock.json:

paket-lock.json secara otomatis dihasilkan untuk setiap operasi di mana npm memodifikasi baik node_modules pohon, atau paket.json. Ini menggambarkan tepat pohon yang dihasilkan, seperti yang berikutnya menginstal mampu menghasilkan identik pohon, terlepas dari intermediate ketergantungan update.

file Ini dimaksudkan untuk berkomitmen menjadi sumber repositori, dan menyajikan berbagai keperluan:

  • Menjelaskan satu representasi dari ketergantungan pohon seperti yang rekan satu tim, penyebaran, dan integrasi berkesinambungan dijamin untuk menginstal persis sama dependensi.
  • Memberikan fasilitas bagi pengguna untuk "waktu-perjalanan" untuk negara sebelumnya node_modules tanpa harus melakukan direktori itu sendiri.
  • Untuk memudahkan visibilitas yang lebih besar dari pohon perubahan melalui dibaca kontrol sumber diffs.
  • Dan mengoptimalkan proses instalasi dengan memungkinkan npm untuk melewatkan diulang metadata resolusi yang sebelumnya terinstall.

salah Satu kunci detail tentang paket-lock.json adalah bahwa hal itu tidak dapat diterbitkan, dan itu akan diabaikan jika ditemukan di tempat lain selain puncak paket. Saham format dengan npm-shrinkwrap.json(5), yang pada dasarnya adalah file yang sama, tetapi memungkinkan publikasi. Hal ini tidak dianjurkan kecuali menggunakan alat atau CLI jika tidak menggunakan publikasi proses untuk menghasilkan produksi paket.

Jika kedua paket-lock.json dan npm-shrinkwrap.json yang hadir di root paket, paket-lock.json akan benar-benar diabaikan.

Komentar (23)

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.

Komentar (8)

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. jaminan yang sama persis versi dari setiap paket. Bagian ini adalah yang paling penting ketika membangun dalam lingkungan yang berbeda pada waktu yang berbeda. Anda dapat menggunakan ^1.2.3 dalam paket.json, tapi bagaimana u dapat memastikan setiap waktu npm 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 bantuan npm ci yang menginstal paket-paket berdasarkan mengunci file)
  2. hal ini meningkatkan proses instalasi.
  3. ini membantu dengan audit baru fitur npm audit memperbaiki (saya pikir audit fitur dari npm versi 6).
Komentar (5)

Saya don't melakukan file ini dalam proyek-proyek saya. Apa's the point ?

  1. It's yang dihasilkan
  2. It's penyebab SHA1 kode integritas err di gitlab dengan gitlab-ci.yml membangun

Meskipun itu's benar bahwa saya tidak pernah menggunakan ^ di paket saya.json untuk libs karena saya punya pengalaman buruk dengan itu.

Komentar (3)

Untuk orang-orang mengeluh tentang kebisingan ketika melakukan git diff:

git diff -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'

Apa yang saya lakukan adalah menggunakan alias:

alias gd="git diff --ignore-all-space --ignore-space-at-eol --ignore-space-change --ignore-blank-lines -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'"

Untuk mengabaikan paket-lock.json di diffs untuk seluruh repositori (semua orang menggunakan ini), anda dapat menambahkan ini ke .gitattributes:

package-lock.json binary
yarn.lock binary

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.

Komentar (1)

Ya, anda HARUS:

  1. melakukan paket-lock.json.
  2. gunakan npm ci bukan npm install ketika membangun aplikasi anda pada CI dan pengembangan lokal anda, mesin

The npm ci alur kerja membutuhkan keberadaan paket-lock.json.


Besar kelemahan dari npm install perintah adalah perilaku tak terduga yang mungkin bermutasi paket-lock.json, sedangkan npm ci hanya menggunakan versi yang ditentukan dalam lockfile dan menghasilkan kesalahan

  • jika paket-lock.json dan paket.json yang keluar dari sinkronisasi
  • jika paket-lock.json hilang.

Oleh karena itu, menjalankan npm install lokal, esp. di tim yang lebih besar dengan beberapa pengembang, dapat menyebabkan banyak konflik dalam paket-lock.json dan pengembang untuk memutuskan untuk benar-benar menghapus paket-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, menggunakan npm update {ketergantungan} atau npm install ${dependendency}@{version} dan melakukan perubahan paket-lock.json.

Jika upgrade gagal, anda dapat kembali ke terakhir yang diketahui bekerja paket-lock.json.


Untuk quote npm doc:

Hal ini sangat dianjurkan anda melakukan paket yang dihasilkan kunci untuk kontrol sumber: ini akan memungkinkan orang lain di tim anda, anda penyebaran, anda CI/integrasi berkesinambungan, dan siapa pun yang berjalan npm install di komputer anda paket sumber untuk mendapatkan hasil yang sama persis ketergantungan pohon yang anda mengembangkan. Selain itu, bedanya ini perubahan yang dapat dibaca manusia dan akan memberitahu anda dari setiap perubahan npm memiliki dibuat untuk anda node_modules, sehingga anda dapat melihat jika ada transitif dependensi yang diperbarui, mengangkat, dll.

Dan dalam hal perbedaan antara npm ci vs npm install:

  • proyek harus memiliki paket yang sudah ada-lock.json atau npm-shrinkwrap.json.
  • Jika dependensi dalam paket kunci tidak sesuai dengan yang ada di paket.json, npm ci akan keluar dengan kesalahan, bukan memperbarui paket kunci.
  • npm ci hanya dapat menginstal seluruh proyek pada suatu waktu: masing-masing dependensi tidak dapat ditambahkan dengan perintah ini.
  • Jika node_modules sudah hadir, maka akan secara otomatis dihapus sebelum npm ci mulai menginstal.
  • Ini tidak akan pernah menulis untuk paket.json atau salah satu dari paket-kunci: menginstal pada dasarnya beku.

Catatan: saya memposting jawaban serupa di sini

Komentar (1)

Ya, anda dapat melakukan file ini. Dari npm's resmi docs:

paket-lock.json secara otomatis dihasilkan untuk setiap operasi di mana npm memodifikasi baik node_modules pohon, atau paket.json. Ini menggambarkan tepat pohon yang dihasilkan, seperti yang berikutnya menginstal mampu menghasilkan identik pohon, terlepas dari intermediate ketergantungan update.

file Ini dimaksudkan untuk berkomitmen menjadi sumber repositori[.]

Komentar (2)

Menonaktifkan paket-lock.json secara global

ketik perintah berikut di terminal anda:

npm config set package-lock false

ini benar-benar bekerja untuk saya seperti sihir

Komentar (4)

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:-

  • Semua orang di proyek ini akan berada di paket yang sama versi, semua harus anda lakukan adalah

npm install

  • Jika anda mengikuti ketat versi dan don't memungkinkan memperbarui ke versi utama secara otomatis untuk menyelamatkan diri dari backward kompatibel perubahan dalam paket pihak ketiga melakukan paket-kunci banyak membantu.

Cons:-

  • Hal ini dapat membuat anda menarik permintaan terlihat jelek :)'
Komentar (1)

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:

jason@localhost:introcart_wagtail$ rm package.json
jason@localhost:introcart_wagtail$ npm install
npm WARN saveError ENOENT: no such file or directory, open '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'

dan gagal membangun, namun ketika menginstal node_modules atau menerapkan npm untuk membangun js/css, tidak ada keluhan jika saya menghapus paket-lock.json

jason@localhost:introcart_wagtail$ rm package-lock.json 
jason@localhost:introcart_wagtail$ npm run dev

> introcart@1.0.0 dev /home/jason/webapps/introcart_devtools/introcart_wagtail
> NODE_ENV=development webpack --progress --colors --watch --mode=development

 10% building 0/1 modules 1 active ...
Komentar (0)