Comment choisir ses packages JavaScript ?
npm compte aujourd'hui un peu plus de 500 000 packages. C'est énorme et c'est ce qui fait la force du JavaScript. Cependant il est parfois difficile de s'y retrouver parmi une telle quantité. Quels critères vérifier pour choisir un package efficacement ? Comment être sûr que vos dépendances sont fiables ?
1. Exprimer son besoin
Avant toute chose, il faut savoir ce que l'on recherche. Prenons un exemple assez courant : je souhaite faire des formulaires en React.
Le premier réflexe est de rechercher sur Google. La communauté JavaScript utilise essentiellement l'anglais pour échanger, communiquer et documenter. Il faut donc taper la recherche dans la langue de Shakespeare. On recherche une librairie, on va donc ajouter "package". Notre phrase clef sera donc "react forms package" en utilisant google.com en anglais pour avoir des résultats plus pertinents.

Les résultats sont plutôt satisfaisants, mais Google ne dispose pas des informations nécessaires pour effectuer un classement pertinent.
2. Trouver des packages candidats
Npm
npm est le gestionnaire de paquets universel de JavaScript. Au lieu de passer par Google, autant le rechercher sur npm directement, npm classe les packages en fonction de leur réelle popularité. L'interface de recherche répond bien à notre besoin et les packages qui ressortent sont intéressants et pertinents.
Pour information, l'auto-complétion ne fonctionne pas très bien et les résultats sont rarement intéressants. Je vous déconseille donc de l'utiliser.

Cette recherche ne nous donne pas beaucoup d'informations, mais on a tout de même plusieurs éléments :
- Le nom du package
- Le pseudo du développeur ou de l'organisation
- Une courte description
C'est trop léger pour choisir un package mais ça permet d'avoir une idée de ce qui existe. On a par exemple "react-redux-form" qui peut être intéressant si j'utilise Redux et que je souhaite un système de formulaire couplé à Redux. On pourra dorénavant préciser notre recherche avec les mots clefs "redux forms".

Bon point: on a des résultats pertinents. Mauvais point: on manque d'information pour nous permettre de choisir sereinement. On pourrait cliquer sur chacun des packages et aller voir les informations mais ça nous prendrait un temps fou.
Yarn à la rescousse
En 2016, Algolia a offert à la communauté un outil de recheche intégré au site de Yarn. Yarn est une alternative à la ligne de commande npm. Mais tous deux utilisent le même registre de paquets : registry.npmjs.com.
Sur Yarn, la recherche se base uniquement sur le nom du package et non sur sa description. L'expérience est plus agréable et la puissance d'Algolia permet une recherche rapide et efficace avec accès direct aux informations suivantes :
- 🔥 Le nombre de téléchargements des 30 derniers jours
- 🆓 La licence
- ❤️ L'organisation derrière le projet
- 📅 La date de sortie de la dernière version
- 😸 Des liens directs vers GitHub, npm et Yarn

En un coup d'oeil on s'aperçoit que "redux-form" et "react-redux-form" pourraient faire l'affaire. Reste à savoir si ces packages sont sérieux. En cliquant sur le lien vous obtiendrez plus d'informations qui vous permettront d'auditer le package.
3. Auditer un package
Il n'y a pas de recette miracle pour déterminer si un projet est sérieux ou non mais certains critères peuvent vous indiquer si un projet est digne de confiance.
La popularité
Avant de plonger dans le code, un petit coup d'oeil aux stats vous permet de vous faire une idée sur la popularité du projet.

Cette statistique est à prendre avec des pincettes. Un package peut être de bonne qualité mais être peu utilisé et à l'inverse un package peut être très utilisé mais présenter de nombreux bugs. Un nombre élévé de téléchargements peut s'expliquer par une dépendance populaire, en effet si un projet très téléchargé utilise une dépendance, elle impactera le nombre de téléchargements de celle-ci. Combiné avec les autres statistiques, cela reste quand même un bon indicateur.
Les stars GitHub
Le nombre de stars d'un projet c'est avant tout le marketing du projet. Si le nombre de stars suit la tendance du nombre de téléchargements c'est bon signe. En revanche, si vous voyez beaucoup de stars et peu de téléchargements, c'est probablement que l'auteur a une bonne visiblité mais que la librairie n'a pas encore fait ses preuves.
Le nombre de packages dépendants
Le nombre de packages publiés sur npm ayant pour dépendance ce package. Problablement la statistique la plus intéressante. Elle est généralement liée aux deux autres et peut impacter fortement le nombre de téléchargements.
L'activité et les versions
L'activité

Un projet inactif, c'est mauvais signe. Le JavaScript est en perpétuelle évolution; même stable, un projet nécessite toujours de la maintenance.
Les versions

Yarn liste les trois dernières versions du package. On peut ainsi savoir si le projet est souvent mis à jour et si les bugs relevés sont corrigés. Il est aussi possible de savoir en un coup d'oeil si le projet suit les règles de versionning (cf. semver).
La documentation

La documentation est probablement la partie la plus importante dans le choix d'un package. Un package sans README c'est inacceptable, vous pouvez passer au suivant.
Un bon README doit vous aider à répondre aux questions suivantes :
- A quoi sert ce package ? Dans quel cas l'utiliser ?
- Quelles sont les fonctionnalités proposées ?
- Comment l'installer et le configurer ?
- Comment l'utiliser ?
Les badges
Il est commun d'ajouter des badges dans le README. En général on trouve un badge indiquant le statut des tests sur la branche principale ainsi que le coverage du projet. Le cas échéant, vous saurez au premier coup d'oeil si le projet est testé.
Autres informations
L'auteur du package
Il peut s'agir d'une organisation ou d'un développeur que vous connaissez, auquel cas c'est plutôt rassurant.
Site internet
Si le projet est accompagné d'un site internet c'est bon signe. Cela signifie que son auteur prend le temps de le promouvoir.
Analyse du GitHub du projet
Si après avoir scruté toutes ces informations vous avez encore des doutes quant à la fiabilité d'un projet, une analyse du GitHub vous aidera à prendre votre décision.
GitHub Pulse

La section "Pulse" de GitHub, accessible via l'onglet "Insights" vous donne un aperçu de la santé du projet. Vous y verrez le nombre d'issues ouvertes et fermées ainsi que les informations sur les pull-requests. Plus d'issues ouvertes que fermées c'est très mauvais signe, ça signifie que le projet n'est pas bien maintenu.
Le changelog
Un changelog décrit les changements entre les versions. Sur GitHub il peut être fait via GitHub Releases ou dans le fichier CHANGELOG.md du projet. Si vous n'en trouvez pas c'est un problème car vous ne pourrez pas mettre à jour cette dépendance sans croiser les doigts.
Le code
En dernier recours, vous pouvez vous plonger dans le code. Plusieurs critères vous permettent de savoir si le code du projet est sain :
- La cohérence du projet
- La séparation des reponsabilités
- La lisibilité du code
- Les commentaires
- Les tests unitaires, présence et qualité
Vous savez maintenant comment choisir un package de façon optimale !
Quels critères sont les plus importants pour vous ? Quel est votre algorithme de recherche et de sélection ?