Gestion des mises à jour de dépendances dans un projet Node.js
En tant que développeur chez Tailwind Traders, il est important de maintenir nos packages à jour. Cela permet de s’assurer que nous utilisons les dernières fonctionnalités et les derniers correctifs. Il nous aide également à éviter les vulnérabilités de sécurité. Dans cette unité, vous allez apprendre à gérer les dépendances dans un projet Node.js. Vous allez apprendre à mettre à jour des packages, à utiliser le contrôle de version sémantique et à gérer les problèmes de sécurité.
Considérations avant la mise à jour d’un package
Avant de mettre à jour un package, envisagez les éléments suivants :
- Type de mise à jour : Comprenez s’il s’agit d’un correctif mineur, d’une nouvelle fonctionnalité ou d’une modification majeure susceptible d’interrompre votre code. Le contrôle de version sémantique peut vous aider à identifier cela.
- Configuration de projet : Vérifiez que votre projet est défini pour recevoir uniquement les mises à jour souhaitées pour éviter les modifications inattendues.
- Sécurité : Tenez compte des vulnérabilités potentielles. Utilisez la fonctionnalité d’audit de npm pour identifier et mettre à jour des packages problématiques.
- Test : Vérifiez que vos tests réussissent après la mise à jour. Si vous n’avez pas de tests, envisagez de les ajouter. Votre application peut se comporter différemment après une mise à jour et les tests valident le comportement correct .
Gestion sémantique des versions pour définir le comportement de mise à jour
Le contrôle de version sémantique est une norme clé dans le développement de logiciels. Il est essentiel pour la publication et l’utilisation de packages npm. Il permet de gérer les risques de mise à jour en indiquant le type de modifications dans une nouvelle version. Un numéro de version comporte des sections spécifiques pour refléter ces modifications :
Version Type | Position | Syntaxe | Que se passe-t-il ? | Mise à jour de l’approche |
---|---|---|---|---|
Major | 1st | x.0.0 ou * | Les modifications de la version 1.0.0 à 2.0.0 indiquent des changements cassants. Les ajustements de code peuvent être nécessaires. | À l’aise avec les mises à jour immédiates de la dernière version majeure, reconnaissant les modifications potentielles du code. |
Minor | 2nd | 1.x.1 ou ^ | Passe de 1.2.9 à 1.3.0 introduisent de nouvelles fonctionnalités. Le code existant doit toujours fonctionner. Les mises à jour sont généralement sécurisées. | Ouvrez les nouvelles fonctionnalités, mais pas les changements cassants. |
Patch | 3e | 1.1.x ou ~ | Passe de 1.0.7 à 1.0.8 corrections de bogues moyennes. Les mises à jour doivent être sécurisées. | Acceptation des correctifs de bogues. |
Pour les petits projets Node.js, vous pouvez librement effectuer une mise à jour vers les dernières versions. Mais pour les projets plus volumineux, les mises à jour ont besoin d’une réflexion minutieuse et ne sont pas toujours automatiques. En règle générale, la mise à jour de dépendances plus petites, avec moins de leurs propres dépendances, facilite le processus.
Avant de mettre à jour une ou plusieurs dépendances, vous devez configurer votre fichier package.json
afin d’obtenir un comportement prévisible lorsque vous exécutez la commande npm update <name of dependency>
. Node.js utilise un ensemble de symboles qui vous permet de définir la façon dont vos packages doivent être mis à jour.
Mettre à jour un package avec l’interface CLI npm
Vous pouvez installer un package à l’aide de la commande install
ou update
dans npm. Ces commandes sont désormais principalement interchangeables. Pour mettre à jour un package, vous utilisez généralement :
- Dernière version :
npm update <package name>@latest
. - Version spécifique :
npm update <package name>@<optional version number>
.
Le processus de mise à jour dépend de deux facteurs :
- Argument de version : Si un numéro de version est spécifié dans la commande
npm update
, npm récupère et installe cette version spécifique. - Entrée de fichier manifeste : Le fichier
package.json
contient des règles pour la mise à jour des dépendances. Par exemple,"dependencyName": "1.1.x"
signifie que npm récupère la version qui correspond à ce modèle.
Comprendre le contrôle de version
Trois fichiers gèrent le contrôle de version de dépendances :
package.json
: Ce fichier définit la version du package que vous souhaitez utiliser. Il s’agit du fichier manifeste de votre projet. Il contient les métadonnées de votre projet, notamment les dépendances.package-lock.json
: Ce fichier décrit l’arborescence exacte générée, de sorte que les installations suivantes puissent générer des arborescences identiques, quelles que soient les mises à jour de dépendance intermédiaires. Ce fichier est destiné à être validé dans des référentiels sources.shrinkwrap.json
: Ce fichier est créé par la commande CLInpm shrinkwrap
et est similaire àpackage-lock.json
. La principale différence entre les commandes réside dans le fait que les utilisateurs ne peuvent pas remplacer les versions de package spécifiées dansnpm-shrinkwrap.json
. En outre, le fichiernpm-shrinkwrap.json
est compatible avec les versions antérieures de npm (versions 2-4), tandis quepackage-lock.json
est compatible avec version 5 de npm et ultérieure. Par conséquent, vous pouvez trouvernpm-shrinkwrap.json
lors de la maintenance des codebases héritées. La plupart des développeurs utiliserontpackage-lock.json
plutôt quenpm-shrinkwrap.json
. Une exception dans laquelle il est préférable d’utilisernpm-shrinkwrap.json
correspond aux installations globales de démons et d’outils de ligne de commande dans lesquelles les développeurs souhaitent vérifier que les versions exactes des packages spécifiés sont installées.
Exemple de détermination de la version de package
Envisagez un scénario dans lequel vous utilisez la version 1.2 dans votre code, puis la version 1.4 est publiée, ce qui interrompt votre code. Si quelqu’un installe votre application à ce stade, il obtient une application non fonctionnelle. Toutefois, s’il existe un fichier package-lock.json
spécifiant la version 1.2, cette version sera installée.
Voici un exemple de détermination de la version d’un package installée :
- Si les fichiers
package.json
etpackage-lock.json
conviennent d’une règle de version, il n’existe aucun conflit. Par exemple, sipackage.json
spécifie1.x
etpackage-lock.json
spécifie la version 1.4, la version 1.4 est installée. - Si
package.json
spécifie une version plus spécifique comme1.8.x
, elle remplace le fichierpackage-lock.json
, qui indique l’ancienne version de la version 1.4. Dans ce cas, la version 1.8.0 ou une version ultérieure du correctif sera installée, le cas échéant.
Rechercher et mettre à jour des packages obsolètes avec npm obsolète
La commande npm outdated
est utilisée pour identifier les packages qui ont des versions plus récentes disponibles. Lors de l’exécution, il fournit la liste de ces packages obsolètes :
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
Le sortie comporte les colonnes suivantes :
Colonne | Description |
---|---|
Package | Package obsolète. |
Actuel | Version installée actuelle du package. |
Voulu | Dernière version qui correspond au modèle sémantique que vous avez spécifié dans le fichier package.json . |
Plus récent | La version la plus récente du package. |
Emplacement | Emplacement de la dépendance de package. La commande outdated analyse tous les packages installés dans les différents dossiers node_modules . |
Dépend de | Package qui a la dépendance. |
Gérer les problèmes de sécurité avec l’audit npm
Chaque fois que vous installez ou mettez à jour un package, vous obtenez une réponse de journal qui vous indique quelle version a été installée et s’il existe des vulnérabilités. Le journal répertorie les vulnérabilités. Si vous avez des vulnérabilités critiques ou élevées, vous devez mettre à jour le package.
Voici un exemple de réponse de journal :
+ 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
Pour résoudre un problème et appliquer une mise à jour, vous pouvez exécuter la commande npm audit
. Cette commande liste chaque vulnérabilité.
La commande npm audit fix
tente de résoudre les vulnérabilités en effectuant une mise à niveau vers une version mineure où le problème n’existe pas. Toutefois, cela peut ne pas être disponible si le correctif se trouve réellement dans la prochaine version principale.
Dans ce cas, vous devrez peut-être utiliser npm audit fix --force
, ce qui peut introduire des modifications cassants en mettant à jour vers la version principale. L’exécution de cette commande est une décision que vous devez prendre avec soin. Vous devez connaître les changements cassants et utiliser npm update
pour mettre à jour votre code, y compris les vulnérabilités.
Une vulnérabilité est une faille de code qui peut être exploitée par des attaquants pour effectuer des actions malveillantes, ce qui peut compromettre vos données et vos systèmes. Il est essentiel de résoudre ces vulnérabilités rapidement.
Compte tenu de la détection fréquente des vulnérabilités, GitHub dispose d’une fonctionnalité qui analyse les référentiels et crée automatiquement des demandes de tirage suggérant des mises à niveau vers des versions plus sûres. L’exécution régulière de npm audit
est une bonne pratique pour identifier et corriger les vulnérabilités, contribuant à la sécurité globale de votre projet.
Flux de travail de mise à jour recommandé
Le flux de travail recommandé pour les mises à jour est le suivant :
npm run test
: Vérifiez que vos tests existants réussissent avant de démarrer ce processus de mise à jour.npm audit
: pour rechercher les vulnérabilités dans la version actuelle que vous utilisez. Les informations denpm audit
peuvent recommander la mise à jour vers une version majeure. Vous devez examiner attentivement les changements cassants si des modifications sont répertoriées.npm outdated
: pour répertorier tous les packages obsolètes. Cette commande fournit des informations dans les colonnes Wanted, Latest et Location.- Mise à jour avec
npm update
:- Pour les projets plus petits (quelques dépendances dans le
package.json
: vous pouvez essayernpm update
de mettre à jour toutes les dépendances, puis d’exécuter vos tests. - Pour les projets plus volumineux (avec de nombreuses dépendances dans
package.json
: mettez à jour un package ou une famille de packages unique (par exemple, Next.js et React), puis exécutez les tests.
- Pour les projets plus petits (quelques dépendances dans le
npm audit
: vérifiez qu’il n’y a pas de vulnérabilités critiques ou élevées. Si des vulnérabilités existent toujours, utiliseznpm update
avec le nom du package et la version principale recommandée dansnpm audit
.npm run test
encore.- Vérifiez votre
package.json
etpackage-lock.json
.