Apakah ada cara untuk menghapus instalan semua dependensi yang tidak terpakai (tidak dideklarasikan) dari proyek Node.js (yang tidak lagi didefinisikan dalam my package.json
.) Ketika saya memperbarui aplikasi saya, saya ingin agar paket yang tidak direferensikan dihapus secara otomatis.
414
node_modules
saat dihapus dari masing-masing folderpackage.json
?Jawaban:
Catatan :
npm
Versi terbaru melakukan ini secara otomatis ketika kunci-paket diaktifkan, jadi ini tidak diperlukan kecuali untuk menghapus paket pengembangan dengan--production
bendera.Jalankan
npm prune
untuk menghapus modul yang tidak terdaftar dalampackage.json
.Dari
npm help prune
:sumber
package.json
. Apakah itu benar? Jadi, pembaruan atau pemasangan berikutnya harus menginstalnya kembali.node_modules
direktori modul itu sendiri , sehingga dihapus dengan modul.package.json
, tetapi meninggalkan bower. Ketika saya menjalankannpm prune
, saya berharap semua karma, termasuknode_modules
foldernya sendiri yang berisi dependensinya, akan dihapus. Bagaimana dengan dependensi bower (bower-json, bower-logger, chmodr, fstream, glob, et al.). Secara teknis, itu tidak tercantum dalam proyek sayapackage.json
. Apakah itu dihapus atau tidak?node_modules
, tetapi di dalamnode_modules/bower/node_modules
, "dilindungi" olehnode_modules/bower/package.json
. Ketergantungan paket Anda dan dependensi paket Anda tidak tercampur .Jika Anda tidak khawatir tentang waktu beberapa menit untuk melakukannya, solusi akan menjadi
rm -rf node_modules
dannpm install
lagi untuk membangun kembali modul lokal.sumber
node_modules
juga memverifikasipackage.json
file yang menggambarkan grafik ketergantungan yang dapat direproduksi. Menghapus dan menginstal ulang Andanode_modules
pada dasarnya adalah tes penyebaran.npm prune
tidak membantu sedikitpun, tetapi ini berhasil. Masalah saya adalah symlink yang rusak.Anda dapat menggunakan npm-prune untuk menghapus paket-paket yang tidak tersedia.
Perintah ini menghapus paket "asing". Jika nama paket disediakan, maka hanya paket yang cocok dengan salah satu nama yang disediakan yang dihapus.
Paket ekstranous adalah paket yang tidak terdaftar dalam daftar dependensi paket induk.
Jika --production bendera ditentukan atau NODE_ENV variabel lingkungan diatur untuk produksi , perintah ini akan menghapus paket yang ditentukan dalam Anda devDependencies . Pengaturan --tidak ada produksi akan meniadakan NODE_ENV diatur ke produksi .
Jika flag --dry-run digunakan maka tidak ada perubahan yang akan dibuat.
Jika flag --json digunakan maka perubahan npm prune yang dibuat (atau akan dibuat dengan --dry-run ) dicetak sebagai objek JSON.
Dalam operasi normal dengan paket-lock diaktifkan, modul asing dipangkas secara otomatis ketika modul diinstal dan Anda hanya akan memerlukan perintah ini dengan flag --produksi .
Jika Anda telah menonaktifkan kunci-paket maka modul-modul tambahan tidak akan dihapus dan terserah Anda untuk menjalankan npm prune dari waktu ke waktu untuk menghapusnya.
Gunakan npm-dedupe untuk mengurangi duplikasi
Mencari pohon paket lokal dan mencoba menyederhanakan struktur keseluruhan dengan memindahkan dependensi lebih jauh ke pohon, di mana mereka dapat lebih efektif dibagikan oleh beberapa paket dependen.
Sebagai contoh, perhatikan grafik dependensi ini:
Dalam hal ini, npm-dedupe akan mengubah pohon menjadi:
Karena sifat hirarkis modul lookup node, b dan d keduanya akan mendapatkan ketergantungan mereka dipenuhi oleh paket c tunggal di tingkat akar pohon.
Algoritma deduplikasi berjalan pohon, memindahkan setiap ketergantungan sejauh mungkin di pohon, bahkan jika duplikat tidak ditemukan. Ini akan menghasilkan pohon yang rata dan terduplikasi.
sumber