Ikona aplikacji Node Modules Cleaner

Darmowa aplikacja desktopowa · Windows, macOS, Linux

Odzyskaj gigabajty zajęte przez node_modules

Node Modules Cleaner w jednym skanie znajduje foldery node_modules, zmergowane Git worktree i współdzielone cache narzędzi deweloperskich. Pokazuje, ile miejsca naprawdę wróci na dysk, a nie tylko ile zajmują pliki na papierze.

Open source na licencji MIT · React + Rust (Tauri 2)

Główne okno aplikacji po skanie folderu Projects: dziewięć folderów node_modules z oznaczeniem menedżera pakietów (npm, yarn, pnpm, bun), wykrytymi technologiami i rozmiarem do odzyskania; cztery zaznaczone, na dole 6,8 GB do zwolnienia.

Dysk zapełnia się sam, po cichu

Każdy projekt JavaScript ma własne node_modules, każda gałąź otwarta przez git worktree to kolejna pełna kopia repozytorium, a menedżery pakietów trzymają swoje cache poza projektami. Po kilku miesiącach robią się z tego dziesiątki gigabajtów, których nikt nie pilnuje.

node_modules

Zostają w projektach, których nie otwierałeś od miesięcy. Gdy wrócisz do projektu, npm install je odtworzy.

Zmergowane worktree

Gałąź dawno trafiła do main, a jej katalog roboczy razem z zależnościami wciąż leży na dysku.

Cache narzędzi

npm, pnpm, bun, yarn, uv, Gradle, stare przeglądarki puppeteer i wersje Node z nvm. Żyją poza projektami.

Dlaczego „rozmiar folderu” często kłamie
Przypadek Co pokazuje naiwne liczenie Ile naprawdę odzyskasz
node_modules z pnpm lub bun pełny rozmiar każdego pliku prawie nic: pliki to hardlinki do wspólnego store'u, dane przetrwają usunięcie
Pliki rzadkie (obrazy dysków VM) rozmiar nominalny, czasem setki GB tylko bloki, które faktycznie zapisano
Pliki wyrzucone do chmury (iCloud Drive) rozmiar nominalny nic, bo tych bajtów nie ma na tym komputerze

Co potrafi

Jedno okno, trzy panele i jedno potwierdzenie przed usunięciem czegokolwiek.

node_modules

Szybki skan i uczciwe rozmiary

Wskaż folder, na przykład ~/Projects, a Rust przeskanuje go równolegle (Rayon).

  • Każdy wiersz pokazuje, ile miejsca faktycznie wróci. Gdy rozmiar nominalny jest inny, widzisz go obok.
  • Menedżer pakietów rozpoznany po lockfile: npm, yarn, pnpm albo bun.
  • Technologie z package.json jako etykiety: next, react, expo, @nestjs, vue, astro i inne.
  • Sortowanie po nazwie, rozmiarze albo menedżerze; zaznaczanie pojedynczo lub wszystkich naraz.
Panel node_modules posortowany po rozmiarze. Projekty z pnpm i bun pokazują mały rozmiar do odzyskania i większy rozmiar nominalny obok.
Git worktree

Zmergowane worktree, także po squash merge

Aplikacja najpierw odświeża refy z remote'a, a potem porównuje każde worktree ze wszystkimi gałęziami bazowymi repozytorium: origin/HEAD, main, master, development i develop.

  • Rozpoznaje squash merge, domyślny tryb scalania na GitHubie, i nie zostawia przy tym obiektów w repozytorium.
  • Worktree z niezacommitowanymi zmianami albo zablokowane przez Git są chronione, nie da się ich zaznaczyć.
  • Wpisy, których katalog już zniknął, są czyszczone przez git worktree prune.
  • Gałęzie zostają. Usuwany jest tylko katalog roboczy.
Panel Merged Git worktrees: gałęzie zmergowane i squash-zmergowane do origin/main, origin/development i origin/develop; worktree z niezacommitowanymi zmianami i zablokowane są wyszarzone; na dole lista porównanych gałęzi bazowych.
Cache deweloperskie

Cache poza projektami, bez wybierania folderu

Te cache leżą w stałych miejscach, więc możesz je przeskanować od razu po uruchomieniu aplikacji.

  • npm (_cacache, _npx), bun, yarn Berry i Classic, stare wersje Gradle, stare buildy puppeteer, stare wersje Node z nvm.
  • Porzucone store'y pnpm, które zostały po zmianie domyślnej lokalizacji, odróżnione od store'u, którego pnpm używa teraz.
  • Aktywny store pnpm i cache uv trafiają do ich własnego prune, więc to, co wciąż jest używane, zostaje.
  • Logi Homebrew są opróżniane w miejscu, bo usunięcie pliku otwartego przez usługę nie zwolniłoby miejsca.
  • Select safe zaznacza tylko pozycje bezpieczne. Te do przejrzenia wybierasz świadomie.
Panel Developer caches pogrupowany na porzucone store'y i cache menedżerów pakietów. Przy każdej pozycji widać metodę czyszczenia (delete, pnpm store prune, uv cache prune), czas od ostatniego użycia i rozmiar.
Bezpieczeństwo

Jedno potwierdzenie z podsumowaniem

Zaznaczone node_modules i worktree usuwasz razem, po jednym potwierdzeniu, które pokazuje, ile czego usuwasz i ile miejsca zwolnisz.

  • Usunięcie zostanie odrzucone, jeśli od skanu w worktree pojawił się nowy commit.
  • Śmieci systemowe (.DS_Store, cookies watchmana) są raportowane osobno, bo nie są pracą, choć blokują git worktree remove.
  • Worktree zablokowanego przez Git aplikacja nigdy nie usunie na siłę.
Okno potwierdzenia „Remove selected items?”: 4 foldery node_modules, 5 zmergowanych worktree, 6,8 GB do zwolnienia, przyciski Cancel i Remove.
Pasek menu

Działa w tle z paska menu

Po zamknięciu okna aplikacja zostaje w pasku menu. Dla obserwowanych folderów pokazuje wolne miejsce na dysku, na którym dany folder faktycznie leży, i liczbę worktree gotowych do usunięcia.

  • Odświeża się co 15 minut, po kliknięciu Refresh now i po każdym sprzątaniu.
  • Odświeżanie w tle nie łączy się z siecią i nie przechodzi przez node_modules.
  • Na macOS możesz ukryć ikonę w Docku.
  • Ustawienia pokazują, ile trwało ostatnie odświeżenie i ile procesów Git uruchomiło.
Panel Settings: zaznaczona opcja Hide from the Dock, dwa obserwowane foldery i sekcja Background refresh z czasem ostatnich odświeżeń.

Jak to działa

Od wybrania folderu do wolnego miejsca w czterech krokach.

  1. Wybierz folder

    Kliknij Select Folder i wskaż katalog z projektami.

  2. Poczekaj na skan

    Jeden skan znajduje zarówno foldery node_modules, jak i zmergowane worktree.

  3. Przejrzyj wyniki

    Najpierw node_modules, niżej worktree. Zaznacz to, czego nie potrzebujesz.

  4. Usuń zaznaczone

    Kliknij Remove Selected i potwierdź. Oba panele usuwasz za jednym razem.

Cache deweloperskie nie wymagają wybierania folderu. Kliknij Scan caches, przejrzyj grupy i przy każdej pozycji sprawdź, jak zostanie wyczyszczona: usunięta, opróżniona w miejscu czy przekazana do prune narzędzia, do którego należy.

Zrzuty z prawdziwego interfejsu aplikacji, wypełnionego fikcyjnymi projektami. Kliknij, żeby powiększyć.

Pobierz albo zbuduj ze źródeł

Gotowe instalatory są w GitHub Releases. Możesz też zbudować aplikację samodzielnie.

Instalatory

  • Windows.msi · x64
  • macOS.dmg · Apple Silicon i Intel
  • Linux.deb, .AppImage · x64

Przejdź do najnowszego wydania

Aplikacja nie jest podpisana cyfrowo:

  • macOS: kliknij prawym przyciskiem → Otwórz, żeby ominąć Gatekeepera.
  • Windows: kliknij „Więcej informacji” → „Uruchom mimo to”.
  • Linux: ikona w zasobniku wymaga libayatana-appindicator3 (pakiet .deb ją deklaruje). Bez niej aplikacja działa, tylko bez zasobnika.

Budowanie ze źródeł

Wymagania: Node.js 18+, Rust (najnowszy stable) i narzędzia systemowe dla Tauri.

git clone https://github.com/jash90/node-modules-cleaner.git
cd node-modules-cleaner
npm install
npm run tauri dev     # tryb deweloperski
npm run tauri build   # instalatory w src-tauri/target/release/bundle/

Zależności systemowe:

  • Linux: sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
  • macOS: xcode-select --install
  • Windows: Visual Studio C++ Build Tools

Stack

  • Tauri 2
  • Rust
  • Rayon
  • React 19
  • TypeScript
  • Vite 7
  • Tailwind CSS 4