Updates van afhankelijkheden in uw Node.js-project beheren
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 denpm shrinkwrap
CLI-opdracht en is vergelijkbaar metpackage-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 hetnpm-shrinkwrap.json
bestand compatibel met oudere versies van npm (versie 2-4), terwijlpackage-lock.json
het compatibel is met npm versie 5 en hoger. Daarom kunt u vindennpm-shrinkwrap.json
bij het onderhouden van verouderde codebases. De meeste ontwikkelaars gebruikenpackage-lock.json
in plaats vannpm-shrinkwrap.json
. Een uitzondering waarbijnpm-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
enpackage-lock.json
bestanden akkoord gaan met een versieregel, is er geen conflict. Als u bijvoorbeeldpackage.json
versie 1.4 opgeeft enpackage-lock.json
opgeeft1.x
, wordt versie 1.4 geïnstalleerd. - Als
package.json
een specifiekere versie wordt opgegeven,1.8.x
wordt hetpackage-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 --force
veroorzaken 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.
Aanbevolen updatewerkstroom
De aanbevolen werkstroom voor updates is:
npm run test
: Controleer of uw bestaande tests zijn geslaagd voordat u dit updateproces start.npm audit
: om te controleren op beveiligingsproblemen in de huidige versie die u gebruikt. De informatie van waaruitnpm audit
kan worden aanbevolen om bij te werken naar een primaire versie. Controleer de belangrijke wijzigingen zorgvuldig als deze worden vermeld.npm outdated
: om alle verouderde pakketten weer te geven. Met deze opdracht vindt u informatie in de kolommen Wanted, Latest en Location .- Bijwerken met
npm update
:- Voor kleinere projecten (een paar afhankelijkheden in:
package.json
u kunt proberennpm 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.
- Voor kleinere projecten (een paar afhankelijkheden in:
npm audit
: controleer of er geen kritieke of hoge beveiligingsproblemen zijn. Als er nog steeds beveiligingsproblemen bestaan, gebruiktnpm update
u deze met de pakketnaam en de primaire versie die wordt aanbevolen innpm audit
.npm run test
Opnieuw.- Check uw
package.json
enpackage-lock.json
.