© best_vector/Shutterstock.com
Windows Developer
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.

Holger Schwichtenberg


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 PaketordnerNuGet 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 PaketverzeichnisseWrite-Host "--- Paketordner aufräumen"Write-Host "--- (C) Dr. Holger Schwichtenberg 2017-2019" $codeRoot = "H:\TFS\Demos\NETCore\PaketmanagerDemos" # Hilfsroutinefunction Get-FolderSize($Path){return "{0:N2} MB" -f ((Get-ChildItem $Path -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)} # region npmWrite-Host "Löschen aller node_modules-Ordner und Wiederherstellen mit npm" -ForegroundColor Green$packageFolders = dir $codeRoot -Include "node_modules" -Recursewrite-host "Folders:" $packageFolders.countforeach($d in $packageFolders){Write-Host $d.Fullname -ForegroundColor YellowWrite-Host "Alte Größe: " (Get-FolderSize $d.FullName)$parent = $d.parentcd $parent.fullnamerm $d.FullName -Recurse -Forcenpm installWrite-Host "Neue Größe: " (Get-FolderSize $d.FullName)}# endregion # regionWrite-Host "Löschen aller Packages-Ordner und Wiederherstellen mit nuget.exe" -ForegroundColor Green$packageFolders = dir $codeRoot -Include "packages" -Recursewrite-host "Folders:" $packageFolders.countforeach($d in $packageFolders){Write-Host $d.Fullname -ForegroundColor YellowWrite-Host "Alte Größe: " (Get-FolderSize $d.FullName)$parent = $d.parentcd $parent.fullnamerm $d.FullName -Recurse -Fo...

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

Holger Schwichtenberg


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 PaketordnerNuGet 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 PaketverzeichnisseWrite-Host "--- Paketordner aufräumen"Write-Host "--- (C) Dr. Holger Schwichtenberg 2017-2019" $codeRoot = "H:\TFS\Demos\NETCore\PaketmanagerDemos" # Hilfsroutinefunction Get-FolderSize($Path){return "{0:N2} MB" -f ((Get-ChildItem $Path -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)} # region npmWrite-Host "Löschen aller node_modules-Ordner und Wiederherstellen mit npm" -ForegroundColor Green$packageFolders = dir $codeRoot -Include "node_modules" -Recursewrite-host "Folders:" $packageFolders.countforeach($d in $packageFolders){Write-Host $d.Fullname -ForegroundColor YellowWrite-Host "Alte Größe: " (Get-FolderSize $d.FullName)$parent = $d.parentcd $parent.fullnamerm $d.FullName -Recurse -Forcenpm installWrite-Host "Neue Größe: " (Get-FolderSize $d.FullName)}# endregion # regionWrite-Host "Löschen aller Packages-Ordner und Wiederherstellen mit nuget.exe" -ForegroundColor Green$packageFolders = dir $codeRoot -Include "packages" -Recursewrite-host "Folders:" $packageFolders.countforeach($d in $packageFolders){Write-Host $d.Fullname -ForegroundColor YellowWrite-Host "Alte Größe: " (Get-FolderSize $d.FullName)$parent = $d.parentcd $parent.fullnamerm $d.FullName -Recurse -Fo...

Neugierig geworden?


    
Loading...

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