Guide Node.js, Partie 3: Hébergement, REPL, Opérations de console, Modules

Voici la troisième partie de la traduction du manuel Node.js. Aujourd'hui, nous allons parler du choix d'un hébergement pour les projets Node.js, comment travailler avec Node.js en mode REPL et comment exécuter des scripts avec des arguments, comment interagir avec la console et les modules.




Hébergement d'applications Node.js


Le choix de l'hébergement pour les applications Node.js dépend de vos besoins. Voici une courte liste d'options d'hébergement que vous pouvez explorer en décidant de déployer votre application et de la rendre publique. Considérons d'abord des options simples, dont les capacités sont limitées, puis plus complexes, mais aussi avec des capacités plus sérieuses.

▍L'option d'hébergement la plus simple: tunnel local


Même si une adresse IP dynamique est attribuée à votre ordinateur ou si vous êtes derrière NAT, vous pouvez y déployer votre application et lui servir les requêtes des utilisateurs à l'aide d'un tunnel local.

Cette option est adaptée pour organiser rapidement des tests, afin d'organiser une démonstration de produit, ou pour donner accès à l'application à un très petit groupe de personnes.

Il existe un très bon service d'organisation de tunnels locaux, ngrok , disponible pour de nombreuses plateformes.

En utilisant ngrok, il suffit d'exécuter une commande de la forme ngrok PORT et le port que vous avez spécifié sera accessible depuis Internet. Dans le même temps, si vous utilisez la version gratuite du service, vous aurez une adresse dans le domaine ngrok.io . Si vous décidez d'obtenir un abonnement payant, vous pouvez utiliser vos propres noms de domaine, et en plus, vous pouvez augmenter la sécurité de la solution (en utilisant ngrok, vous ouvrez l'accès à votre ordinateur partout sur Internet).

Un autre outil qui peut être utilisé pour organiser des tunnels locaux est appelé localtunnel .

▍Environnements de déploiement de projets Node.js qui ne nécessitent pas de configuration


Glitch


Glitch est un environnement interactif et une plate-forme pour le développement rapide d'applications qui vous permet de les déployer dans les sous-domaines glitch.com. Cette plate-forme ne prend pas encore en charge ses propres domaines utilisateur, il existe certaines limitations lors de son utilisation, mais elle est idéale pour travailler sur des prototypes d'application. La conception de Glitch a l'air assez drôle (peut-être cela peut-il être écrit dans les avantages de cette plate-forme), mais ce n'est pas une sorte d'environnement "jouet" qui est très limité. Ici, vous avez la possibilité de travailler avec Node.js, CDN, un référentiel sécurisé pour les informations confidentielles, la possibilité d'échanger des données avec GitHub et bien plus encore.

Le projet Glitch est géré par la même société derrière FogBugz et Trello (l'un des créateurs de StackOverflow). J'utilise souvent cette plateforme pour démontrer des applications.

Codepen


Codepen est une excellente plateforme autour de laquelle une communauté intéressante s'est formée. Ici, vous pouvez créer des projets qui incluent de nombreux fichiers et les déployer à l'aide de votre propre domaine.

Environments Environnements sans serveur


Les plates-formes sans serveur vous permettent de publier des applications sans penser complètement aux serveurs, à leur configuration ou à leur gestion. Le paradigme de l'informatique sans serveur est que les applications publient en tant que fonctions qui répondent aux appels vers un point de terminaison réseau. Une approche similaire du déploiement d'applications est également appelée FAAS (Functions As A Service, Function as a Service).

Voici quelques solutions populaires dans ce domaine:


Ces deux projets fournissent au développeur un certain niveau d'abstraction, ce qui permet de publier des applications sur diverses plates-formes FAAS, par exemple, Amazon AWS Lambda, Microsoft Azure et Google Cloud.

Solutions ASPAAS


PAAS (Platform As A Service, Platform as a Service) sont des plates-formes qui prennent en charge de nombreuses choses qui, dans des circonstances normales, devraient être prises en charge par le développeur qui déploie l'application.

Zeit Now


Zeit est une option intéressante pour déployer des applications. Le déploiement, à l'aide de cette plate-forme, se résume à entrer la commande now dans le terminal. Il existe une version gratuite de Zeit, il existe certaines restrictions lorsque vous travaillez avec. Il existe également une version payante et plus puissante de cette plateforme. En utilisant Zeit, vous ne pouvez tout simplement pas penser au fait que votre application a besoin d'un serveur. Vous déployez simplement l'application et tout le reste est géré par cette plate-forme.

Nanobox


Les créateurs de la plateforme Nanobox , qui comprend le déploiement d'applications Node.js, l'appellent PAAS V2.

Heroku


Heroku est une autre excellente plate-forme pour l'hébergement des applications Node.js. Voici un bon article sur la façon de travailler avec.

Microsoft azur


Azure est une plateforme cloud de Microsoft. Sa documentation contient une section sur les applications Node.js.

Google Cloud Platform


Google Cloud est un excellent environnement pour déployer des applications Node.js. Voici la section pertinente de sa documentation.

Hébergement PSVPS


Il existe de nombreuses plateformes qui fournissent des services d'hébergement VPS . Une caractéristique commune de ces plates-formes est le fait que le développeur dispose d'un serveur virtuel, installe indépendamment un système d'exploitation (Linux ou Windows) sur celui-ci et déploie indépendamment des applications.

Parmi les plates-formes qui fournissent des services VPS, dont il existe un grand nombre, nous pouvons noter les suivantes, que j'ai utilisées et que je pourrais recommander à d'autres:


Nous ajoutons que RUVDS fournit également des services d'hébergement VPS. Nous sommes agréés par FSTEC, nos clients sont assurés par AIG, nous avons quatre centres de données dans différents pays. Il existe son propre centre de données RUCLOUD niveau TIER 3 dans la ville de Korolev, région de Moscou, ainsi que des zones de pression dans les centres de données Deltalis (Suisse) , Londres Equinix LD8 (Grande-Bretagne) et MMTS-9 (Moscou, Russie). Toutes les zones de confinement répondent à un niveau de fiabilité d'au moins TIER 3.

Les partenaires de la société sont FINAM JSC, groupe financier BCS, National Settlement Depository (Moscow Exchange), VTsIOM JSC, société Gars-Telecom, opérateur de taxi Gett, opérateur de livraison Delivery Club et bien d'autres.


▍Serveur normal


Une autre solution d'hébergement consiste à acheter (ou louer, par exemple, en utilisant le service Vultr Bare Metal ) un serveur ordinaire, à y installer Linux et d'autres logiciels, à le connecter à Internet et à y héberger des applications Node.js.

L'hébergement est un sujet énorme, mais, espérons-le, le matériel de cette section vous permettra de choisir exactement ce dont vous avez besoin. Passons maintenant à l'histoire de l'utilisation de Node.js en mode REPL.

Utilisation de Node.js en mode REPL


L'abréviation REPL signifie Read-Evaluate-Print-Loop (cycle "lecture - calcul - sortie"). L'utilisation de REPL est un excellent moyen d'explorer rapidement les capacités de Node.js.

Comme vous le savez déjà, la commande node est utilisée pour exécuter des scripts dans Node.js, elle ressemble à ceci:

 node script.js 

Si vous entrez la même commande, mais ne spécifiez pas de nom de fichier, Node.js sera lancé en mode REPL:

 node 

Si vous essayez maintenant d'entrer une telle commande dans votre terminal, vous verrez alors quelque chose comme ceci:

 > node > 

Node.js est maintenant en mode veille. Le système attend de nous que nous entrions du code JavaScript sur la ligne de commande qu'il exécutera.

Pour commencer, essayons quelque chose de très simple:

 > console.log('test') test undefined > 

Ici, nous avons suggéré à Node.js d'exécuter la commande utilisée pour sortir les données vers la console. La première valeur, test , est ce que console.log('test') . La deuxième valeur, undefined , correspond à ce que la fonction console.log() renvoyé.

Une fois la commande terminée, l'invite REPL apparaît, ce qui signifie que nous pouvons entrer une nouvelle commande ici.

▍ Commandes complètes à l'aide de la touche Tab


REPL est un environnement interactif. Si vous appuyez sur la touche Tab de votre clavier pendant l'écriture de code, REPL essaiera de compléter automatiquement l'entrée en sélectionnant, par exemple, un nom approprié pour la variable que vous avez déjà déclarée ou le nom d'un objet standard.

▍Exploration d'objets JavaScript


Entrez le nom d'un objet JavaScript standard dans la ligne de commande, par exemple, Number , ajoutez un point après celui-ci et appuyez sur Tab .

REPL listera les propriétés et méthodes de l'objet avec lesquelles le développeur peut interagir:


Examen de l'objet numérique

▍Explorer des objets globaux


Pour savoir avec quels objets Node.js globaux vous pouvez travailler, entrez la commande global. dans le terminal global. et appuyez sur Tab .


Recherche d'objets globaux

▍ Variable spéciale _


La variable _ (soulignement) stocke le résultat de la dernière opération effectuée. Cette variable peut être utilisée dans le cadre de commandes entrées dans la console.

▍ Commandes commençant par un point


En mode REPL, vous pouvez utiliser certaines commandes spéciales qui commencent par un point. Les voici:

  • La commande .help affiche des informations de référence pour les commandes commençant par un point.
  • La commande .editor système en mode éditeur, ce qui facilite la saisie de code JavaScript sur plusieurs lignes. Après avoir été dans ce mode, vous entrez tout ce que vous voulez, pour exécuter le code, utilisez la commande Ctrl+D
  • La commande .break permet d'annuler la saisie d'expression sur plusieurs lignes. Son utilisation est similaire à celle du raccourci clavier Ctrl+C
  • La commande .clear efface le contexte REPL et interrompt également l'entrée d'une expression multiligne.
  • La commande .load charge le code d'un fichier JavaScript dans la session en cours.
  • La commande .save enregistre tout ce qui a été entré pendant la session REPL dans le fichier.
  • La commande .exit permet de quitter une session REPL; elle agit exactement comme deux frappes consécutives de la combinaison de touches Ctrl+C

Il convient de noter que REPL reconnaît l'entrée d'expressions multilignes même sans utiliser la .editor .

Par exemple, nous avons commencé à saisir un code d'itérateur:

 [1, 2, 3].forEach(num => { 

Si, après avoir saisi l'accolade, appuyez sur la touche Enter , REPL passera à une nouvelle ligne, l'invite dans laquelle ressemblera à trois points. Cela indique que nous pouvons saisir le code du bloc correspondant. Cela ressemble à ceci:

 ... console.log(num) ... }) 

Appuyez sur Enter après avoir entré la dernière parenthèse pour exécuter l'expression. Si vous entrez .break dans ce mode, l'entrée sera abandonnée et l'expression ne sera pas exécutée.

Le mode REPL est une fonctionnalité utile de Node.js, mais sa portée est limitée à de petites expériences. Nous sommes intéressés par quelque chose de plus que la possibilité d'exécuter quelques commandes. Par conséquent, nous passons à travailler avec Node.js en mode normal. À savoir, parlons de la façon dont les scripts Node.js peuvent prendre des arguments de ligne de commande.

Utilisation des arguments de ligne de commande dans les scripts Node.js


Lors de l'exécution de scripts Node.js, des arguments peuvent leur être transmis. Voici un appel de script régulier:

 node app.js 

Les arguments passés au script peuvent être des valeurs indépendantes ou des constructions clé-valeur. Dans le premier cas, l'exécution du script ressemble à ceci:

 node app.js flavio 

Dans le second - comme ceci:

 node app.js name=flavio 

La méthode de transmission des arguments est utilisée pour déterminer comment vous pouvez les utiliser dans le code de script.

Ainsi, afin d'accéder aux arguments de la ligne de commande, l'objet de process Node.js standard est utilisé. Il a la propriété argv , qui est un tableau contenant, entre autres, les arguments passés au script au démarrage.

Le premier élément du tableau argv contient le chemin d'accès complet au fichier qui est exécuté lorsque la commande node est entrée sur la ligne de commande.

Le deuxième élément est le chemin d'accès à l'exécutable du script.

Tous les autres éléments du tableau, à partir du troisième, contiennent ce qui a été transmis au script lors de son exécution.

L'énumération des arguments disponibles dans argv (cela inclut à la fois le chemin d'accès au node et le chemin d'accès au fichier exécutable du script) peut être organisée à l'aide de la boucle forEach :

 process.argv.forEach((val, index) => { console.log(`${index}: ${val}`) }) 

Si vous n'êtes pas intéressé par les deux premiers arguments, basé sur argv vous pouvez créer un nouveau tableau qui inclura tout de argv sauf les deux premiers éléments:

 const args = process.argv.slice(2) 

Supposons que lors de l'exécution d'un script, un seul argument lui ait été transmis, sous la forme d'une valeur indépendante:

 node app.js flavio 

Vous pouvez accéder à cet argument comme ceci:

 const args = process.argv.slice(2) args[0] 

Essayons maintenant d'utiliser une construction de type valeur-clé:

 node app.js name=flavio 

Avec cette approche, une fois le tableau args formé, la chaîne name=flavio dans args[0] . Avant d'utiliser l'argument, cette chaîne doit être analysée. La façon la plus pratique de procéder consiste à utiliser la bibliothèque minimist , conçue pour faciliter l'utilisation des arguments de ligne de commande:

 const args = require('minimist')(process.argv.slice(2)) args['name'] //flavio 

Considérez maintenant la sortie vers la console.

Sortie de données vers la console à l'aide du module de console


Le module de console Node.js standard offre au développeur de nombreuses possibilités d'interagir avec la ligne de commande pendant l'exécution du programme. En général, c'est la même chose que l'objet console utilisé dans le JavaScript basé sur un navigateur. La méthode la plus simple et la plus utilisée du module de console est peut-être console.log() , qui est utilisée pour générer des données de chaîne sur la console. De plus, si vous lui passez un objet, celui-ci, avant la sortie, sera converti en sa représentation sous forme de chaîne.

La méthode console.log() peut recevoir plusieurs valeurs:

 const x = 'x' const y = 'y' console.log(x, y) 

Après avoir exécuté cette séquence d'instructions, la valeur x et la valeur y parviendront à la console.

Pour former des chaînes complexes, la commande console.log() prend en charge l'utilisation de caractères génériques qui, lors de la sortie des données, sont remplacés par leurs valeurs correspondantes par ordre de priorité.

Par exemple, voici une commande qui affiche le texte My cat has 2 years :

 console.log('My %s has %d years', 'cat', 2) 

Tenez compte des caractéristiques des caractères génériques:

  • %s formate la valeur sous forme de chaîne.
  • %d ou %i formate la valeur sous forme d'entier.
  • %f formate la valeur sous forme de nombre à virgule flottante.
  • %O utilisé pour afficher les représentations de chaîne d'objets.

Voici un autre exemple d'utilisation de caractères génériques:

 console.log('%O', Number) 

▍Nettoyer la console


Pour effacer la console, utilisez la commande console.clear() (son comportement dans différents terminaux peut varier).

▍Éléments de comptage


Nous allons maintenant examiner la méthode console.count() utile. Jetez un oeil à ce code:

 const x = 1 const y = 2 const z = 3 console.count( 'The value of x is ' + x + ' and has been checked .. how many times?' ) console.count( 'The value of x is ' + x + ' and has been checked .. how many times?' ) console.count( 'The value of y is ' + y + ' and has been checked .. how many times?' ) 

La méthode count() compte le nombre de sorties de ligne et affiche le résultat à côté d'elles.
En utilisant cette méthode, dans l'exemple suivant, vous pouvez compter les pommes et les oranges:

 const oranges = ['orange', 'orange'] const apples = ['just one apple'] oranges.forEach(fruit => { console.count(fruit) }) apples.forEach(fruit => { console.count(fruit) }) 

▍Affichage des résultats de trace de pile sur la console


Il est parfois utile d'imprimer une trace de la pile de fonctions sur la console. Par exemple, afin de répondre à la question de savoir comment nous sommes arrivés à un certain endroit du programme. Vous pouvez le faire avec la commande suivante:

 console.trace() 

Voici un exemple de son utilisation:

 const function2 = () => console.trace() const function1 = () => function2() function1() 

Voici ce qui s'est passé lorsque j'ai exécuté ce code en mode REPL:

 Trace   at function2 (repl:1:33)   at function1 (repl:1:25)   at repl:1:1   at ContextifyScript.Script.runInThisContext (vm.js:44:33)   at REPLServer.defaultEval (repl.js:239:29)   at bound (domain.js:301:14)   at REPLServer.runBound [as eval] (domain.js:314:12)   at REPLServer.onLine (repl.js:440:10)   at emitOne (events.js:120:20)   at REPLServer.emit (events.js:210:7) 

▍Mesurer le temps nécessaire pour terminer une action


Vous pouvez mesurer le temps nécessaire, par exemple, pour exécuter une fonction, à l'aide des console.time() et console.timeEnd() . Cela ressemble à ceci:

 const doSomething = () => console.log('test') const measureDoingSomething = () => { console.time('doSomething()') //    ,     doSomething() console.timeEnd('doSomething()') } measureDoingSomething() 

▍Travailler avec stdout et stderr


Comme nous l'avons vu, la commande console.log() est idéale pour envoyer des messages à la console. Lors de son utilisation, le flux de sortie dit standard, ou stdout .

La commande console.error() transfère les données vers le flux d'erreur standard, stderr . Les données envoyées à stderr à la console, bien que ce qui est produit dans ce flux puisse, par exemple, être redirigé vers le fichier journal des erreurs.

▍Utilisez la couleur lors de la sortie des données vers la console


Afin de coloriser les textes affichés dans la console, vous pouvez utiliser des séquences d'échappement qui identifient les couleurs:

 console.log('\x1b[33m%s\x1b[0m', 'hi!') 

Si vous exécutez cette commande, par exemple, en mode REPL, le texte hi sera affiché en jaune.
Cette approche, cependant, n'est pas particulièrement pratique. Il sera pratique d'utiliser une bibliothèque spécialisée, par exemple de la craie, pour afficher du texte en couleur dans la console . Cette bibliothèque, en plus de la mise en forme couleur des textes, prend en charge d'autres façons de les styliser. Par exemple, avec son aide, il est possible de rendre le texte en gras, italique ou souligné.

Pour l'installer à partir de npm, utilisez la commande suivante:

 npm install chalk 

Vous pouvez l'utiliser comme ceci:

 const chalk = require('chalk') console.log(chalk.yellow('hi!')) 

L'utilisation de la commande chalk.yellow() est beaucoup plus pratique que les séquences d'échappement, et le texte du programme avec cette approche est beaucoup plus facile à lire.

Pour en savoir plus sur la craie, consultez cette page de bibliothèque sur GitHub.

▍Créer une barre de progression


La barre de progression peut être utile dans différentes situations. Vous pouvez utiliser le package de progression pour créer des indicateurs de progression en cours d'exécution dans la console. Vous pouvez l'installer comme ceci:

 npm install progress 

Voici un exemple de code dans lequel un indicateur est créé qui peut être utilisé pour afficher des informations sur une tâche composée de 10 étapes. Dans notre cas, il faut 100 ms pour terminer chaque étape. Une fois que l'indicateur est plein, la commande clearItnerval() est clearItnerval() et le programme se termine.

 const ProgressBar = require('progress') const bar = new ProgressBar(':bar', { total: 10 }) const timer = setInterval(() => { bar.tick() if (bar.complete) {   clearInterval(timer) } }, 100) 

▍Réception des entrées utilisateur depuis la ligne de commande


Comment rendre interactives les applications de ligne de commande écrites pour la plateforme Node.js? À partir de la version 7, Node.js contient un module de ligne de lecture qui vous permet de recevoir des données à partir de flux qui peuvent être lus, par exemple, à partir de process.stdin . Ce thread, lors de l'exécution du programme Node.js, est ce qui est entré dans le terminal. Les données sont entrées une ligne à la fois.

Considérez l'extrait de code suivant:

 const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }) readline.question(`What's your name?`, (name) => { console.log(`Hi ${name}!`) readline.close() }) 

Ici, nous demandons à l'utilisateur son nom, et après avoir entré le texte et appuyé sur la touche Enter du clavier, nous affichons un message d'accueil.

La méthode question() affiche ce qui lui est transmis en tant que premier paramètre (c'est-à-dire la question posée à l'utilisateur) et attend la fin de l'entrée. Après avoir appuyé sur Enter il appelle le rappel qui lui est passé dans le deuxième paramètre et traite ce qui a été entré. Dans le même rappel, nous readline interface readline .

readline , , .

, , , , , , — * .

, readline-sync , , readline , .

, . inquirer . :

 npm install inquirer 

:

 const inquirer = require('inquirer') var questions = [{ type: 'input', name: 'name', message: "What's your name?", }] inquirer.prompt(questions).then(answers => { console.log(`Hi ${answers['name']}!`) }) 

inquirer . , .

Node.js. readline , readline-sync inquirer. , , .

Node.js, exports


, API module.exports , . Node.js , . , require , :

 const library = require('./library') 

library.js , , , .

, , - , . , , . , API module.exports , .

.

module.exports , , . :

 const car = { brand: 'Ford', model: 'Fiesta' } module.exports = car //..   const car = require('./car') 

, exports . , , — :

 const car = { brand: 'Ford', model: 'Fiesta' } exports.car = car 

:

 exports.car = { brand: 'Ford', model: 'Fiesta' } 

, , :

 const items = require('./items') items.car 

:

 const car = require('./items').car 

module.exports exports ?

, module.exports . .


Node.js-, REPL, , Node.js. npm, , , package.json package-lock.json .

Chers lecteurs! Node.js-?

Source: https://habr.com/ru/post/fr423701/


All Articles