npm - Des fonctionnalités et outils pour booster l'expérience développeur

illustration de l'article

Cover Photo by Barn Images on Unsplash

Dans le précédent article de cette série, nous avons pu voir les mécanismes autour du versioning de nos librairies via npm

Partie 2 : Outils et fonctionnalités pour pimper votre expérience npm

Commandes npm

NPX

Commande incluse dans Node qui vous permet d’exécuter un package. Cette commande va rechercher la présence du package en local (dans les dépendances du projet courant, ou dans une installation globale). Si elle ne le trouve pas, elle est capable de réaliser un téléchargement temporaire pour une exécution à la volée !

npx my-package

Commande très utile pour tester des packages de type cli ou autres outils indépendants de votre projet (exemples dans la suite de l’article !!)

npm audit

Vérifiez les failles de sécurité potentiellement présentes dans votre projet. Cette commande permet de réaliser une analyse de votre arbre de dépendance, mais aussi de proposer des correctifs en mettant à jour certains packages. Vous avez sûrement déjà vu ce genre de rapport, qui est automatiquement exécuté et affiché à la fin d’un npm install

Analyse

Tips: Utilisez la commande npm audit --omit=dev pour exclure les devDependencies

audit-analyse.png Exemple de résultat d’analyse via la commande npm audit

Corrections

La commande est capable de proposer des corrections de version pour réduire au maximum les failles de sécurité présentes :

  • Montée de version (si semver compatible => x.Y.Z)
  • Montée de version majeure (manuel, peut contenir des breaking-changes)

En utilisant la sous-commande npm audit fix, l’ensemble des patchs semver compatible sont appliqués automatiquement :

  • En coulisse, lance un npm install, le package-lock.json est donc mis à jour aussi
  • On peut utiliser l’option --force pour installer les updates majeures

audit-correctif.png Exemple de résultat de correctif via la commande npm audit fix

Packages et config pour booster npm

nvm : Gérer plusieurs versions de Node

Cet outil permet une gestion simplifiée des différentes versions de node entre plusieurs projets. Il est compatible sur tous les OS (macOS, linux) et même windows (pas le même outil, mais un équivalent)

nvm install 14.7.0 # installation d'une version spécifique
nvm install 10.24.1
nvm use 10.24.1 # utilisation d'une version installée pour le répertoire courant

Il est possible d’aller encore plus loin avec un fichier .nvmrc contenant la version de node attendue. Un simple nvm use permet de switcher sur la version indiquée.
On peut aussi ajouter à son terminal un script pour switcher automatiquement de version 🤩

Note : le fichier de config est automatiquement détecté par IntelliJ

Allez plus loin

Pour les utilisateurs macOS et linux, vous pouvez aussi passer à l’étape supérieure en utilisant l’outil asdf qui permet la gestion de version d’un énorme panel d’outils (node, java, go, postgres, yarn, etc…)

La documentation complète ici

engines : Forcer une version de node

Il est possible de donner des indications quant aux versions utilisées sur un projet. Il suffit de rajouter un bloc de configuration dans le package.json, ainsi qu’un fichier à la racine du projet, .npmrc, avec pour contenu engine-strict=true

"engines": {
  "node": ">=18.0.0",
  "npm": ">= 8.15.0"
}

engines.png Exemple de blocage si on utilise des versions de node ou npm non compatibles avec celles spécifiées

only-allow : Forcer un package manager

Vous connaissez peut-être des gestionnaires de package autre que npm : yarn, pnpm, .. Chacun possède une gestion du lockfile différente (pour npm, c’est le package-lock.json)

Il peut être utile de bloquer l’utilisation d’un gestionnaire différent, afin de s’assurer une même résolution au sein d’une équipe.

Pour ma part, je rajoute un script au package.json, nommé preinstall. C’est un nom spécifique qui lui permet d’être exécuté avant chaque npm install. J’utilise le package only-allow qui fait échouer l’installation en cas de mauvais gestionnaire utilisé. (Vous remarquerez aussi l’utilisation de npx 🙄)

"scripts": {
  "preinstall": "npx only-allow npm"
}

only-allow.png Exemple de blocage si on utilise yarn, en considérant un package.json avec le script indiqué précédemment

npm-check : Vérification des versions de nos packages

Ce package vous permet d’afficher un rapport concernant les nouvelles versions de vos dépendances, ainsi que des propositions de mise à jour.

  • ⚠️ Pas de respect du semver, latest visé

Il permet aussi de détecter des packages non utilisés (vérifiez avant de supprimer, d’expérience, les faux positifs sont courants)

npm-check-analyse.png

Il existe un mode interactif, qui vous permet de mettre à jour plusieurs packages d’un coup :

  • npx npm-check -u
  • En coulisse, lance une commande npm install <package>@<version>

npm-check-upgrade.png

Résumé

Dans cette seconde partie, j’ai pu vous présenter plusieurs outils/packages pour vous aider dans vos projets node :

  1. npm audit pour l’analyse des failles de sécurité dans nos packages ;
  2. npx pour exécuter des packages ;
  3. nvm pour gérer plusieurs versions de node (et son equivalent plus global asdf) ;
  4. config engines pour spécifier les versions de node et npm ;
  5. only-allow pour spécifier le gestionnaire de package à utiliser ;
  6. npm-check pour verifier rapidement des versions des packages.

Vous n’êtes pas obligés d’utiliser tous ces outils pour être efficace, prenez ceux qui vont répondre à vos besoins et résoudre vos problématiques.

Date

Auteur

Avatar Vivien AUGUY

Vivien AUGUY

Software Crafter

Catégories

craft front

Tags

#npm #Node