Node 04 - đ§ Rechercher et choisir un paquet npm (ou pas !)
Objectifs
- Remettre en question la réelle nécessité d'ajout d'un paquet.
- Rechercher et choisir des paquets de maniĂšre efficace.
- Comprendre et limiter les risques associés aux paquets NPM.
Pré-requis
- 1
Valider la quĂȘte suivante
QuĂȘtes liĂ©es
Introduction
Imaginons que nous voulons crĂ©er un logiciel de facturation et que nous devons gĂ©nĂ©rer des fichiers PDF. Nous pourrions passer des semaines ou des mois Ă implĂ©menter nous-mĂȘmes toute la logique liĂ©e Ă la gĂ©nĂ©ration de fichier PDF. Ou bien, nous pourrions chercher sur npmjs.com si quelqu'un a dĂ©jĂ fait quelque chose de similaire. Cela nous permettrait de construire notre application avec, et de gagner un temps prĂ©cieux pour faire d'autres choses !
NPM est un outil formidable car il permet à la communauté JS de partager du code afin de construire des applications plus vite. Mais la gestion des dépendances s'accompagne de certains problÚmes et piÚges dont tu dois avoir conscience.
Sommaire
Tu en as vraiment besoin ?
La premiĂšre question Ă se poser est la suivante : "Ai-je vraiment besoin d'un paquet pour celĂ " ?
Comme tu le verras rapidement, les dépendances externes comportent certains risques et génÚrent parfois une dette technique. Il est donc préférable de les limiter dans nos projets.
D'un autre cÎté, de trÚs bonnes dépendances peuvent nous faire gagner beaucoup de temps lors de la construction et de la maintenance de l'application.
C'est toujours un dilemme : Rechercher un paquet, lire la documentation, essayer plusieurs options... Est-ce du temps de gagnĂ© ? Combien de temps cela prendrait pour apporter une solution similaire sans le paquet ? Si le paquet ne te fait gagner que quelques lignes de code, tu devrais peut-ĂȘtre reconsidĂ©rer les choses.
Par exemple, jette un coup d'Ćil Ă ce paquet. Ce qu'il fait est trĂšs simple : il exporte une fonction qui renvoie true si le nombre passĂ© en argument est pair, et false sinon. Nous pouvons littĂ©ralement Ă©crire quelque chose de similaire avec quelques lignes de code :
function isEven(n) {
return n % 2 === 0;
}
Si tu fais quelques recherches, tu découvriras que le paquet is-even effectue des vérifications supplémentaires sur l'entrée. Mais en avons-nous vraiment besoin dans notre cas ?
Voici un site web qui propose des alternatives Ă l'utilisation de certaines bibliothĂšques :
You might actually need this website !
Pour faire court !
Est-ce que c'est pertinent d'installer une dépendance qui permet d'économiser 10 lignes de code "simples" ? Probablement pas.
La recherche d'une bibliothÚque pour la génération de fichiers PDF en vaut-elle la peine ? Eh bien, probablement oui !
Rechercher et choisir des paquets.
Cherchons "pdf generation" sur le site de NPM.

Tu peux voir que plus d'une centaine de paquets correspondent à notre recherche et peuvent potentiellement nous aider à répondre à notre besoin. PlutÎt chouette, à premiÚre vue !
C'est la beautĂ© de l'open source : la communautĂ© partage des morceaux de code prĂȘts Ă l'emploi. Cela permet aux autres membres de la communautĂ© de gagner un temps considĂ©rable.
Génial, mais comment choisir parmi tant de paquets ? Comment savoir si un paquet va m'aider à résoudre mon problÚme ? Est-il toujours gratuit ? Y a-t-il des risques ?
Avant de répondre à ces questions, allons sur la page de ce paquet et regardons les détails. Nous pouvons voir des informations trÚs utiles :
- La description du paquet : les problÚmes qu'il permet de résoudre, les principales fonctionnalités actuellement supportées, etc.
- Le processus d'installation.
- Des exemples d'utilisation.
- Un lien vers une documentation plus détaillée.
- Des informations sur la licence.
- à droite de la page : le site officiel, le nombre de téléchargements par semaine, la version actuelle, etc.
Comment savoir si un paquet va me permettre de résoudre mes problÚmes ?
Lis la description du paquet, et surtout les exemples pour voir comment le paquet fonctionne exactement. Dans notre exemple, nous pouvons voir que ce paquet semble ĂȘtre un bon choix car il nous permettra de crĂ©er un document PDF, d'insĂ©rer du texte, d'ajuster les styles des Ă©lĂ©ments et d'enregistrer un fichier PDF sur le disque. Nous pouvons voir tout cela juste en regardant les exemples dans les dĂ©tails du paquet :

Cela peut répondre à notre besoin pour notre application de facturation.
Comment choisir entre plusieurs paquets ?
Si plusieurs paquets traitent le mĂȘme problĂšme, aucune mĂ©thode magique n'existe pour trouver le meilleur (Ă part les tester tous dans tous les cas d'utilisation, mais tu n'auras probablement pas le temps pour cela !)

Cependant, un bon conseil peut ĂȘtre d'essayer les paquets avec le plus grand nombre de tĂ©lĂ©chargements hebdomadaires ou ceux qui semblent les plus stables et maintenus. Pour cela, n'hĂ©site pas Ă regarder les issues du projet et d'autres statistiques comme l'activitĂ© des commits sur GitHub !

Plus le paquet est téléchargé et soutenu par la communauté, plus il est probable que ce paquet soit réellement "bon" et plus tu pourras obtenir de l'aide lors de son utilisation.
Au moment oĂč j'Ă©cris cette quĂȘte, le paquet mentionnĂ© ci-dessus compte plus de 470 000 tĂ©lĂ©chargements hebdomadaires. C'est un chiffre tout Ă fait dĂ©cent ! Nous pouvons ĂȘtre sĂ»rs que ce paquet a dĂ©jĂ Ă©tĂ© intĂ©grĂ© dans de vrais projets et que la communautĂ© qui l'utilise est assez importante. Cela devrait ĂȘtre relativement facile d'obtenir de l'aide si quelque chose ne va pas ou si nous devons modifier quelque chose.
Essaie-tu de résoudre le bon problÚme ?
Et si notre problÚme était plus spécifique ? Au lieu de "nous avons besoin de générer des fichiers PDF", nous pourrions avoir des informations supplémentaires comme "nous avons besoin de générer des fichiers PDF et nous avons déjà des fichiers HTML/CSS correspondants". Ensuite, nous pourrions rechercher "html pdf" au lieu de "pdf" ou "pdf generation" afin de trouver quelque chose qui convertirait nos fichiers existants.
Et si le problĂšme Ă©tait plus gĂ©nĂ©ral ? Et si le besoin rĂ©el Ă©tait de gĂ©nĂ©rer des factures qui pourraient ĂȘtre facilement imprimĂ©es, pas nĂ©cessairement en PDF ? Dans ce cas, une option alternative pourrait ĂȘtre d'adapter simplement un fichier CSS pour les supports d'impression et de ne pas gĂ©nĂ©rer de PDF du tout !
Dans la mesure du possible, n'hĂ©site pas Ă remettre en question le problĂšme lui-mĂȘme avant de te prĂ©cipiter dans la recherche et l'adoption d'une solution donnĂ©e. Peut-ĂȘtre pourras-tu gagner du temps en reformulant ton problĂšme dâune maniĂšre plus pertinente.
ProblĂšmes courants avec les paquets NPM
Est-ce totalement gratuit ? Si oui, qu'est-ce que cela signifie ?
Les paquets publics présents sur le site de NPM sont tous open source, ce qui peut signifier, dans une certaine mesure, "libre".
Toutefois, selon le fondateur de la Free Software Foundation, Richard Stallman, un logiciel "libre" ne signifie pas nĂ©cessairement quâil est gratuit "free as in free beer".

NĂ©anmoins, tu verras que la grande majoritĂ© des paquets sur NPM sont effectivement utilisables sans coĂ»t monĂ©taire. Pour ĂȘtre sĂ»r, tu peux vĂ©rifier les informations de la licence du paquet pour voir ce qui est autorisĂ© ou non.
Dans notre exemple, le paquet est placé sous la licence MIT, qui est trÚs permissive. Donc oui, nous pourrons utiliser ce paquet comme nous le souhaitons dans notre application sans verser de rémunération aux auteurs du paquet.
MĂȘme si nous ne devons pas payer de l'argent pour utiliser ce paquet, d'autres coĂ»ts peuvent exister. Par exemple, si je choisis ce paquet, mes collĂšgues et moi devrons apprendre Ă utiliser la bibliothĂšque, ce qui nous coĂ»tera du temps (qui peut Ă©ventuellement se traduire en argent).
De plus, tu es sur le point de voir qu'en installant ce paquet, nous prenons également certains risques.
Un article sur le coût des paquets NPM que vous ajoutez à un projet
(Oui, tu devrais)
Un outil pour découvrir les licences des paquets que tu utilises
Quels sont les risques ?
TrÚs bonne question. Comme tout le monde peut publier des paquets NPM, il peut y avoir des manques en termes de qualité du code, de fiabilité, de documentation, etc.
N'oublie pas que beaucoup de logiciels open source sont fournis sans aucune garantie.
Pire, certains paquets prĂ©sentent des vulnĂ©rabilitĂ©s de sĂ©curitĂ© et certains d'entre eux sont mĂȘme malveillants đż.
Les paquets sont du code écrit par "quelqu'un d'autre" (appelons-le/la Bobbie) et ce code sera exécuté sur une machine (que ce soit ta machine personnelle ou un serveur distant).
La plupart des "Bobbies" sont bienveillants et fournissent du code utile, mais pas tous. Certains ont des arriÚre-pensées et veulent que tu exécutes leur code. Quelques exemples de ce que pourrait vouloir faire un "Bobbie" mal intentionné :
- voler tes données
- ouvrir une brÚche de sécurité sur ton serveur
- utiliser ton serveur pour lui-mĂȘme (minage de crypto-monnaies, par exemple).
L'utilisation de paquets peu connus ou nouveaux peut t'exposer à ces "méchants Bobbies". C'est un cas rare, mais pas impossible.
C'est pourquoi tu devrais toujours t'en tenir aux paquets bien connus, ou à ceux qui ont été audités par la communauté.
Nous pouvons aussi parler du risque de nuire aux performances. Pour faire court : certaines dépendances sont trÚs lourdes et peuvent ralentir ton application ou tes outils de développement.
Parce que les risques sont réels, tu dois faire attention lorsque tu décides d'ajouter une dépendance à un projet.
âQuizz
true|||true|||true
# Nous devons résoudre un problÚme spécifique sur un projet...
[] Cherchons et essayons tous les paquets liés à ce problÚme sur NPM.
[x] Remettons en question la pertinence du problĂšme lui-mĂȘme, puis si les avantages de l'ajout d'un paquet peuvent potentiellement dĂ©passer les inconvĂ©nients, recherchons et essayons les "paquets sĂ»rs".
# Quels peuvent ĂȘtre les signes d'un "bon paquet" ?
[x] La documentation est bien faite et facile Ă lire.
[] Il est tout nouveau et tout le monde en parle.
[x] Il y a une grande communauté derriÚre lui (beaucoup de téléchargements hebdomadaires, beaucoup d'étoiles Github).
[x] Les problÚmes importants qui pourraient nous affecter sont traités rapidement.
[] Le dernier commit sur le github du paquet a été fait il y a plus de 5 ans.
[x] Le paquet est testé, avec une bonne couverture de code.
[] L'auteur est célÚbre.
[x] Des projets importants reposent sur ce paquet.
# Il y a des paquets malveillants sur NPM
[x] Vrai
[] Faux
# Avec les paquets NPM, nous pouvons faire ce que nous voulons sans payer quoi que ce soit.
[] Oui, ils sont tous open-source !
[x] Non, nous devons vérifier les licences pour nous assurer que nous pouvons légalement faire ce que nous voulons.
# L'ajout d'une dépendance pourrait nuire aux performances de notre application.
[x] Vrai
[] Faux
# Tous les paquets sont accompagnés d'une assurance de qualité et d'une assistance.
[x] Non, la grande majorité est livrée sans aucune garantie.
[] Oui
# Nous devons éviter les dépendances dans nos projets ?
[] Non
[] Oui
[x] Les "bonnes" dĂ©pendances sont en fait utiles et valent la peine d'ĂȘtre utilisĂ©es, mais il faut y rĂ©flĂ©chir Ă deux fois avant d'en ajouter une Ă un projet, car elles peuvent aussi avoir des inconvĂ©nients.