Ga naar de inhoud

Wil je van de Mac-site van Mole naar de Windows-site?

Ga nu
Mole
MacWindows
Functies Getest Ervaringen Prijs Vragen Blog
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES PortuguêsPT NederlandsNL
Koop nuKoop Download

    Functies van Mole en vragen over kopen en gebruik.

    Blog

    Waarom Mole minder npm-cache leegt dan npm cache verify

    OntwikkelingGepubliceerd 5 oktober 2026Bijgewerkt 18 oktober 20265 min lezen

    Een gebruiker zei onlangs dat de cache van npm er nog stond na een onderhoudsronde van Mole, en dat zelf opruimen hem van 8 GB naar 2 GB bracht. Dat was aanleiding om ontwikkelaarscaches opnieuw te bekijken: welke gecachte bestanden nog nodig zijn, welke hun verwijzingen zijn kwijtgeraakt, en welke tools hun eigen oude gegevens al verzamelen.

    Het onderzoek en de wijzigingen die hier worden beschreven, zijn gedaan op 5 oktober. Ze zijn meegegaan in Mole 1.16.0.

    Waarom de cache van npm blijft groeien

    De standaardcache van npm is ~/.npm/_cacache. content-v2 bewaart pakketten en registry-antwoorden, terwijl index-v5 verzoeken aan die inhoud koppelt. Inhoudsbestanden zijn vernoemd naar een hash, en meerdere indexvermeldingen kunnen naar hetzelfde bestand verwijzen.

    Wanneer pakketmetadata verandert, schrijft npm een nieuw antwoord. Latere opzoekingen kunnen oudere indexvermeldingen comprimeren zonder de inhoudsbestanden te verwijderen, waardoor bestanden zonder indexverwijzing achterblijven. De documentatie van npm zegt ook dat de cache gegevens niet zelf verwijdert en groeit naarmate pakketten worden geïnstalleerd.

    De gebruiker had de cache al opgeruimd, dus ik had geen kopie van vóór het opruimen en kon het exacte commando dat ze hebben uitgevoerd niet bevestigen. Het bericht van 8 GB naar 2 GB startte dit onderzoek; het is geen meting dat Mole 6 GB heeft teruggewonnen, en geen bewijs dat alle 6 GB geen verwijzingen hadden.

    Wat verify in deze test verwijderde

    Het experiment gebruikte kopieën van de cache van mijn Mac met npm 11.19.1 en cacache 20.0.4. Het origineel bleef ongewijzigd. Het was ongeveer een dag oud, met 309796162 bytes inhoud, in plaats van een cache die over enkele maanden is opgebouwd.

    Regel Inhoudsbestanden Inhoudsbytes
    Door geen geldige indexvermelding genoemd 1 614295
    Werkelijk verwijderd door npm cache verify 6 25469972

    Het verschil komt uit de verify-implementatie van cacache. Die verzamelt inhoud, controleert de integriteit en bouwt de index opnieuw op, en houdt de laatste vermelding per sleutel. Eerdere vermeldingen kunnen nog volledige en afgekorte metadata bevatten die door verschillende verzoeken worden gebruikt; dat zijn niet simpelweg oude en nieuwe kopieën van één antwoord.

    Op de kopie werden 11199796 bytes die verify verwijderde nog genoemd door geldige vermeldingen voor een andere verzoekvariant. Sommige pakketinformatie die offline gelezen kon worden vóór de verificatie, gaf daarna ENOTCACHED terug bij een offline npm view. Die kon online opnieuw worden opgehaald, maar het gedrag van de cache was veranderd.

    Mole neemt de smallere regel: elke geldige indexvermelding houdt de inhoud. In dit monster alleen ongeveer 0,6 MB vinden is te verkiezen boven een bruikbare variant verwijderen alleen om dichter bij het resultaat van verify te komen.

    Ongebruikte bestanden wissen zonder de hele cache te wissen

    De nieuwe implementatie scant alleen de standaard ~/.npm/_cacache. Inhoud zonder verwijzing die ouder is dan een dag verschijnt als één standaard geselecteerde rij in het ontwikkelaarsgedeelte van Opschonen. De hele npm-cache verwijderen vraagt nog steeds om beoordeling, en overlappende selecties tellen hun bytes één keer.

    Mole laat deze bestanden met rust terwijl commando's zoals npm install of npm ci naar de cache schrijven. Als de index niet gelezen kan worden, worden de bestanden niet voor opruiming aangeboden. Verwijzingen worden opnieuw gecontroleerd vóór verwijdering; indexbestanden en tijdelijke mappen blijven staan. Mole voert het opruimcommando van npm niet op de achtergrond uit.

    Indexverwijzingen bewaren garandeert niet dat elk project altijd offline kan bouwen. Een lockbestand kan een tarball rechtstreeks op hash vragen, en privéregisters of oude versies blijven mogelijk niet beschikbaar. Bronbestanden, lockbestanden en buildoutput die niet opnieuw kan worden gemaakt, moeten apart worden bewaard. Aangepaste locaties van de npm-cache vallen buiten deze wijziging.

    Go, Cargo en pnpm vragen om andere beslissingen

    Go snoeit de buildcache al. De implementatie houdt vermeldingen die binnen vijf dagen plus een marge van één uur zijn gebruikt, of 121 uur. Mole bood eerder de hele buildcachemap aan voor standaardopruiming; deze wijziging versmalt dat tot dezelfde leeftijdsregel, en houdt recente vermeldingen die anders opnieuw gebouwd zouden moeten worden.

    Cargo heeft al automatische cacheverzameling, en niets in dit monster was daarvoor aan de beurt. Een eerdere verwijdering van uitgepakte registrybronnen werd ongeveer 29 uur later gevolgd door ruwweg 157 MB downloads en 1,06 GB uitpakken. Mole voegt geen aparte automatische verzamelaar voor die opslag toe; de bestaande rijen die alleen ter beoordeling zijn, blijven beschikbaar.

    De gedeelde store van pnpm is weer anders. In het APFS-monster konden hardlink-tellingen niet bewijzen dat inhoud ongebruikt was; dat criterium kopiëren zou de hele store selecteren. Er is geen nieuwe pnpm-verzamelaar toegevoegd. De hardlink-telling zou moeten laten zien of een bestand op dat bestandssysteem nog in gebruik is voordat Mole hem voor opruiming zou kunnen gebruiken.

    Buildoutput in globale tools en oude Xcode-projecten

    De globaal geïnstalleerde pake-cli bevatte een map src-tauri/target van ongeveer 1,48 GiB: Rust-output van het bouwen van de Tauri-schil, niet de downloadcache van npm. Zulke buildmappen met een geldige door de tool geschreven CACHEDIR.TAG worden nu ter beoordeling aangeboden. Mole houdt de geïnstalleerde tool en de afhankelijkheden in node_modules, en biedt deze mappen niet aan terwijl een Rust-build draait.

    Het onderzoek vond ook 24 mappen Xcode DerivedData, ongeveer 9 GiB, waarvan de vastgelegde projectpaden niet meer bestonden. Een hele map wordt alleen aangeboden wanneer het project bevestigd ontbreekt op de opstartschijf en Xcode de bijbehorende cache minstens twee weken niet heeft gebruikt. Een afwezige externe schijf of geweigerde leestoegang stelt geen ontbrekend project vast. Dit zijn bevindingen uit dat onderzoek, geen beloofde besparing op elke Mac; opnieuw bouwen kost nog steeds tijd als de output weer nodig is.

    Controleer welke laag je opruimt

    Dit alleen-lezen-commando vraagt npm om de echte cachelocatie, inclusief een geconfigureerd aangepast pad.

    npm config get cache
    

    Zodra installaties en builds niet meer naar die cache schrijven, beslis je of je npm cache verify uitvoert. Dat wijzigt de cache; het is geen commando dat alleen inspecteert. Mappen node_modules van projecten en globaal geïnstalleerde commando's zijn aparte lagen die het niet opruimt. De gids voor ontwikkelaarscaches behandelt de bredere werkwijze.

    Ontwikkeltools nemen steeds meer ruimte in. Mole ruimt caches op en vindt grote bestanden.

    Probeer Mole

    Lees verder

    • OntwikkelingOntwikkelaarscaches legen zonder builds te breken5 min lezen
    • OntwikkelingPython en Node.js verwijderen op een Mac12 min lezen
    • OntwikkelingJetBrains-caches op de Mac (IntelliJ, WebStorm, PyCharm)6 min lezen

    Mole · 鼴

    Opschonen, apps en status voor je Mac.

    v1.17.0 (334) · Versies

    Product

    Mac opschonen Apps verwijderen Mac onderhouden Schijfanalyse Systeemmonitor

    Support

    Help Documentatie Versies Blog

    Juridisch

    Gebruiksvoorwaarden Privacybeleid Terugbetalingsbeleid

    Bronnen

    Voor Windows CLI-tool Affiliateprogramma

    Contact

    Twitter hi@mole.fit

    De enige officiële website van Mole mole.fit · Gebruik geen installers van onbekende bronnen

    De CLI blijft gratis voor wie in de terminal werkt.