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.

[Nous vous conseillons de lire] Autres parties du cyclePartie 1:
Informations générales et mise en routePartie 2:
JavaScript, V8, quelques astuces de développementPartie 3:
Hébergement, REPL, travailler avec la console, les modulesPartie 4:
fichiers npm, package.json et package-lock.jsonPartie 5:
npm et npxPartie 6:
boucle d'événements, pile d'appels, temporisateursPartie 7:
Programmation asynchronePartie 8:
Guide Node.js, Partie 8: Protocoles HTTP et WebSocketPartie 9:
Guide Node.js, partie 9: utilisation du système de fichiersPartie 10:
Guide Node.js, Partie 10: Modules standard, flux, bases de données, NODE_ENVPDF complet du guide Node.js 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']
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
,
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-?
