NuGet eller NoGet, det är frågan

NuGet eller NoGet, det är frågan
Är NoGet svaret? Kanske inte.

Inom modern .NET-utveckling är vi vana vid att lösningen på de flesta problem bara är en dotnet add package-kommando bort. Men för varje rad vi lägger till i vår projektfil ökar vi också vår ryggsäck av teknisk skuld. Att hantera NuGet-paket handlar om en hårfin balansgång mellan produktivitet och kontroll.

Här är en checklista och en uppsättning regler du kan använda för att utvärdera om ett paket förtjänar en plats i din lösning.


1. Underhåll och "Lindy-effekten"

Ju längre ett paket har varit relevant, desto större är sannolikheten att det förblir så. Men popularitet kräver aktivt underhåll.

  • Senaste uppdatering: Har paketet uppdaterats det senaste året? Ett bibliotek som inte rörts på två år för en aktiv teknikstack är en varningsflagg.
  • Aktivitet i communityn: Titta på GitHub-repot. Svarar underhållarna på issues? Blir Pull Requests (PRs) granskade och mergeade?
  • Antal nedladdningar: En hög siffra på NuGet.org är ingen kvalitetsgaranti, men det betyder att paketet har testats i tusentals olika miljöer och scenarier.

2. Analysera beroendeträdet (Transitiva beroenden)

Ett paket kommer sällan ensamt. När du installerar "Paket A" kanske du får med dig fem andra bibliotek på köpet.

  • Regeln: Kontrollera djupet. Om ett litet verktyg drar med sig hälften av paketen på NuGet bör du leta efter ett lättare alternativ.
  • Verktygstips: Använd kommandot dotnet list package --include-transitive för att se vad som faktiskt hamnar i din arkitektur.

3. Licensiering: Det juridiska finstilta

Detta är en punkt där du inte kan kompromissa, särskilt i kommersiella projekt.

  • Grönt ljus: Håll dig till "Permissive" licenser som MIT, Apache 2.0 eller BSD.
  • Rött ljus: Var extremt vaksam på GPL eller LGPL. Dessa "copyleft"-licenser kan i värsta fall tvinga dig att öppna källkoden för hela din egen applikation.

4. Kompatibilitet och "Framework Lock-in"

Dina paket måste kunna växa med dig.

  • Target Frameworks: Stöder paketet .NET Standard 2.0 eller de nyaste versionerna av .NET?
  • Plattformsoberoende: Kontrollera att paketet fungerar på både Linux och Windows om du kör containrar. Undvik paket med dolda beroenden till Windows-specifika API:er (som äldre System.Drawing).

5. "Make vs. Buy"-testet (60-minutersregeln)

Innan du installerar ett paket för en nischad funktion, ställ dig själv frågan:

"Kan jag skriva den här logiken själv på under en timme?"

Om du bara behöver en specifik algoritm eller en enkel stränghantering är det ofta bättre att skriva en egen implementation. Då äger du koden, du förstår den, och du slipper ett externt beroende för all framtid.

6. Bus Factor och Säkerhet

Vem står bakom koden?

  • Bus Factor: Om projektet underhålls av en enda person, vad händer om den personen slutar eller tappar intresset? För kritiska funktioner är paket understödda av organisationer (som Microsoft, Google eller större Open Source-stiftelser) säkrare.
  • Sårbarheter: Använd verktyg som Snyk eller GitHubs inbyggda Dependabot för att se om paketet har kända säkerhetshål (CVEs).

Praktiska verktyg för din verktygslåda

För att underlätta utvärderingen kan du använda dessa tjänster:

  1. NuGetTrends.com: Se om paketets popularitet ökar eller dyker.
  2. Fuget.org: En fantastisk tjänst för att utforska ett pakets faktiska API och källkod direkt i webbläsaren innan du laddar ner det.
  3. Dotnet-outdated: Ett CLI-verktyg som snabbt visar vilka av dina nuvarande paket som behöver kärlek.

Sammanfattning

Varje NuGet-paket är ett förtroende du ger till en främmande utvecklare. Genom att införa en tydlig policy för utvärdering i ditt team – till exempel att alla nya beroenden måste motiveras i en Pull Request – kan ni hålla er kodbas ren, snabb och framtidssäker.