Updates van afhankelijkheden in uw Node.js-project beheren

Voltooid

Als ontwikkelaar bij Tailwind Traders is het belangrijk om onze pakketten up-to-date te houden. Dit zorgt ervoor dat we de nieuwste functies en oplossingen gebruiken. Het helpt ons ook beveiligingsproblemen te voorkomen. In deze les leert u hoe u afhankelijkheden in een Node.js-project beheert. U leert hoe u pakketten bijwerkt, semantische versiebeheer gebruikt en beveiligingsproblemen beheert.

Overwegingen voordat u een pakket bijwerkt

Overweeg het volgende voordat u een pakket bijwerkt:

  • Updatetype: Begrijp of het een kleine oplossing, een nieuwe functie of een belangrijke wijziging is die uw code kan verbreken. Semantische versiebeheer kan helpen dit te identificeren.
  • Projectconfiguratie: Zorg ervoor dat uw project is ingesteld op het ontvangen van alleen gewenste updates om onverwachte wijzigingen te voorkomen.
  • Beveiliging: houd rekening met mogelijke beveiligingsproblemen. Gebruik de controlefunctie van NPM om problematische pakketten te identificeren en bij te werken.
  • Testen: Zorg ervoor dat uw tests na de update zijn geslaagd. Als u geen tests hebt, kunt u overwegen deze toe te voegen. Uw toepassing gedraagt zich mogelijk anders na een update en de tests valideren het juiste gedrag.

Semantische versiebeheer voor het definiëren van updategedrag

Semantische versiebeheer is een belangrijke standaard in softwareontwikkeling. Het is essentieel voor het publiceren en gebruiken van npm-pakketten. Het helpt bij het beheren van updaterisico's door het type wijzigingen in een nieuwe versie aan te geven. Een versienummer bevat specifieke secties om deze wijzigingen weer te geven:

Versietype Position Syntaxis Wat gebeurt er? Bijwerkbenadering
Groot 1e x.0.0 of * Wijzigingen tussen 1.0.0 en 2.0.0 geven belangrijke wijzigingen aan. Mogelijk zijn er codeaanpassingen nodig. Vertrouwd met onmiddellijke updates voor de nieuwste primaire versie, waarbij potentiële codewijzigingen worden erkend.
Klein 2de 1.x.1 of ^ Wijzigingen van 1.2.9 in 1.3.0 introduceert nieuwe functies. Bestaande code moet nog steeds werken. Updates zijn doorgaans veilig. Open nieuwe functies, maar geen wijzigingen die fouten veroorzaken.
Patch externe 1.1.x of ~ Wijzigingen van 1.0.7 tot 1.0.8 gemiddelde opgeloste fouten. Updates moeten veilig zijn. Het accepteren van oplossingen voor fouten.

Voor kleine Node.js-projecten kunt u vrijelijk bijwerken naar de nieuwste versies. Maar voor grotere projecten hebben updates zorgvuldige gedachten nodig en zijn ze niet altijd automatisch. Over het algemeen maakt het bijwerken van kleinere afhankelijkheden, met minder van hun eigen afhankelijkheden, het proces eenvoudiger.

Voordat u een of meer afhankelijkheden bijwerkt, moet u het package.json bestand zo configureren dat u voorspelbaar gedrag krijgt wanneer u de npm update <name of dependency> opdracht uitvoert. Node.js maakt gebruik van een set symbolen waarmee u kunt definiëren hoe uw pakketten moeten worden bijgewerkt.

Een pakket bijwerken met npm CLI

U kunt een pakket installeren met behulp van de install of update opdracht in npm. Deze opdrachten zijn nu voornamelijk uitwisselbaar. Als u een pakket wilt bijwerken, gebruikt u meestal:

  • Nieuwste versie: npm update <package name>@latest.
  • Specifieke versie: npm update <package name>@<optional version number>.

Het updateproces is afhankelijk van twee factoren:

  • Versieargument: Als een versienummer is opgegeven in de npm update opdracht, haalt npm die specifieke versie op en installeert deze.
  • Manifestbestandvermelding: het package.json bestand bevat regels voor het bijwerken van afhankelijkheden. Betekent bijvoorbeeld "dependencyName": "1.1.x" dat npm de versie ophaalt die overeenkomt met dit patroon.

Meer informatie over versiebeheer

Drie bestanden bepalen de versiebeheer van afhankelijkheden:

  • package.json: Dit bestand definieert de versie van het pakket dat u wilt gebruiken. Het is het manifestbestand voor uw project. Het bevat de metagegevens voor uw project, inclusief de afhankelijkheden.
  • package-lock.json: Dit bestand beschrijft de exacte structuur die is gegenereerd, zodat volgende installaties identieke structuren kunnen genereren, ongeacht tussenliggende afhankelijkheidsupdates. Dit bestand is bedoeld om te worden doorgevoerd in bronopslagplaatsen.
  • shrinkwrap.json: Dit bestand wordt gemaakt met de npm shrinkwrap CLI-opdracht en is vergelijkbaar met package-lock.json. Het belangrijkste verschil tussen de opdrachten is dat de pakketversies die zijn opgegeven, npm-shrinkwrap.json niet door gebruikers kunnen worden overschreven. Daarnaast is het npm-shrinkwrap.json bestand compatibel met oudere versies van npm (versie 2-4), terwijl package-lock.json het compatibel is met npm versie 5 en hoger. Daarom kunt u vinden npm-shrinkwrap.json bij het onderhouden van verouderde codebases. De meeste ontwikkelaars gebruiken package-lock.json in plaats van npm-shrinkwrap.json. Een uitzondering waarbij npm-shrinkwrap.json de voorkeur wordt gegeven aan globale installaties van daemons en opdrachtregelprogramma's waar ontwikkelaars willen controleren of de exacte versies van de opgegeven pakketten zijn geïnstalleerd.

Voorbeeld van bepaling van pakketversie

Overweeg een scenario waarin u versie 1.2 in uw code gebruikt en vervolgens versie 1.4 wordt uitgebracht, waardoor uw code wordt onderbroken. Als iemand uw app op dit moment installeert, krijgt deze een niet-functionerende app. Maar als er een package-lock.json bestand is dat versie 1.2 opgeeft, wordt die versie geïnstalleerd.

Hier volgt een voorbeeld van het bepalen welke versie van een pakket is geïnstalleerd:

  • Als de package.json en package-lock.json bestanden akkoord gaan met een versieregel, is er geen conflict. Als u bijvoorbeeld package.json versie 1.4 opgeeft en package-lock.json opgeeft1.x, wordt versie 1.4 geïnstalleerd.
  • Als package.json een specifiekere versie wordt opgegeven, 1.8.xwordt het package-lock.json bestand overschreven, waarin de oudere versie van 1.4 wordt vermeld. In dit geval wordt versie 1.8.0 of een nieuwere patchversie geïnstalleerd, indien beschikbaar.

Verouderde pakketten zoeken en bijwerken met npm verouderd

De npm outdated opdracht wordt gebruikt om pakketten te identificeren die nieuwere versies beschikbaar hebben. Wanneer deze wordt uitgevoerd, wordt een lijst met deze verouderde pakketten weergegeven:

Package       Current    Wanted   Latest     Location     Depended by
lodash        1.0.0      1.0.0    4.17.19    lock-test    main-code-file
node-fetch    1.2.0      1.2.0    2.6.0      lock-test    function-code-file

De kolommen in de uitvoer zijn onder andere:

Kolom Beschrijving
Pakket Het verouderde pakket.
Huidig De huidige geïnstalleerde versie van het pakket.
Gezocht De nieuwste versie die overeenkomt met het semantische patroon dat u in het package.json bestand hebt opgegeven.
Laatste Hierin wordt de nieuwste versie van het pakket weergegeven.
Locatie De locatie van de pakketafhankelijkheid. De outdated opdracht verkent alle geïnstalleerde pakketten in de verschillende node_modules mappen.
Afhankelijk van Het pakket met de afhankelijkheid.

Beveiligingsproblemen met npm-controle beheren

Telkens wanneer u een pakket installeert of bijwerkt, krijgt u een logboekantwoord dat aangeeft welke versie is geïnstalleerd en of er beveiligingsproblemen zijn. In het logboek worden beveiligingsproblemen vermeld. Als u kritieke of hoge beveiligingsproblemen hebt, moet u het pakket bijwerken.

Een voorbeeld van een logboekantwoord is:

+ lodash@1.3.1
added 1 package from 4 contributors and audited 1 package in 0.949s
found 3 vulnerabilities (1 low, 2 high)
  run `npm audit fix` to fix them, or `npm audit` for details

Als u een probleem wilt oplossen en een update wilt toepassen, kunt u de npm audit opdracht uitvoeren. Met deze opdracht worden alle beveiligingsproblemen vermeld.

De npm audit fix opdracht probeert beveiligingsproblemen op te lossen door een upgrade uit te voeren naar een secundaire versie waar het probleem niet bestaat. Dit is echter mogelijk niet beschikbaar als de oplossing zich in de volgende primaire versie bevindt.

In dergelijke gevallen moet u mogelijk wijzigingen npm audit fix --forceveroorzaken die fouten veroorzaken door bij te werken naar de primaire versie. Het uitvoeren van deze opdracht is een beslissing die u zorgvuldig moet nemen. U moet rekening houden met de belangrijke wijzigingen en deze gebruiken om uw code bij te werken npm update , inclusief beveiligingsproblemen.

Een beveiligingsprobleem is een codefout die door aanvallers kan worden misbruikt om schadelijke acties uit te voeren, waardoor uw gegevens en systemen mogelijk in gevaar worden gebracht. Het is van cruciaal belang om deze beveiligingsproblemen onmiddellijk aan te pakken.

Vanwege de frequente detectie van beveiligingsproblemen heeft GitHub een functie waarmee opslagplaatsen worden gescand en automatisch pull-aanvragen worden gemaakt die upgrades naar veiligere versies voorstellen. Regelmatig wordt uitgevoerd npm audit , is een goede gewoonte om beveiligingsproblemen te identificeren en op te lossen, wat bijdraagt aan de algehele beveiliging van uw project.

De aanbevolen werkstroom voor updates is:

  1. npm run test: Controleer of uw bestaande tests zijn geslaagd voordat u dit updateproces start.
  2. npm audit: om te controleren op beveiligingsproblemen in de huidige versie die u gebruikt. De informatie van waaruit npm audit kan worden aanbevolen om bij te werken naar een primaire versie. Controleer de belangrijke wijzigingen zorgvuldig als deze worden vermeld.
  3. npm outdated: om alle verouderde pakketten weer te geven. Met deze opdracht vindt u informatie in de kolommen Wanted, Latest en Location .
  4. Bijwerken met npm update:
    • Voor kleinere projecten (een paar afhankelijkheden in: package.jsonu kunt proberen npm update alle afhankelijkheden bij te werken en vervolgens uw tests uit te voeren.
    • Voor grotere projecten (met veel afhankelijkheden in de package.json: werk één pakket of pakketfamilie bij (zoals Next.js en React) en voer vervolgens de tests uit.
  5. npm audit: controleer of er geen kritieke of hoge beveiligingsproblemen zijn. Als er nog steeds beveiligingsproblemen bestaan, gebruikt npm update u deze met de pakketnaam en de primaire versie die wordt aanbevolen in npm audit.
  6. npm run test Opnieuw.
  7. Check uw package.json en package-lock.json.