Bagaimana cara membersihkan folder node_modules dari paket-paket yang tidak ada di package.json?

338

Asumsikan saya menginstal paket proyek dengan npm installyang terlihat dalam package.jsonuntuk modul yang akan diinstal. Setelah beberapa saat saya melihat bahwa saya tidak memerlukan modul tertentu dan menghapus ketergantungannya dari package.json. Lalu saya menghapus beberapa modul lain dari package.jsonkarena mereka tidak diperlukan lagi dan yang lain diganti dengan alternatif.

Sekarang saya ingin membersihkan node_modulesfolder sehingga hanya modul yang terdaftar package.jsontetap di sana dan sisanya harus pergi, seperti npm clean. Saya tahu saya bisa menghapusnya secara manual tetapi ingin memiliki fungsionalitas gula siap pakai yang bagus untuk itu.

Sergei Basharov
sumber

Jawaban:

407

Saya pikir Anda sedang mencari npm prune

npm prune [<name> [<name ...]]

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 pada daftar dependensi paket induk.

Lihat dokumen: https://docs.npmjs.com/cli/prune

David Sherret
sumber
1
Sejauh yang saya tahu, dalam versi NPM baru, semua dependensi terletak di node_modulesfolder root , dan tidak seperti sebelumnya, di mana setiap dependensi memiliki dependensi sendiri menginstal di node_modulesfolder mereka sendiri..dengan salinan yang tak terhitung dari dependensi yang sama ... jadi apakah npm pruneini mempertimbangkan? karena dependensi-dalam itu tidak ditulis pada proyek utama package.jsonAnda .. prune harus terlihat rekursif.
vsync
2
@vsync Pengurangan duplikasi dicapai dengan perintah npm dedupe docs.npmjs.com/cli/dedupe . Mencoba menyederhanakan pohon simpul dengan memindahkan dependensi ke atas pohon.
knaos
Saya telah melihat NPM pangkas gagal menghapus hal-hal yang biasanya kacau ketika repositori perusahaan saya memiliki sesuatu yang kacau di dalamnya. Maka saya harus rm-rf. Akan lebih baik jika ada perintah "hancurkan semuanya lalu reget semuanya sekaligus"
ggb667
210

Anda dapat menghapus node_modules / folder Anda dan kemudian menginstal kembali dependensi dari package.json.

rm -rf node_modules/
npm install

Ini akan menghapus semua paket yang diinstal di folder saat ini dan hanya menginstal dependensi dari package.json. Jika dependensi telah diinstal sebelumnya npm akan mencoba menggunakan versi cache, menghindari mengunduh dependensi untuk kedua kalinya.

adamduren
sumber
4
Ya, saya tahu saya bisa menggunakan metode ini tetapi saya ingin tahu mengapa masih ada solusi yang lebih elegan untuk itu.
Sergei Basharov
Apakah benar-benar tidak ada perintah npm untuk menghapus node_modules selain menghapus folder?
Anders
4
Pada platform windows, gagal saat menghapus node_modules melalui Explorer atau baris perintah (karena jalur ke beberapa modul lebih panjang dari 256). Seharusnya ada perintah npm untuk melakukannya dengan cara yang lebih bersih.
Ravi Kumar
9
Atau gunakan rmdir node_modules /s /qdi Windows. superuser.com/a/179661/440976
Wédney Yuri
5
Saya pikir, jawaban ini tidak ada satu poin yang sangat penting: jika Anda dibatasi oleh lalu lintas (yaitu Anda memiliki koneksi berbayar per megabyte yang mahal seperti ponsel) dan Anda memiliki banyak modul, ini mungkin dikenakan biaya , sedangkan pruneopsi memang mengharuskan Anda memiliki koneksi internet sama sekali.
Ivan Kolmychek
103

Karena foldernya bersarang, Windows tidak dapat menghapus folder karena namanya terlalu panjang. Untuk mengatasi ini, instal RimRaf:

npm install rimraf -g

rimraf node_modules
pengguna3844078
sumber
8
Atau hanyarm -rf node_modules
kappaallday
16
rm -rf node_modulestidak akan berfungsi di windows. Lihat solusi ini: superuser.com/a/179661/440976
Wédney Yuri
1
win7 x64 rimraf bekerja sangat baik melalui PowerShell .. terima kasih
gorelative
Solusi terbaik untuk Windows 10 64-bit melalui CMD
Matt Cromwell
rm -rf node_modules tidak bekerja untuk saya di Windows 10. Tetapi rimraf bekerja untuk saya
ssmsnet
24

sederhana jalankan saja

rm -r node_modules

sebenarnya, Anda dapat menghapus folder apa pun dengan ini.

seperti rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

cukup buka pindahkan gitbash ke root folder dan jalankan perintah ini

Semoga ini bisa membantu.

Ajay Kotnala
sumber
2
Tidak berfungsi, saya mendapatkan kesalahan "izin ditolak" (menggunakan gitbash.
drake035
3
buka gitbash dalam mode administrator. Saya kira itu akan membantu. atau ubah pengaturan level izin folder
Ajay Kotnala
3
Ini akan menghapus semua paket. OP jelas mengatakan "Saya ingin membersihkan folder node_modules sehingga hanya modul yang terdaftar di package.json tetap di sana".
Boaz
dalam hal ini teman saya, Anda cukup melakukan "npm uninstall package_name" atau --simpan sebagai sufix yang akan menghapus entri dari file package.json juga. NPM uninstall package_name (paket delete) NPM uninstall nama_paket --save (menghapus paket dan masuk menghapus dari dependensi dalam paket json) NPM uninstall nama_paket --save-dev (delete paket dan masuk menghapus dari devdependencies dalam paket json)
Ajay Kotnala
22

Pertama kali instal rimraf secara global

npm install rimraf -g

pergi ke jalan menggunakan cmd di mana folder node_modules Anda dan terapkan perintah di bawah ini

rimraf node_modules
Ankit Parmar
sumber
jawaban yang bagus, tetapi menginstal paket untuk menghapus instalasi yang lain bukanlah ide yang baik. npm pruneadalah solusi ideal.
Binayak Gouri Shankar
Ya, tetapi jika Anda ingin menghapus folder node_module dari proyek Anda, ini adalah cara terbaik dan mudah.
Ankit Parmar
9

dari versi 6.5.0 npm mendukung perintah clean-installuntuk menyegarkan semua paket

Giuseppe B
sumber
1
Inilah yang saya butuhkan. Ketika saya memperbarui node, hal pertama yang terjadi adalah "sepertinya Anda telah mengubah lingkungan Anda sejak menjalankan 'npm install'". Karena saya sudah berada di konsol, lebih mudah untuk melakukan instalasi bersih daripada main-main menghapus folder, dll.
Jarrod McGuire
3

Saya telah menambahkan beberapa baris di dalam package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

Jika Anda ingin cleanhanya Anda dapat menggunakan ini rimraf node_modulesatau rm -rf node_modules.

Ini bekerja dengan baik

Amitesh Singh
sumber
1

Artikel terbaik yang saya temukan tentang ini adalah yang ini: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Semua dari konsol dan mudah dijalankan dari titik folder apa pun.

Tetapi sebagai ringkasan artikel, perintah ini untuk menemukan ukuran untuk setiap node_modulefolder yang ditemukan di proyek yang berbeda.

find . -name "node_modules" -type d -prune -print | xargs du -chs

Dan untuk benar-benar menghapusnya:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

Artikel ini juga berisi instruksi untuk shell windows.

robertovg
sumber
0

Hapus / Edit paket yang tidak diperlukan di package-lock.json (nama paket akan ditulis di bawah dependensi & devDependencies) lalu

npm install

Fakrudeen
sumber
-2

Gunakan perintah berikut alih-alih instal npm

npm ci
Jasmin Mistry
sumber
npm ci menginstal paket yang terdaftar di shrinkwrap.json
LuckyLikey