npm v7.0.0 est disponible avec de nouvelles fonctionnalités, dont les Workspaces, le support pour yarn.lock
et des améliorations de performance

npm (Node Package Manager) est un gestionnaire de paquets pour le langage JavaScript. Il constitue le plus grand registre de logiciel au monde, avec des millions de développeurs ; 1,3 million de paquets et 75 milliards de téléchargements de paquets par mois. npm v7.0.0 a été publié un peu plus tôt ce mois avec plusieurs nouvelles fonctionnalités, des améliorations de performance et quelques changements de ruptures. Cette version de npm a été livrée avec la dernière version du runtime Node.js, Node.js 15.0, qui a été publiée la semaine dernière.

npm 7 inclut un lot de nouvelles fonctionnalités que l’équipe en charge de son développement qualifie de “passionnantes”. Voici ce dont il s’agit dans cette nouvelle version de npm :

Workspaces

Selon l'équipe, il s’agit d’une fonctionnalité demandée par la communauté depuis longtemps. La principale motivation derrière cette RFC est de réaliser pleinement un ensemble de fonctionnalités pour gérer plusieurs paquets qui peuvent ou non être utilisés ensemble. Selon l’équipe, le nom “espaces de travail” est déjà bien établi dans la communauté, Yarn et Pnpm implémentant des fonctionnalités similaires sous ce même nom. Pour cela, elle a choisi de le réutiliser par souci de simplicité pour l'ensemble de la communauté concernée.

Les espaces de travail sont un ensemble de fonctionnalités de la CLI npm (interface de ligne de commande npm) qui vous permet de gérer plusieurs paquets à partir d'un seul paquet racine de haut niveau.

Installation automatique des dépendances paires

Les dépendances paires sont un type spécial de dépendances auquel vous serez confronté à partir du moment où vous publiez votre propre package. Lorsque vous avez une dépendance paire, cela signifie que votre paquet a besoin d’une dépendance qui doit être exactement la même dépendance que la personne qui est en train d'installer votre paquet. C’est utile pour des paquets comme react qui ont besoin d’avoir une seule copie de “react-dom” qui sera également utilisée par la personne l’installant. En raison de ces difficultés, les dépendances paires ne sont pas installées par défaut avec npm.


Au lieu que les choses se passent ainsi, il revient à l’utilisateur d'installer et de gérer lui-même les dépendances paires, à la suite d’un avertissement. Le message est souvent mal interprété comme un problème, et signalé aux responsables du paquet, qui en réponse, omettent parfois la dépendance paire, la traitant effectivement comme une dépendance facultative, mais sans vérification de sa plage de version ou de sa validité. L'installateur npm n’étant pas conscient de la dépendance paire, il peut concevoir une arborescence qui cause des problèmes lorsque des dépendances paires sont présentes.

L'algorithme proposé dans npm v7.0.0 traite ces problèmes, en faisant des dépendances paires un concept de première classe et une exigence pour la validité de l’arborescence des paquets. Selon l’équipe de développement, le nouvel algorithme des dépendances paires garantit qu'une dépendance paire correctement adaptée est trouvée à l'emplacement de la dépendance paire ou au-dessus dans l'arbre node_modules.

Package-lock v2 et support pour yarn.lock

Le nouveau format de verrouillage des paquets déverrouillera la possibilité de faire des constructions reproductibles de manière déterministe et comprend tout ce dont npm aura besoin pour construire entièrement l'arbore des paquets. Avant que les fichiers yarn.lock de npm 7 ne soient ignorés, la CLI peut maintenant utiliser yarn.lock comme source de métadonnées de paquets et de conseils de résolution.

Ce qui est vieux est à nouveau neuf

Les éléments internes de npm ont été considérablement remaniés. Selon l’équipe, un effort important a été fait pour séparer les préoccupations. Par exemple, l'inspection et la gestion de l'arbre node_modules ont été déplacées vers le module Arborist. Ces changements internes permettront de garantir que la base de code npm est plus fiable dans le temps et plus facile à maintenir. « Avec moins de bogues et un cycle d'itération plus rapide, nous serons en mesure de livrer les mises à jour de npm plus rapidement que jamais », a déclaré l’équipe.

Les changements de rupture

Malgré la révision massive des éléments internes de npm, l'équipe a travaillé sans relâche pour s'assurer que les perturbations de la plupart des flux de travail seront minimales. Cela dit, certains changements de rupture sont nécessaires pour améliorer l'expérience globale des développeurs. Parmi les changements de rupture dans npm 7.0.0 figurent :

  • l'installation automatique de dépendances paires (bien que cette fonctionnalité soit un nouveau comportement souhaitable, elle peut potentiellement interrompre certains flux de travail) ;
  • npm utilise le champ package.exports, ce qui fait qu'il n'est plus possible d'exiger les modules internes de npm ;
  • npx a été complètement réécrit pour utiliser la commande npm exec. Les fonctionnalités ont été modifiées de diverses manières, la plus notable étant une invite si le module que vous essayez d'exécuter n'est pas encore installé ;
  • la sortie de l'audit npm a considérablement changé, tant dans le style de sortie lisible par l'homme que dans celui de --json.

Source : npm 7.0.0

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi

Node.js 15 est disponible et apporte le support de npm 7, une implémentation expérimentale AbortController, ainsi qu'une mise à jour du moteur JavaScript V8 qui passe en version 8.6

npm en version 5.7.0 est maintenant disponible, l'alignement vers les pratiques DevOps se poursuit

npm 5.7.0 retiré de la circulation à peine deux jours après sa sortie, la version 5.7.1 publiée pour corriger un problème critique

Un projet Node.js sur deux audité par les outils de npm aurait au moins une vulnérabilité, une sur dix d'entre elles est critique