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...