Vai al contenuto principale
Mole
Funzioni Testate Voci Prezzo FAQ Blog
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES
Acquista oraAcquista Scarica

    Aiuto, documentazione, versioni e articoli.

    Home/Blog

    Perché Mole cancella meno cache rispetto a npm cache verify

    SviluppatoriPubblicato 5 ottobre 20265 min di lettura

    Di recente un utente mi ha scritto che la cache npm era rimasta dopo aver eseguito la manutenzione con Mole e che, pulendola da sé, era scesa da 8 GB a 2 GB. Ho quindi riesaminato le cache degli strumenti di sviluppo: quali file servono ancora, quali hanno perso i riferimenti e quali strumenti si occupano già della pulizia, senza bisogno che Mole faccia ricompilare tutto.

    L'indagine e queste modifiche risalgono al 5 ottobre. Sono nel codice per una versione futura; la versione Preview attualmente disponibile non le include ancora.

    Perché la cache npm continua a crescere

    La cache predefinita di npm è ~/.npm/_cacache. content-v2 conserva pacchetti e risposte del registro, mentre index-v5 collega le richieste ai contenuti. I file prendono il nome dall'hash del contenuto e più voci possono riferirsi allo stesso file.

    Quando cambiano i metadati di un pacchetto, npm scrive una nuova risposta. Le consultazioni successive possono rimuovere le vecchie voci dell'indice senza eliminare i file corrispondenti, lasciando contenuti senza riferimenti. Anche la documentazione npm spiega che la cache non elimina i dati da sola e cresce con le installazioni.

    L'utente aveva già pulito la cache, quindi non avevo una copia precedente né la conferma del comando esatto. Il passaggio da 8 GB a 2 GB è l'origine dell'indagine, non una misura di 6 GB recuperati da Mole e nemmeno la prova che tutti quei dati fossero senza riferimenti.

    Che cosa ha eliminato verify in questo test

    L'esperimento ha usato copie della cache di questo Mac con npm 11.19.1 e cacache 20.0.4. L'originale non è stato modificato. La cache aveva circa un giorno e conteneva 309796162 byte, non mesi di dati accumulati.

    Criterio File di contenuto Byte di contenuto
    Nessuna voce valida dell'indice rimanda a questi file 1 614295
    Eliminati davvero da npm cache verify 6 25469972

    La differenza viene dall'implementazione di verify in cacache. Pulisce i contenuti, verifica l'integrità e ricostruisce l'indice conservando l'ultima voce per ogni chiave. Le voci precedenti possono però contenere metadati completi e abbreviati per richieste diverse, non semplicemente due versioni della stessa risposta.

    Nella copia, 11199796 byte eliminati da verify erano ancora richiamati da voci valide di un'altra variante di richiesta. Alcune informazioni sui pacchetti leggibili offline prima della pulizia hanno poi restituito ENOTCACHED con npm view offline. Si potevano scaricare di nuovo online, ma il comportamento della cache era cambiato.

    Mole adotta una regola più limitata: basta una voce valida dell'indice per conservare il contenuto. Trovare solo circa 0,6 MB in questo campione non giustifica eliminare una variante ancora utile per avvicinarsi al risultato di verify.

    Eliminare i file inutilizzati senza svuotare tutta la cache

    La nuova implementazione esamina solo il percorso predefinito ~/.npm/_cacache. I contenuti senza riferimenti più vecchi di un giorno compaiono in una riga selezionata per impostazione predefinita, nel gruppo degli strumenti di sviluppo. La rimozione dell'intera cache npm richiede ancora una verifica personale, e le selezioni sovrapposte contano gli stessi byte una sola volta.

    Mentre comandi come npm install o npm ci scrivono nella cache, Mole non propone questi file per la pulizia. Se l’indice non è leggibile, i file restano fuori dall’elenco. I riferimenti vengono ricontrollati prima della rimozione; indice e cartelle temporanee non vengono modificati. Mole non esegue in background il comando di pulizia di npm.

    Conservare i riferimenti dell'indice non garantisce che ogni progetto possa sempre essere compilato offline. Un file di lock può cercare un archivio direttamente tramite hash, e registri privati o versioni vecchie potrebbero non essere più disponibili. Sorgenti, file di lock e file che non si possono ricreare vanno conservati separatamente. I percorsi personalizzati della cache npm non rientrano in questa modifica.

    Go, Cargo e pnpm richiedono scelte diverse

    Go pulisce già la propria cache di compilazione. La sua implementazione conserva le voci usate negli ultimi cinque giorni, con un'ora di margine aggiuntivo, cioè 121 ore. Mole prima proponeva l'intera cartella tra le pulizie preselezionate; ora segue la stessa regola temporale, conservando le voci recenti per evitare di doverle ricompilare.

    Cargo dispone di pulizia automatica della cache, e in questo campione non c'erano contenuti scaduti. Una precedente eliminazione dei sorgenti estratti dal registro aveva portato, circa 29 ore dopo, a circa 157 MB scaricati e 1,06 GB decompressi. Mole non aggiunge un’altra pulizia automatica per quella cache; le voci esistenti, da selezionare dopo una verifica, restano disponibili.

    Il deposito condiviso di pnpm è ancora diverso. Nel campione APFS analizzato, il numero di hard link non dimostrava che i file fossero inutilizzati; copiare quel criterio avrebbe selezionato l'intero deposito. Non è stata quindi aggiunta una pulizia automatica per pnpm. Per usare questo criterio, il numero di hard link deve indicare se un file è ancora in uso su quel file system.

    File di compilazione negli strumenti globali e nei vecchi progetti Xcode

    Il pake-cli installato globalmente conteneva un src-tauri/target di circa 1,48 GiB: output Rust della compilazione Tauri, non cache di download npm. Queste cartelle con un CACHEDIR.TAG valido scritto dallo strumento vengono ora proposte per la verifica. Lo strumento installato e le sue dipendenze node_modules restano, e una compilazione Rust attiva impedisce di intervenire.

    L'indagine ha trovato anche 24 cartelle Xcode DerivedData, circa 9 GiB, i cui percorsi di progetto registrati non esistevano più. Una cartella intera viene proposta solo se il progetto risulta assente sul disco di avvio e Xcode non usa quella cache da almeno due settimane. Un disco esterno scollegato o l'assenza di permessi di lettura non provano che il progetto sia stato eliminato. Queste dimensioni descrivono l'indagine, non promettono lo stesso recupero su ogni Mac; se serviranno ancora, ricreare gli output richiederà tempo.

    Prima capire quale livello si sta pulendo

    Questo comando di sola lettura chiede a npm il percorso effettivo della cache, incluse le impostazioni personalizzate.

    npm config get cache
    

    Quando installazioni e compilazioni non stanno più scrivendo nella cache, si può decidere se eseguire npm cache verify. Modifica davvero la cache, non si limita a osservarla. Le cartelle node_modules dei progetti e i comandi globali sono elementi distinti che questo comando non elimina. La guida alle cache di sviluppo descrive il percorso completo.

    Gli strumenti di sviluppo occupano sempre più spazio. Mole ti aiuta a pulire le cache e trovare i file più grandi.

    Prova Mole

    Continua a leggere

    • SviluppatoriSvuotare le cache di sviluppo senza rompere le build5 min di lettura
    • SviluppatoriLe cache JetBrains su Mac (IntelliJ, WebStorm, PyCharm)6 min di lettura
    • SviluppatoriEliminare i vecchi runtime del simulatore iOS su Mac3 min di lettura

    Mole · 鼴

    Pulizia, app e stato del Mac.

    v1.16.0 (301) · Versioni

    Prodotto

    Pulizia Mac Disinstallazione app Manutenzione Mac Analisi disco Monitor di sistema

    Supporto

    Aiuto Documentazione Versioni Blog

    Note legali

    Termini di servizio Informativa sulla privacy Politica di rimborso

    Risorse

    Strumento CLI Programma di affiliazione

    Contatti

    Twitter hi@mole.fit

    L’unico sito ufficiale di Mole mole.fit · Evita i file di installazione di provenienza sconosciuta

    La CLI resta gratuita per il terminale.