Fermer

février 17, 2020

Une introduction à Node.js18 minutes de lecture

ES6 en action: let et const


Vous avez donc entendu parler de Node.js, mais vous ne savez pas exactement de quoi il s'agit ni où il s'intègre dans votre flux de travail de développement. Ou peut-être avez-vous entendu des gens chanter les louanges de Node et maintenant vous vous demandez si c'est quelque chose que vous devez apprendre. Peut-être connaissez-vous une autre technologie principale et voulez-vous découvrir ce qui est différent à propos de Node.

Si cela vous ressemble, continuez à lire. Dans cet article, je vais examiner Node.js et ses principaux paradigmes de manière conviviale pour les débutants. J'examinerai les principaux cas d'utilisation de Node, ainsi que l'état actuel du paysage Node, et je vous proposerai un large éventail de points de départ (pour une lecture plus approfondie) en cours de route.

Veuillez noter que, tout au long de l'article, J'utiliserai «Node» et «Node.js» de façon interchangeable.

Qu'est-ce que Node.js?

Il existe de nombreuses définitions en ligne. Jetons un œil à quelques-uns des plus populaires. Voici ce que la page d'accueil du projet a à dire :

Node.js® est un moteur d'exécution JavaScript construit sur le moteur JavaScript V8 de Chrome.

Et voici ce que Stack Overflow a à offrir :

Node.js est un runtime d'E / S asynchrone basé sur des événements, non bloquant qui utilise le moteur JavaScript V8 de Google et la bibliothèque libuv.

Hmmm, "basé sur des événements", "non bloquant" »,« E / S asynchrones »- c'est beaucoup à digérer d'un seul coup. Abordons donc cela sous un angle différent et commençons par nous concentrer sur l'autre détail mentionné dans les deux descriptions – le moteur JavaScript V8.

Le nœud est construit sur le moteur JavaScript V8 de Google Chrome

Le moteur V8 est ouvert -moteur JavaScript source qui s'exécute dans Google Chrome et d'autres navigateurs Web basés sur Chromium, y compris Brave, Opera et Vivaldi. Il a été conçu en pensant aux performances et est responsable de la compilation de JavaScript directement en code machine natif que votre ordinateur peut exécuter.

Cependant, lorsque nous disons que Node est construit sur le moteur V8, nous ne voulons pas dire que les programmes Node sont exécuté dans un navigateur. Ils ne le sont pas. Le créateur de Node ( Ryan Dahl ) a plutôt pris le moteur V8 et l'a amélioré avec diverses fonctionnalités, telles qu'une API de système de fichiers, une bibliothèque HTTP et un certain nombre de méthodes utilitaires liées au système d'exploitation. [19659012] Cela signifie que Node.js est un programme que nous pouvons utiliser pour exécuter JavaScript sur nos ordinateurs. En d'autres termes, il s'agit d'un moteur d'exécution JavaScript.

Comment installer Node.js?

Dans cette section suivante, nous allons installer Node et écrire quelques programmes simples. Nous examinerons également npm un gestionnaire de packages fourni avec Node.

Node Binaries vs Version Manager

De nombreux sites Web vous recommanderont de vous rendre sur la page officielle de téléchargement de Node et récupérez les binaires Node pour votre système. Bien que cela fonctionne, je vous suggère d'utiliser un gestionnaire de versions à la place. Il s'agit d'un programme qui vous permet d'installer plusieurs versions de Node et de basculer entre elles à volonté. L'utilisation d'un gestionnaire de versions présente plusieurs avantages. Par exemple, il annule les problèmes d'autorisation potentiels lors de l'utilisation de Node avec npm et vous permet de définir une version de Node par projet.

Si vous avez envie de suivre la voie du gestionnaire de versions, veuillez consulter notre astuce: Installer plusieurs Versions de Node.js utilisant nvm . Sinon, récupérez les binaires corrects pour votre système à partir du lien ci-dessus et installez-les.

"Bonjour tout le monde!" the Node.js Way

Vous pouvez vérifier que Node est installé sur votre système en ouvrant un terminal et en tapant node -v . Si tout s'est bien passé, vous devriez voir quelque chose comme v12.14.1 affiché. Il s'agit de la version actuelle LTS au moment de la rédaction.

Ensuite, créez un nouveau fichier hello.js et copiez-le dans le code suivant:

 console.log ( "Bonjour le monde!");

Il utilise le module de console intégré de Node pour afficher un message dans une fenêtre de terminal. Pour exécuter l'exemple, entrez la commande suivante:

 node hello.js

Si Node.js est correctement configuré, "Bonjour, monde!"

Node.js a un excellent support pour le JavaScript moderne

Comme on peut le voir sur ce tableau de compatibilité Node a un excellent support pour ECMAScript 2015 (ES6) et au-delà. Comme vous ne ciblez qu'un seul runtime (une version spécifique du moteur V8), cela signifie que vous pouvez écrire votre JavaScript en utilisant la syntaxe la plus récente et la plus moderne. Cela signifie également que vous n'avez généralement pas à vous soucier des problèmes de compatibilité – comme vous le feriez si vous écriviez du JavaScript qui s'exécuterait dans différents navigateurs.

Pour illustrer ce point, voici un deuxième programme qui utilise plusieurs JavaScript modernes fonctionnalités, telles que les littéraux de modèle balisés déstructuration d'objets et Array.prototype.flatMap () :

 fonction upcase (chaînes, ... valeurs) {
  return values.map (name => name [0] .toUpperCase () + name.slice (1))
    .join ('') + chaînes [2];
}

const person = {
  d'abord: «brendan»,
  dernier: «eich»,
  âge: 56,
  fonction: «PDG de Brave Software»,
};

const {premier, dernier} = personne;
émoticône const = [ ['┌', '(']['˘', '⌣']['˘', ')', 'ʃ']];

console.log (
  upcase` $ {first} $ {last} est le créateur de JavaScript! `+ emoticon.flat (). join ('')
);

Enregistrez ce code dans un fichier appelé index.js et exécutez-le à partir de votre terminal à l'aide de la commande node index.js . Vous devriez voir Brendan Eich est le créateur de JavaScript! sortie vers le terminal.

Présentation de npm, le gestionnaire de packages JavaScript

Comme je l'ai mentionné précédemment, Node est fourni avec un gestionnaire de packages appelé npm. Pour vérifier la version que vous avez installée sur votre système, tapez npm -v .

En plus d'être le gestionnaire de packages pour JavaScript, npm est également le plus grand registre de logiciels au monde. Plus de 1 000 000 packages de code JavaScript sont disponibles au téléchargement, avec des milliards de téléchargements par semaine. Jetons un coup d'œil à la façon dont nous utiliserions npm pour installer un package.

Installation d'un package à l'échelle mondiale

Ouvrez votre terminal et tapez ce qui suit:

 npm install -g jshint

Ceci installera le package jshint globalement sur votre système. Nous pouvons l'utiliser pour charger le fichier index.js de l'exemple précédent:

 jshint index.js

Vous devriez maintenant voir un certain nombre d'erreurs liées à ES6. Si vous souhaitez les corriger, ajoutez / * jshint esversion: 6 * / en haut du fichier index.js réexécutez la commande et le peluchage devrait passer. [19659012] Si vous souhaitez une mise à jour sur le peluchage, voir Une comparaison des outils de peluchage JavaScript .

Installation d'un package localement

Nous pouvons également installer des packages localement dans un projet, par opposition à globalement , sur notre système. Créez un dossier de test et ouvrez un terminal dans ce répertoire. Tapez ensuite ceci:

 npm init -y

Ceci créera et remplira automatiquement un fichier package.json dans le même dossier. Ensuite, utilisez npm pour installer le paquet lodash et enregistrez-le en tant que dépendance du projet:

 npm install lodash --save

Créez un fichier nommé test.js et ajoutez ce qui suit:

 const _ = require ('lodash');

const arr = [0, 1, false, 2, '', 3];
console.log (_. compact (arr));

Enfin, exécutez le script en utilisant node test.js . Vous devriez voir [ 1, 2, 3 ] sortir vers le terminal.

Utilisation du package.json Fichier

Si vous regardez le contenu du répertoire test vous verrez remarquez un dossier intitulé node_modules . C'est là que npm a enregistré lodash et toutes les bibliothèques dont lodash dépend. Le dossier node_modules ne doit pas être archivé dans le contrôle de version et peut en fait être recréé à tout moment en exécutant npm install à partir de la racine du projet. [19659012] Si vous ouvrez le fichier package.json vous verrez lodash répertorié sous le champ dépendances . En spécifiant les dépendances de votre projet de cette façon, vous autorisez n'importe quel développeur n'importe où à cloner votre projet et à utiliser npm pour installer les packages dont il a besoin pour fonctionner.

Si vous souhaitez en savoir plus sur npm, assurez-vous de lire notre article Guide du débutant pour npm – le gestionnaire de packages de nœuds .

À quoi sert Node.js?

Maintenant que nous savons ce que sont Node et npm et comment les installer, nous pouvons tourner notre attention sur la première de leurs utilisations courantes: installer (via npm) et exécuter (via Node) divers outils de construction – conçus pour automatiser le processus de développement d'une application JavaScript moderne.

Ces outils de construction sont de toutes formes et tailles, et vous n'irez pas loin dans un paysage JavaScript moderne sans vous y heurter. Ils peuvent être utilisés pour tout, du regroupement de vos fichiers et dépendances JavaScript en actifs statiques, à l'exécution de tests ou à la vérification automatique du code et du style.

Nous avons une large gamme d'articles couvrant les outils de génération sur SitePoint. Voici une courte sélection de mes favoris:

Et si vous souhaitez commencer à développer des applications avec n'importe quel framework JavaScript moderne (par exemple, React ou Angular), vous devrez avoir une connaissance pratique de Node et npm (ou peut-être Fils ). Ce n'est pas parce que vous avez besoin d'un backend Node pour exécuter ces frameworks. Non. C'est plutôt parce que ces frameworks (et beaucoup, beaucoup de packages associés) sont tous disponibles via npm et s'appuient sur Node pour créer un environnement de développement sensible dans lequel ils peuvent s'exécuter.

Si vous êtes intéressé à découvrir quel rôle joue Node dans une application JavaScript moderne, lisez L'anatomie d'une application JavaScript moderne .

Node.js nous permet d'exécuter JavaScript sur le serveur

Nous arrivons ensuite à l'un des plus grands cas d'utilisation de Node. js – exécuter JavaScript sur le serveur. Ce n'est pas un nouveau concept et a été tenté pour la première fois par Netscape en 1994. Node.js, cependant, est la première implémentation à obtenir une réelle traction, et il offre des avantages uniques, par rapport aux langages traditionnels. Le nœud joue désormais un rôle essentiel dans la pile technologique de de nombreuses sociétés de haut niveau . Voyons quels sont ces avantages.

Le modèle d'exécution Node.js

En termes très simplistes, lorsque vous vous connectez à un serveur traditionnel, comme Apache, il va générer un nouveau thread pour gérer la demande. Dans un langage tel que PHP ou Ruby, toutes les opérations d'E / S ultérieures (par exemple, l'interaction avec une base de données) bloquent l'exécution de votre code jusqu'à la fin de l'opération. Autrement dit, le serveur doit attendre la fin de la recherche de base de données avant de pouvoir passer au traitement du résultat. Si de nouvelles demandes arrivent pendant que cela se produit, le serveur générera de nouveaux threads pour les traiter. Ceci est potentiellement inefficace, car un grand nombre de threads peut entraîner un ralentissement du système – et, dans le pire des cas, une panne du site. La façon la plus courante de prendre en charge plus de connexions consiste à ajouter plus de serveurs.

Node.js, cependant, est monothread. C'est aussi piloté par les événements ce qui signifie que tout ce qui se passe dans Node est en réaction à un événement. Par exemple, lorsqu'une nouvelle demande arrive (un type d'événement), le serveur commence à la traiter. S'il rencontre ensuite une opération d'E / S bloquante, au lieu d'attendre que cela se termine, il enregistrera un rappel avant de continuer à traiter l'événement suivant. Une fois l'opération d'E / S terminée (autre type d'événement), le serveur exécute le rappel et continue de travailler sur la demande d'origine. Sous le capot, Node utilise la bibliothèque libuv pour implémenter ce comportement asynchrone (c'est-à-dire non bloquant).

Le modèle d'exécution de Node entraîne très peu de surcharge pour le serveur et, par conséquent, il est capable de gérer une grande nombre de connexions simultanées. L'approche traditionnelle de la mise à l'échelle d'une application Node consiste à la cloner et à faire en sorte que les instances clonées partagent la charge de travail. Node.js a même un module intégré pour vous aider à implémenter une stratégie de clonage sur un seul serveur.

L'image suivante illustre le modèle d'exécution de Node:

 Modèle d'exécution de Node

Source: Introduction To Node.js par le professeur Christian Maderazo, James Santos

Ou, si vous préférez les vidéos, consultez cette présentation géniale: Qu'est-ce que la boucle d'événements de toute façon? Ce n'est pas spécifique au nœud, mais il explique très bien le concept.

Y a-t-il des inconvénients?

Le fait que le nœud s'exécute sur un seul thread impose certaines limitations. Par exemple, le blocage des appels d'E / S doit être évité, les opérations gourmandes en ressources processeur doivent être transférées à un thread de travail et les erreurs doivent toujours être gérées correctement par crainte de planter l'ensemble du processus.

les développeurs n'aiment pas non plus le style de codage basé sur le rappel que JavaScript impose (à tel point qu'il existe même un site dédié aux horreurs de l'écriture de code JavaScript asynchrone ). Mais avec l'arrivée des Promesses natives, suivies de près par une attente asynchrone, le contrôle de flux en JavaScript moderne est devenu plus facile que jamais.

"Bonjour, mon monde!" – Version du serveur

Jetons un rapide coup d'œil à un "Bonjour tout le monde!" exemple de serveur HTTP:

 const http = require ('http');

http.createServer ((demande, réponse) => {
  response.writeHead (200);
  response.end ('Bonjour, monde!');
}) .écoute (3000);

console.log ('Serveur fonctionnant sur http: // localhost: 3000');

Pour l'exécuter, copiez le code dans un fichier nommé hello-world-server.js et exécutez-le à l'aide du noeud hello-world-server.js . Ouvrez un navigateur et accédez à http: // localhost: 3000 pour voir "Bonjour tout le monde!" affiché dans le navigateur.

Voyons maintenant le code.

Nous commençons par exiger le module HTTP natif de Node . Nous utilisons ensuite sa méthode createServer pour créer un nouvel objet serveur Web, auquel nous transmettons une fonction anonyme. Cette fonction sera invoquée pour chaque nouvelle connexion établie avec le serveur.

La fonction anonyme est appelée avec deux arguments ( requête et réponse ). Ceux-ci contiennent la demande de l'utilisateur et la réponse, que nous utilisons pour renvoyer un code de statut HTTP 200, ainsi que notre "Bonjour tout le monde!"

Enfin, nous demandons au serveur d'écouter les demandes entrantes sur le port 3000 et de transmettre un message au terminal pour nous faire savoir qu'il fonctionne.

De toute évidence, la création d'un serveur simple dans Noeud (par exemple, il est important de gérer correctement les erreurs), je vous conseille donc de consulter la documentation ou consultez notre tutoriel si vous souhaitez en savoir plus. [

Node est particulièrement adapté à la création d'applications qui nécessitent une certaine forme d'interaction ou de collaboration en temps réel – par exemple, des sites de discussion ou des applications telles que CodeShare où vous pouvez regarder un document en cours de modification en direct par quelqu'un d'autre. C'est également un bon moyen de créer des API <! – [Replace « It’s also a good fit for building APIs » with the following linked version when that link is published] C'est également un bon moyen de créer des API -> où vous gérez de nombreuses demandes pilotées par les E / S (telles que celles qui doivent effectuer des opérations sur un base de données), ou pour les sites impliquant le streaming de données, car Node permet de traiter les fichiers pendant qu'ils sont encore en cours de téléchargement. Si vous souhaitez approfondir cet aspect en temps réel de Node, consultez notre didacticiel sur Création d'une application de conversation en temps réel .

Pourtant, tout le monde ne va pas être en train de construire le prochain Trello ou les prochains Google Docs, et vraiment, il n'y a aucune raison pour que vous ne puissiez pas utiliser Node pour créer une simple application CRUD. Cependant, si vous suivez cette voie, vous découvrirez bientôt que Node est assez simple et que la façon dont vous construisez et structurez l'application vous appartient. Il existe différents cadres que vous pouvez utiliser pour réduire le passe-partout, Express s'étant imposé comme le leader. Pourtant, même une solution telle qu'Express est minime, ce qui signifie que si vous voulez faire quelque chose de légèrement inhabituel, vous devrez extraire des modules supplémentaires à partir de npm. Ceci contraste fortement avec les frameworks tels que Rails ou Laravel, qui sont livrés avec beaucoup de fonctionnalités prêtes à l'emploi.

Si vous souhaitez envisager de créer une application de base plus traditionnelle, consultez notre tutoriel Comment créer et structurer une application MVC Node.js .

Quels sont les avantages de Node.js?

Outre la vitesse et l'évolutivité, un avantage souvent vanté de l'utilisation de JavaScript sur un serveur Web – ainsi que dans le navigateur – c'est que votre cerveau n'a plus besoin de changer de mode. Vous pouvez tout faire dans le même langage, ce qui, en tant que développeur, vous rend plus productif (et, espérons-le, plus heureux). Par exemple, vous pouvez facilement partager du code entre le serveur et le client.

Un autre grand avantage de Node est qu'il parle JSON. JSON est probablement le format d'échange de données le plus important sur le Web et la lingua franca pour interagir avec les bases de données d'objets (comme MongoDB). JSON est idéalement adapté à la consommation par un programme JavaScript, ce qui signifie que lorsque vous travaillez avec Node, les données peuvent parfaitement circuler entre les couches sans avoir besoin de reformater. Vous pouvez avoir une syntaxe du navigateur au serveur à la base de données.

Enfin, JavaScript est omniprésent: la plupart d'entre nous connaissent JavaScript ou l'ont utilisé à un moment donné. Cela signifie que la transition vers le développement de nœuds est potentiellement plus facile que vers d'autres langages côté serveur. Pour citer Craig Buckler dans son Node vs PHP Smackdown JavaScript pourrait rester le langage le plus mal compris au monde – mais, une fois les concepts cliqués, les autres langages semblent plus lourds.

Autre Utilisations de Node

Et cela ne s'arrête pas au serveur. Il existe de nombreuses autres utilisations passionnantes et variées de Node.js!

Par exemple il peut être utilisé comme langage de script pour automatiser des tâches répétitives ou sujettes aux erreurs sur votre PC. Il peut également être utilisé pour écrire votre propre outil de ligne de commande comme ce générateur de style Yeoman pour échafauder de nouveaux projets.

Node.js peut également être utilisé pour créer des applications de bureau multiplateformes <! – Remplacez «créer des applications de bureau multiplateformes» par la version liée suivante lorsque cet article a été publié: créez des applications de bureau multiplateformes -> et même pour créer vos propres robots .

Conclusion

JavaScript est partout et Node est un sujet vaste et étendu. Néanmoins, j'espère que dans cet article, je vous ai proposé le regard de haut niveau sur Node.js et ses principaux paradigmes que j'ai promis au début. J'espère également que lorsque vous relirez les définitions que nous avons examinées précédemment, les choses auront beaucoup plus de sens.

Node.js est un runtime d'E / S asynchrone basé sur des événements, non bloquant qui utilise JavaScript V8 de Google moteur et bibliothèque libuv.

Si vous avez des questions ou des commentaires, n'hésitez pas à me contacter sur Twitter .





Source link