8 modules npm à connaître
Le registre npm est une mine d’or lorsqu’on cherche un module qui doit faire quelque chose de spécifique. D’ailleurs, je trouve aussi personnellement que son client en invite de commande est un des plus simple et convivial parmi tous les gestionnaires de paquets disponibles. Par contre, il est aussi rempli de modules en version 0.0.1-alpha desquels il vaudrait mieux parfois rester loin. J’aimerais vous présenter aujourd’hui mon choix du chef version npm, soit 8 de mes modules npm préférés 🙂
Modules pour la console
CommanderJS
J’avais abordé le sujet de commander dans un article précédent. J’apprécie cette librairie parce qu’elle est simple d’utilisation et permet de créer des scripts en JavaScript ou TypeScript pour vos environnements de développement, ou encore simplement pour créer des outils pour les développeurs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const package = require('./package.json'); const Commander = require('commander'); const program = new Commander.Command(); program.version(package.version); program .option('-d, --debug', `active les traces lors de l'exécution`); program.parse(process.argv) if (program.debug) { console.log(program.opts()); } |
Chalk
Cette librairie permet tout simplement d’écrire du texte en couleur dans la console.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const chalk = require('chalk'); const message = 'Hello world!'; const colorFns = [ chalk.white, chalk.red ]; const coloredMessage = Array.from(message) .map((char, idx) => colorFns[idx % colorFns.length](char)) .join(''); console.log(coloredMessage); |
Ora
Ora permet d’afficher un indicateur de chargement animé (spinner) à l’utilisateur directement dans la console.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const ora = require('ora'); doIt(); async function doIt() { const spinner = ora('Connecting to database').start(); await wait(1000); spinner.text = 'Connected to database'; await wait(300); spinner.text = 'Executing query'; await wait(2500); spinner.text = 'Saving results'; await wait(1000); spinner.stop(); console.log('Done!'); } async function wait(ms) { return new Promise(res => setTimeout(() => res(), ms)); } |
Les frameworks / librairies web
Socket.io
Socket.io permet d’intégrer les concepts d’application en temps-réel via un WebSocket ou autres techniques comme le long polling si la connexion est impossible via un socket. Cette librairie peut être utilisée pour créer des chats, des applications de collaboration comme Google Docs et même de la visioconférence avec WebRTC.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// backend const io = require('socket.io')({ cors: { origin: '*', methods: '*' } }); io.on('connection', client => { const inter = setInterval(() => client.emit('date_event', new Date()), 500); client.on('disconnect', () => clearInterval(inter)); ; }); io.listen(3000); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html> <head> <title>Test</title> <script src="https://cdn.socket.io/3.1.3/socket.io.min.js" integrity="sha384-cPwlPLvBTa3sKAgddT6krw0cJat7egBga3DJepJyrLl4Q9/5WLra3rrnMcyTyOnh" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script> const socket = io('http://localhost:3000'); socket.on('date_event', data => $('#output').html(data)); </script> </head> <body> <div id="output"> </div> </body> </html> |
NestJS
Un autre framework que j’apprécie et que j’ai déjà couvert, NestJS permet de créer un backend avec un client en invite de commande et une syntaxe copiés de ceux d’Angular. Il permet une grande standardisation des outils et technologies en place sur toute la pile de développement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), MongooseModule.forRoot(process.env.DB_CONNECTION_STRING, { connectionName: 'client', }), ], controllers: [], providers: [], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(AuthMiddleware).forRoutes('*'); } } |
Modules utilitaires
string-similarity
Ce module permet de comparer la similarité entre plusieurs chaînes de caractères basé sur l’indice de Dice. Il permet de donner un indice de similarité entre deux chaînes, ou encore de trouver le meilleur match parmi une liste de mots.
1 2 3 4 |
const stringSimilarity = require('string-similarity'); const dictionary = require('an-array-of-french-words'); const result = stringSimilarity.findBestMatch('proramtion', dictionary); console.log(result.bestMatch); // programmation (66 %) |
Validator
Cette librairie permet d’avoir des fonctions de validation communes à portée de main, comme pour les dates, les adresses courriel, les données monétaires, etc. Elle supporte aussi l’internationnalisation.
1 2 3 |
const validator = require('validator'); console.log(validator.isEmail('test@example.com')); // true console.log(validator.isEmail('fsg5')); // false |
Lodash
Vous imaginez passer à côté avec 45 million de téléchargements par semaine 😛 ? Lodash est une librairie complète pour améliorer les fonctions de bases sur les tableaux, les nombres, les chaînes de caractères, les objets, etc.. De plus, elle n’ajoute aucune fonctionnalité aux objets natifs de JavaScript, ce qui en fait une librairie non-intrusive.
1 2 |
const _ = require('lodash'); console.log(_.flattenDeep([1, [2, [3, [4]], 5]])); // [1, 2, 3, 4, 5] |
Conclusion
Bon… évidemment, je n’ai pas couvert absolument tout ce qui est possible de couvrir. J’ai notamment laissé tomber les frameworks frontend pour pouvoir laisser la place à d’autres librairies, espérant piquer votre curiosité pour aller fouiller le registre à la recherche de pépites d’or!
Si vous avez apprécié, n’hésitez pas à me le laisser savoir en commentaire et partagez avec vos collègues 🙂
Cheer!
Commentaires
Laisser un commentaire