© deomis/Shutterstock.com
Die Festplatte von NuGet- und npm-Paketen entmüllen

Kolumne: .NETversum


Im Zeitalter der Softwarekomponentenpakete, insbesondere um npm [1] und NuGet [2] kann Festplattenplatz knapp werden. Ein Dateisystemordner node_modules für eine einfache Angular-Anwendung (mit der Standardvorlage der Angular-CLI-Version 8.0, also dem Befehl ng new angelegt), umfasst 760 npm-Pakete mit stolzen 304 MB auf der Festplatte.

Bei einer echten Angular-Anwendung kommen schnell 800 MB im Dateisystemordner node_modules zusammen.

Aber auch die .NET-Core-Welt ist nicht besser. Eine einfache Universal-Windows-Platform-(UWP-)App, die mehrere Paketversionsaktualisierungen durchlaufen hat, hat einen packages-Ordner mit 281 MB. Für moderne .NET-Core-Projekte verwendet Microsoft aber einen projektübergreifenden, globalen Paketordner C:\Users\[Benutzername]\.nuget\packages [3].

Rekursives Löschen der Paketordner

Es bietet sich an, bei knapp werdendem Festplattenplatz die Verzeichnisse packages und node_modules in den Projekten zu löschen und dann gezielt über einen Package Restore, also npm install bzw. nuget.exe restore (für klassische .NET-Projekte) bzw. dotnet restore (für .NET-Core-Projekte) die wirklich benötigten Pakete wieder zu laden. nuget.exe erhält man unter [4].

NuGet wird dabei zuerst gar nicht ins Netz gehen, sondern in den lokalen Zwischenspeichern nachsehen, ob das Paket dort in der gewünschten Version vorhanden ist.

Listing 1 zeigt ein PowerShell-Skript, dass in zwei Schritten die Paketverzeichnisse löscht und dann die benötigten Pakete wiederherstellt.

Im ersten Schritt werden dabei in einer Verzeichnisstruktur rekursiv alle Dateisystemordner node_modules gesucht. Die Ordner werden rekursiv gelöscht. Im letzten Schritt erfolgt die Wiederherstellung mit npm install.

Im nächsten Schritt werden in einer Verzeichnisstruktur rekursiv alle Dateisystemordner packages gesucht. Die gefundenen Ordner werden rekursiv gelöscht. Im letzten Schritt erfolgt die Wiederherstellung mit nuget restore.

Listing 1: Löschen und Wiederherstellen der Paketverzeichnisse

Write-Host "--- Paketordner aufräumen" Write-Host "--- (C) Dr. Holger Schwichtenberg 2017-2019" $codeRoot = "H:\TFS\Demos\NETCore\PaketmanagerDemos" # Hilfsroutine function Get-FolderSize($Path) { return "{0:N2} MB" -f ((Get-ChildItem $Path -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB) } # region npm Write-Host "Löschen aller node_modules-Ordner und Wiederherstellen mit npm" -ForegroundColor Green $packageFolders = dir $codeRoot -Include "node_modules" -Recurse writ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang