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?


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.


@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.


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.


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 .


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

-3

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.