Apakah ada cara untuk memaksa npm untuk menghasilkan package-lock.json?

132

Saya tidak sengaja menghapusnya dan telah membuat banyak perubahan package.jsonsejak itu. Sebuah npm installatau npm updatetidak menghasilkan package-lock.jsonlagi. Saya mencoba membersihkan cache npm dan cache nvm saya, tetapi tidak ada yang berhasil. Saya mencobanya pada beberapa versi Node.js (6.10.3 Node.js - 3.10.10 npm adalah yang saya inginkan untuk dikerjakan), dan tidak berhasil pada semua.

Apakah ada cara untuk memaksa npm untuk menghasilkan package-lock.jsonfile?

Uang Besar
sumber
2
Saya pikir package-lock.json khusus untuk npm 5
Brett Merrifield
3
package-lock.jsondibuat secara otomatis secara default di npm mulai dari v5, di versi sebelumnya, nama file kunci sebelumnya npm-shrinkwrap.jsondan itu dibuat secara manual menggunakan npm shrinkwrapperintah.
alexmac
@BrettMerrifield Terima kasih! Itu masalah saya. Saya memperbarui ke node 8.6.0dan dengan itu npm 5.3.0dan itu berhasil.
Uang Besar
Periksa Anda .gitignore. Saya tidak sengaja package-lock.jsonmasuk .gitignoreentah bagaimana dan karena package-lock.jsontidak muncul di git statusdalamnya membuat saya marah.
Joshua Pinter

Jawaban:

156

Secara default, package-lock.jsondiperbarui setiap kali Anda menjalankan npm install. Namun, ini dapat dinonaktifkan secara global dengan mengatur package-lock=falsedi ~/.npmrc.

Saat package-lock=falsepengaturan global aktif, Anda masih dapat memaksa package-lock.jsonfile proyek untuk diperbarui dengan menjalankan:

npm install --package-lock

Perintah ini adalah satu-satunya cara jitu untuk memaksa package-lock.jsonpembaruan.

Mathias Bynens
sumber
@RonNewcomb Dapatkah Anda berbagi lebih banyak informasi? Apa yang Anda maksud dengan "tidak berhasil"? Versi npm mana yang Anda gunakan?
Mathias Bynens
npm versi 3.10.10 Node 6.10.3 Perintah yang Anda daftarkan tampaknya tidak ada op? Tidak ada yang terjadi. Tidak ada kesalahan, tidak ada perubahan file, tidak ada.
Ron Newcomb
2
Jika Anda menggunakan npm v3 untuk proyek Anda, Anda tidak akan memiliki file package-lock.json. package-lock.jsonhanya didukung oleh npm v5 +.
Mathias Bynens
8
npm v 6.4.1 dan ini tidak membuat package-lock.json
mjuopperi
1
Ini berhasil untuk saya, di 6.4.1. Menyetelnya ke false juga mencegahnya untuk membuatnya.
Kevin B
94

Di npm 6.x Anda dapat menggunakan

npm i --package-lock-only

Menurut https://docs.npmjs.com/cli/install.html

Argumen --package-lock-only hanya akan memperbarui package-lock.json, daripada memeriksa node_modules dan mendownload dependensi.

Janusz Przybylski
sumber
12
Ini adalah jawaban yang benar sekarang, yang lain sudah tua dan tidak akan berfungsi.
Vaibhav Singh
Ada petunjuk bagaimana membuat package-lock.json tanpa devDependencies? Saya membutuhkan ini untuk pemasangan produksi bersih. npm i --package-lock-only --only=productionsepertinya tidak berhasil.
Robert
Saya tidak berpikir itu mungkin untuk menghasilkan package-lock.jsonhanya untuk dependensi produksi. Tetapi jika Anda menjalankannya npm i --only=productionharus menginstal hanya dependensi produksi. Jadi proses build Anda akan terlihat seperti ini: instal semua dependensi, buat aplikasi, hapus, node_modulesdan instal hanya dependensi produksi.
Janusz Przybylski
14

Ini dijawab di komentar; package-lock.jsonadalah fitur di npmv5 dan lebih tinggi. npm shrinkwrapadalah cara Anda membuat file kunci di semua versi npm.

LJHarb
sumber
1
perhatikan, bagaimanapun, itu package-lock.jsontidak sama persis dengan file shrinkwrap.
strugee
7
di npm 5+, mereka sebenarnya sama persis, sampai ke setiap detailnya, kecuali satu hal: npm-shrinkwrap.jsonakan dipublikasikan ke registri, dan package-lock.jsontidak akan.
LJHarb
6
Ya. Itu perbedaan yang cukup penting, itulah sebabnya saya meninggalkan komentar saya.
strugee
1
npm shrinkwrapmenghasilkan npm-shrinkwrap.json, tapi bagaimana Anda menghasilkan package-lock.json?
Vic
5
Ini otomatis dalam npm 5+, atau Anda dapat memaksanya dalam 5+ dengan--package-lock
LJHarb
1

Seperti yang dijelaskan beberapa jawaban, Anda harus menjalankan:

npm i

TAPI jika tidak menyelesaikan ...

Periksa versi npmexecutable Anda . (Bagi saya itu 3.xx yang tidak menggunakan package-lock.json(sama sekali))

npm -v

Ini harus setidaknya 5.xx (yang diperkenalkan file paket-lock.json.)

Untuk memperbarui npm di Lunix ikuti ini petunjuk .

Untuk lebih jelasnya file paket silahkan baca cerita menengah ini .

betontalpfa.dll
sumber
0

Jika versi npm Anda lebih rendah dari versi 5, instal versi yang lebih tinggi untuk mendapatkan pembuatan paket-lock.json otomatis .

Contoh: Tingkatkan npm Anda saat ini ke versi 6.14.0

npm i -g npm@6.14.0

Anda dapat melihat daftar versi npm terbaru dengan

npm view npm versions
SridharKritha
sumber
-3

package-lock.json dibuat ulang setiap kali Anda menjalankan npm i.

Mcanic
sumber
13
Ini hanya berlaku untuk versi tertentu dari nodedan npm. Saya pikir itu npm> = 5.0dan node> = 7.0, tapi saya tidak 100% yakin tentang itu. Itu tidak berhasil node 6.11.3untuk saya.
Thor84no
2
Juga tidak benar jika kunci paket disetel ke false dalam konfigurasi npm. Gunakan 'npm config list' untuk memeriksa
Damo
package-lock.json secara otomatis dibuat untuk setiap operasi di mana npm mengubah pohon node_modules, atau package.json. Mengacu ke docs.npmjs.com/files/package-lock.json . Tetapi versi npm tidak ditentukan.
NanoNova