npm7 bêta
Aujourd’hui, c’est avec une grande fierté que je reçois Ruy pour ce nouvel article invité ! Je sais qu’énormément d’entre vous utilise NPM quotidiennement et c’est un plaisir d’en entendre parler directement de l’équipe responsable !
Bonjour, je m’appelle Ruy Adorno et je suis Software Developer sur l’équipe npm cli chez GitHub 😊 Je viens vous raconter un peu plus en détail les changements à venir sur la nouvelle version de ce logiciel très populaire dans l’ensemble de la communauté web et JavaScript. Vous pouvez toujours me retrouver sur Twitter et Dev.to 😎
Salut à tous les développeurs web!
L’équipe npm a des très bonnes nouvelles à partager car la version 7 de npm passe finalement en phase bêta!
Il y a beaucoup de nouveautés qui s’en viennent dans cette version. Notamment le support aux workspaces, l’installation de peerDependencies par défaut, l’utilisation d’un nouveau système de cache pour l’accélération de certaines de ces sous-commandes, mais c’est surtout une mise à jour très centré sur la qualité de code dont plusieurs modules internes ont subi des modernisations majeures et toute la surface de code est désormais testé à 100%.
Nouveautés
Commençons par faire un aperçu rapide de ce qu’il y a de plus remarquable dans cette nouvelle version.
Workspaces
La fonctionnalité workspaces est très attendue par une grande partie des utilisateurs de npm. Il s’agit d’une nouvelle façon d’organiser le code source d’un projet en plusieurs modules à l’intérieur d’un seul repo Git, cela permet de les publier sur le registre npm, ou alors juste de les relier ensemble à travers de liens symboliques sur le système sans devoir les gérer manuellement avec npm link.
Améliorations de la vitesse
L’autre bonne nouvelle à partager c’est que maintenant npm se sert d’un système de cache pour accélérer certaines sous-commandes telles comme npm ls qui étaient remarquablement lentes dans la version précédente.
Breaking Changes
Selon le contrat de versions établi par Semver sur laquelle se fie l’écosystème de dépendances JavaScript, toutes les nouvelles versions majeures apportent des changements avec un potentiel de déranger les workflows de travail établis. C’est aussi le cas avec npm dont le changement de 6 à 7 amène aussi un potentiel de disruption pour ses usagers. Cela dit, ce n’est pas du tout le but de cette nouvelle version qui doit amener beaucoup plus de changements de code internes à npm.
Dans ce travail de modernisation, il y a notamment deux changements que nous semblent potentiellement disruptifs:
L’installation de peerDependencies
Les peerDependencies c’est un type spécial de déclaration de dépendances qui sert à établir une relation dont plusieurs modules installés sur un projet dépendent sur une version unique d’un module. L’utilisation de ce type de déclaration est particulièrement populaire dans l’écosystème de plusieurs frameworks comme par exemple React.
Jusqu’à date npm ignoraient l’existence de peerDependencies dans sa phase d’installation, ce qui forçaient les utilisateurs de modules à toujours déclarer manuellement une version spécifique de cette peerDependency dans le fichier package.json du projet.
À partir de cette nouvelle version 7, npm corrige ce comportement en rendant automatique la résolution et l’installation de toutes peerDependencies déclarées dans un arbre d’installation. Étant donné que cette correction a quand même un potentiel de briser le workflow de plusieurs projets, car de potentiels conflits passent inaperçus dans la version précédente, nous avons ajouté une nouvelle option (–legacy-peer-deps) qui permet d’ignorer tous les peerDependencies dans le but d’aider avec cette période de transition.
Variables d’environnement sur run-script
Avec le travail de modernisation du code source nous avons aussi identifié que npm run-script ajoutait beaucoup trop de variables d’environnement aux scripts exécutés, alors sur la version 7 la plupart de variables npm_package et npm_config ne seront plus disponibles en temps d’exécution de scripts.
En dehors de ces deux changements, il s’agit d’une version bêta et donc vous pourrez toujours trouver de vrais bugs. Dans ce cas la meilleure façon d’aider l’équipe npm, c’est d’aller sur le repo GitHub et envoyer un nouveau bug report.
Modernisation du code source
Une très grande partie de tout le travail fait à date pour la version 7 va dans la modernisation du code source et l’amélioration des outils pour la maintenance du projet.
Dans ce travail de modernisation, l’ensemble de la logique d’installation de dépendances qui vivait dans le code source de npm sera maintenant disponible sur un module à part nommé: @npmcli/arborist ce qui permet à d’autres applications de réutiliser la logique d’installation de modules npm de façon beaucoup plus simple. Ce nouveau module a aussi une couverture à 100% par de testes unitaires ce qui rend le projet beaucoup plus fiable et simple à maintenir. D’ailleurs la couverture de tests à 100% est maintenant la norme dans tous les modules gérés par l’équipe npm, incluant bien sûr, tous les sous-commandes de npm.
Le dernier changement à noter c’est npx qui maintenant vit dans le code source de npm et devient aussi une sous-commande nommée: npm exec. Cette nouvelle commande, pareil comme npm ls et toutes autres commandes de gestions de paquets ne font qu’utiliser l’API de @npmcli/arborist pour récupérer les informations sur l’arbre d’installation de modules et démontre aussi à quel point c’est le nouveau coeur du projet npm.
Conclusion
Et voilà que ça fait un peu beaucoup d’information d’un coup, mais j’espère que ça soit juste assez pour attirer l’attention de plusieurs d’entre vous d’aller essayer cette nouvelle version et aussi bien informer la communauté francophone de tous les changements qui s’en viennent. Pour installer la dernière version bêta, il ne suffit que d’exécuter la commande: npm i -g npm@next-7
Si jamais vous trouvez de problèmes, allez sur les « Issues » de notre repo sur GitHub pour nous laisser au courant et on essayera de régler ça avant la sortie officielle.