Node.js Flashcards

1
Q

Qu’est-ce que Node.js et pourquoi l’utiliser dans le développement web?

A

Node.js est un environnement d’exécution JavaScript côté serveur basé sur le moteur V8 de Chrome. Il permet d’utiliser JavaScript pour le développement back-end, créant ainsi un environnement de développement unifié utilisant le même langage côté client et serveur. Ses avantages incluent sa nature non-bloquante et orientée événements, sa grande communauté avec un vaste écosystème de packages, et ses performances élevées pour les applications en temps réel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Expliquez la différence entre NPM et NVM dans l’écosystème Node.js.

A

NPM (Node Package Manager) est un gestionnaire de paquets pour installer, mettre à jour et gérer les bibliothèques et dépendances d’un projet Node.js. NVM (Node Version Manager) est un outil qui permet d’installer et de gérer plusieurs versions de Node.js sur la même machine, permettant de basculer facilement entre différentes versions selon les besoins du projet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quelle est la différence entre les modules CommonJS et ESM en Node.js?

A

CommonJS est le système de modules traditionnel de Node.js qui utilise require() pour importer et module.exports pour exporter. ESM (ECMAScript Modules) est le système de modules standardisé pour JavaScript qui utilise import et export. Pour utiliser ESM dans Node.js, il faut ajouter “type”: “module” dans le package.json ou utiliser l’extension .mjs pour les fichiers. ESM offre des avantages comme l’analyse statique, les importations asynchrones et une meilleure compatibilité avec les navigateurs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Que contient le fichier package.json et pourquoi est-il important dans un projet Node.js?

A

Le fichier package.json contient les métadonnées du projet (nom, version, description), ses dépendances, scripts personnalisés et configuration. Il est crucial car il permet à npm de gérer les dépendances du projet, facilite la reproductibilité des environnements de développement entre différentes machines, et permet d’automatiser des tâches courantes via les scripts npm.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Pourquoi est-il important de versionner package-lock.json mais pas le dossier node_modules?

A

Le fichier package-lock.json garantit l’installation des mêmes versions exactes des dépendances sur différentes machines, assurant ainsi la cohérence entre les environnements de développement et de production. Le dossier node_modules contient tous les packages installés et peut être très volumineux (des centaines de Mo voire plus). De plus, il peut contenir des éléments spécifiques à la plateforme. Il est préférable de ne pas le versionner et de le reconstruire avec npm install qui utilisera package.json et package-lock.json pour installer les bonnes versions.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Comment gérez-vous les dépendances dans un projet Node.js?

A

Je gère les dépendances en utilisant npm ou yarn. J’ajoute les packages nécessaires avec npm install (avec –save-dev pour les dépendances de développement). Je maintiens package.json et package-lock.json à jour et dans le contrôle de version. J’utilise des scripts npm pour automatiser les tâches courantes. Je veille à garder les packages à jour en surveillant les vulnérabilités avec npm audit. J’évite d’installer des packages globalement pour une meilleure portabilité des projets.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Comment utilisez-vous les scripts NPM pour automatiser des tâches dans vos projets?

A

Dans la section “scripts” du package.json, je définis des alias pour des commandes fréquemment utilisées. Par exemple, “start” pour lancer l’application, “test” pour exécuter les tests, “build” pour compiler le code, ou “dev” pour le développement avec rechargement à chaud. Ces scripts sont exécutés avec npm run [nom-du-script]. Ils permettent d’abstraire la complexité des commandes, de standardiser les procédures entre les membres de l’équipe et d’automatiser les processus de développement.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Comment Node.js s’intègre-t-il dans une architecture DevOps pour le déploiement continu?

A

Node.js s’intègre bien dans une architecture DevOps grâce à sa légèreté et sa flexibilité. Les scripts npm peuvent automatiser les processus de build, test et déploiement. Les outils comme Jest, Mocha ou Jasmine permettent l’intégration des tests unitaires et fonctionnels dans les pipelines CI/CD. Des outils comme PM2 ou Docker facilitent la conteneurisation et le déploiement. Node.js est compatible avec les plateformes cloud comme AWS, Azure ou Heroku, et avec les outils d’orchestration comme Kubernetes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Expliquez comment vous sécuriseriez une application Node.js en production.

A

Pour sécuriser une application Node.js en production, j’implémente plusieurs mesures: utilisation de HTTPS avec TLS, mise à jour régulière des dépendances et audit avec npm audit, validation et assainissement des entrées utilisateur, implémentation d’authentification robuste et gestion des sessions, utilisation de variables d’environnement pour les secrets, restriction des autorisations, configuration de CORS appropriée, utilisation de casques de sécurité comme Helmet.js, mise en place de limites de taux pour prévenir les attaques DoS, et surveillance des journaux d’activité et d’erreurs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Comment résoudriez-vous des problèmes de performances dans une application Node.js?

A

Pour résoudre des problèmes de performances dans une application Node.js, j’utiliserais un processus méthodique: profilage avec des outils comme node –inspect et Chrome DevTools pour identifier les goulots d’étranglement, surveillance de l’utilisation mémoire pour détecter les fuites, optimisation des opérations intensives en utilisant le threading avec Worker Threads pour les calculs lourds, implémentation de mise en cache pour réduire les opérations coûteuses, optimisation des requêtes de base de données, utilisation du clustering pour tirer parti des architectures multi-coeurs, et éventuellement mise en oeuvre d’une architecture microservices pour améliorer la scalabilité.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly