Node.js-Handbuch, Teil 3: Hosting, REPL, Konsolenvorgänge, Module

Hier ist der dritte Teil der Übersetzung des Node.js.-Handbuchs. Heute werden wir über die Auswahl eines Hostings für Node.js-Projekte, die Arbeit mit Node.js im REPL-Modus und die Ausführung von Skripten mit Argumenten sowie die Interaktion mit der Konsole und den Modulen sprechen.




Hosting für Node.js-Anwendungen


Die Wahl des Hostings für Node.js-Anwendungen hängt von Ihren Anforderungen ab. Hier finden Sie eine kurze Liste von Hosting-Optionen, die Sie erkunden können, indem Sie Ihre Anwendung bereitstellen und öffentlich verfügbar machen. Betrachten Sie zunächst einfache Optionen, deren Funktionen begrenzt und dann komplexer sind, aber auch mit ernsthafteren Funktionen.

▍Die einfachste Hosting-Option: lokaler Tunnel


Selbst wenn Ihrem Computer eine dynamische IP-Adresse zugewiesen ist oder Sie sich hinter NAT befinden, können Sie Ihre Anwendung darauf bereitstellen und Benutzeranforderungen über einen lokalen Tunnel an ihn senden.

Diese Option eignet sich zum schnellen Organisieren von Tests, um eine Produktdemonstration zu arrangieren oder um einer sehr kleinen Gruppe von Personen Zugriff auf die Anwendung zu gewähren.

Es gibt einen sehr guten Service für die Organisation lokaler Tunnel, ngrok , der für viele Plattformen verfügbar ist.

Mit ngrok reicht es aus, einen Befehl des Formulars ngrok PORT und auf den von Ihnen angegebenen Port kann über das Internet ngrok PORT werden. Wenn Sie die kostenlose Version des Dienstes verwenden, haben Sie gleichzeitig eine Adresse in der Domäne ngrok.io . Wenn Sie sich für ein kostenpflichtiges Abonnement entscheiden, können Sie Ihre eigenen Domain-Namen verwenden und außerdem die Sicherheit der Lösung erhöhen (mit ngrok öffnen Sie den Zugriff auf Ihren Computer über das gesamte Internet).

Ein weiteres Tool, mit dem lokale Tunnel organisiert werden können, heißt localtunnel .

▍Umgebungen zum Bereitstellen von Node.js-Projekten, für die keine Konfiguration erforderlich ist


Panne


Glitch ist eine interaktive Umgebung und Plattform für die schnelle Anwendungsentwicklung, mit der Sie sie in den Subdomains von glitch.com bereitstellen können. Diese Plattform unterstützt noch keine eigenen Benutzerdomänen. Es gibt einige Einschränkungen bei der Arbeit damit, aber sie eignet sich hervorragend für die Arbeit an Anwendungsprototypen. Das Design von Glitch sieht ziemlich lustig aus (vielleicht kann dies in die Vorteile dieser Plattform geschrieben werden), aber dies ist keine Art von "Spielzeug" -Umgebung, die sehr begrenzt ist. Hier haben Sie die Möglichkeit, mit Node.js, CDN, einem sicheren Repository für vertrauliche Informationen, dem Austausch von Daten mit GitHub und vielem mehr zu arbeiten.

Das Glitch-Projekt wird von derselben Firma hinter FogBugz und Trello (einem der Entwickler von StackOverflow) betrieben. Ich benutze diese Plattform oft, um Anwendungen zu demonstrieren.

Codepen


Codepen ist eine großartige Plattform, um die sich eine interessante Community gebildet hat. Hier können Sie Projekte erstellen, die viele Dateien enthalten, und diese mithilfe Ihrer eigenen Domäne bereitstellen.

▍ Serverlose Umgebungen


Mit serverlosen Plattformen können Sie Anwendungen veröffentlichen, ohne sich Gedanken über Server, deren Einrichtung oder Verwaltung zu machen. Das Paradigma des Serverless Computing besteht darin, dass Anwendungen als Funktionen veröffentlicht werden, die auf Anrufe an einen Netzwerkendpunkt reagieren. Ein ähnlicher Ansatz für die Anwendungsbereitstellung wird auch als FAAS (Functions As A Service, Funktion als Service) bezeichnet.

Hier sind einige beliebte Lösungen in diesem Bereich:


Beide Projekte bieten dem Entwickler eine bestimmte Abstraktionsebene, mit der Anwendungen auf verschiedenen FAAS-Plattformen veröffentlicht werden können, z. B. Amazon AWS Lambda, Microsoft Azure und Google Cloud.

▍PAAS-Lösungen


PAAS (Platform As A Service, Plattform als Service) sind Plattformen, die sich um viele Dinge kümmern, die unter normalen Umständen vom Entwickler, der die Anwendung bereitstellt, erledigt werden sollten.

Zeit jetzt


Zeit ist eine interessante Option für die Bereitstellung von Anwendungen. Die Bereitstellung auf dieser Plattform beschränkt sich auf die Eingabe des Befehls now im Terminal. Es gibt eine kostenlose Version von Zeit, es gibt einige Einschränkungen bei der Arbeit damit. Es gibt auch eine kostenpflichtige, leistungsstärkere Version dieser Plattform. Mit Zeit können Sie einfach nicht daran denken, dass Ihre Anwendung einen Server benötigt. Sie stellen die Anwendung einfach bereit und alles andere wird von dieser Plattform verwaltet.

Nanobox


Die Entwickler der Nanobox- Plattform, zu der auch die Bereitstellung von Node.js-Anwendungen gehört, nennen sie PAAS V2.

Heroku


Heroku ist eine weitere großartige Plattform zum Hosten von Node.js-Anwendungen. Hier ist ein guter Artikel darüber, wie man damit arbeitet.

Microsoft Azure


Azure ist eine Cloud-Plattform von Microsoft. Die Dokumentation enthält einen Abschnitt zu Node.js Anwendungen.

Google Cloud Platform


Google Cloud ist eine großartige Umgebung für die Bereitstellung von Node.js-Anwendungen. Hier ist der relevante Abschnitt seiner Dokumentation.

▍VPS-Hosting


Es gibt viele Plattformen, die VPS-Hostingdienste anbieten . Ein gemeinsames Merkmal solcher Plattformen ist die Tatsache, dass der Entwickler über einen virtuellen Server verfügt, unabhängig ein Betriebssystem (Linux oder Windows) darauf installiert und Anwendungen unabhängig bereitstellt.

Unter den Plattformen, die VPS-Dienste anbieten, von denen es sehr viele gibt, können wir Folgendes feststellen, das ich verwendet habe und das ich anderen empfehlen könnte:


Wir fügen hinzu, dass RUVDS auch VPS-Hosting-Dienste anbietet. Wir sind von FSTEC lizenziert, unsere Kunden sind bei AIG versichert, wir haben vier Rechenzentren in verschiedenen Ländern. In Korolev, Region Moskau, gibt es ein eigenes Rechenzentrum RUCLOUD Level TIER 3 sowie Druckzonen in den Rechenzentren Deltalis (Schweiz) , London Equinix LD8 (Großbritannien) und MMTS-9 (Moskau, Russland). Alle Sicherheitszonen erfüllen eine Zuverlässigkeitsstufe von mindestens TIER 3.

Die Partner des Unternehmens sind FINAM JSC, die BCS-Finanzgruppe, das National Settlement Depository (Moskauer Börse), VTsIOM JSC, das Unternehmen Gars-Telecom, der Taxibetreiber Gett, der Zustellbetreiber Delivery Club und viele andere.


▍Normaler Server


Eine andere Hosting-Lösung besteht darin, einen regulären Server zu kaufen (oder beispielsweise über den Vultr Bare Metal-Dienst zu mieten), Linux und andere Software darauf zu installieren, eine Verbindung zum Internet herzustellen und Node.js-Anwendungen darauf zu hosten.

Hosting ist ein großes Thema, aber hoffentlich können Sie anhand der Materialien in diesem Abschnitt genau das auswählen, was Sie benötigen. Nun wenden wir uns der Geschichte über die Arbeit mit Node.js im REPL-Modus zu.

Verwenden von Node.js im REPL-Modus


Die Abkürzung REPL steht für Read-Evaluate-Print-Loop (Zyklus "Lesen - Berechnen - Ausgeben"). Die Verwendung von REPL ist eine großartige Möglichkeit, die Funktionen von Node.js schnell zu erkunden.

Wie Sie bereits wissen, wird der Befehl node zum Ausführen von Skripten in Node.js verwendet. Er sieht folgendermaßen aus:

 node script.js 

Wenn Sie denselben Befehl eingeben, aber keinen Dateinamen angeben, wird Node.js im REPL-Modus gestartet:

 node 

Wenn Sie jetzt versuchen, einen solchen Befehl in Ihr Terminal einzugeben, wird als Ergebnis Folgendes angezeigt:

 > node > 

Node.js befindet sich jetzt im Standby-Modus. Das System erwartet, dass wir JavaScript-Code in die Befehlszeile eingeben, die es ausführen wird.

Lassen Sie uns zunächst etwas sehr Einfaches ausprobieren:

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

Hier haben wir Node.js vorgeschlagen, den Befehl zum Ausgeben von Daten an die Konsole auszuführen. Der erste Wert, test , ist das, was console.log('test') . Der zweite undefined Wert wird von der Funktion console.log() zurückgegeben.

Nach Abschluss des Befehls wird die REPL-Eingabeaufforderung angezeigt. Dies bedeutet, dass wir hier einen neuen Befehl eingeben können.

▍Vollenden Sie die Befehle mit der Tabulatortaste


REPL ist eine interaktive Umgebung. Wenn Sie beim Schreiben von Code die Tab auf Ihrer Tastatur drücken, versucht REPL, die Eingabe automatisch abzuschließen, indem Sie beispielsweise einen geeigneten Namen für die bereits deklarierte Variable oder den Namen eines Standardobjekts auswählen.

▍Erforschen von JavaScript-Objekten


Geben Sie den Namen eines Standard-JavaScript-Objekts in die Befehlszeile ein, z. B. Number , fügen Sie einen Punkt danach hinzu und drücken Sie die Tab .

REPL listet die Eigenschaften und Methoden des Objekts auf, mit denen der Entwickler interagieren kann:


Untersuchen des Zahlenobjekts

▍Entdecken Sie globale Objekte


Geben Sie den global. Befehl im Terminal ein, um herauszufinden, mit welchen globalen Node.js-Objekten Sie arbeiten können global. und drücken Sie die Tab .


Globale Objektforschung

▍ Spezialvariable _


Die Variable _ (Unterstrich) speichert das Ergebnis der zuletzt ausgeführten Operation. Diese Variable kann als Teil von Befehlen verwendet werden, die in die Konsole eingegeben werden.

▍ Befehle, die mit einem Punkt beginnen


Im REPL-Modus können Sie einige spezielle Befehle verwenden, die mit einem Punkt beginnen. Hier sind sie:

  • Der Befehl .help zeigt Referenzinformationen für Befehle an, die mit einem Punkt beginnen.
  • Der Befehl .editor System in den Editor-Modus, wodurch die Eingabe von mehrzeiligem JavaScript-Code vereinfacht wird. Nachdem Sie sich in diesem Modus befunden haben, geben Sie alles ein, was Sie möchten. Um den Code auszuführen, verwenden Sie den Befehl Ctrl+D
  • Mit .break Befehl .break können .break die Eingabe mehrzeiliger Ausdrücke abbrechen. Die Verwendung ähnelt der Verwendung der Tastenkombination Ctrl+C
  • Der Befehl .clear löscht den REPL-Kontext und unterbricht auch die Eingabe eines mehrzeiligen Ausdrucks.
  • Der Befehl .load lädt Code aus einer JavaScript-Datei in die aktuelle Sitzung.
  • Der Befehl .save speichert alles, was während der REPL-Sitzung eingegeben wurde, in der Datei.
  • Mit .exit Befehl .exit können .exit eine REPL-Sitzung .exit wie zwei aufeinanderfolgende Tastenanschläge der Tastenkombination Ctrl+C

Es ist zu beachten, dass REPL die Eingabe mehrzeiliger Ausdrücke auch ohne Verwendung des .editor .

Zum Beispiel haben wir begonnen, einen Iteratorcode einzugeben:

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

Wenn Sie nach Eingabe der geschweiften Klammer die Enter drücken, wechselt REPL zu einer neuen Zeile, deren Eingabeaufforderung wie drei Punkte aussieht. Dies zeigt an, dass wir den Code für den entsprechenden Block eingeben können. Es sieht so aus:

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

Durch Drücken der Enter nach Eingabe der letzten Klammer wird der Ausdruck ausgeführt. Wenn Sie in diesem Modus .break eingeben, wird die Eingabe abgebrochen und der Ausdruck nicht ausgeführt.

Der REPL-Modus ist eine nützliche Funktion von Node.js, sein Umfang ist jedoch auf kleine Experimente beschränkt. Wir interessieren uns für etwas mehr als die Fähigkeit, einige Befehle auszuführen. Daher arbeiten wir im normalen Modus mit Node.js weiter. Lassen Sie uns nämlich darüber sprechen, wie Node.js-Skripte Befehlszeilenargumente annehmen können.

Arbeiten mit Befehlszeilenargumenten in Node.js-Skripten


Beim Ausführen von Node.js-Skripten können Argumente an diese übergeben werden. Hier ist ein regulärer Skriptaufruf:

 node app.js 

Die an das Skript übergebenen Argumente können entweder unabhängige Werte oder Schlüsselwertkonstrukte sein. Im ersten Fall sieht das Ausführen des Skripts folgendermaßen aus:

 node app.js flavio 

Im zweiten - so:

 node app.js name=flavio 

Die Methode zum Übergeben von Argumenten wird verwendet, um zu bestimmen, wie Sie im Skriptcode mit ihnen arbeiten können.

Um auf die Befehlszeilenargumente zuzugreifen, wird das Standardprozessobjekt Node.js verwendet. Es hat die Eigenschaft argv , ein Array, das unter anderem die Argumente enthält, die beim Start an das Skript übergeben werden.

Das erste Element des argv Arrays enthält den vollständigen Pfad zu der Datei, die ausgeführt wird, wenn der node in die Befehlszeile eingegeben wird.

Das zweite Element ist der Pfad zur ausführbaren Skriptdatei.

Alle anderen Elemente des Arrays, beginnend mit dem dritten, enthalten das, was beim Ausführen an das Skript übergeben wurde.

Die Aufzählung der in argv verfügbaren Argumente (dies umfasst sowohl den Pfad zum node als auch den Pfad zur ausführbaren Datei des Skripts) kann mithilfe der forEach Schleife organisiert werden:

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

Wenn Sie nicht an den ersten beiden Argumenten interessiert sind, können Sie basierend auf argv ein neues Array erstellen, das alles von argv Ausnahme der ersten beiden Elemente enthält:

 const args = process.argv.slice(2) 

Angenommen, beim Ausführen eines Skripts wurde nur ein Argument in Form eines unabhängigen Werts an das Skript übergeben:

 node app.js flavio 

Sie können auf dieses Argument folgendermaßen zugreifen:

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

Versuchen wir nun, eine Schlüsselwerttypkonstruktion zu verwenden:

 node app.js name=flavio 

Bei diesem Ansatz wird nach der Bildung des name=flavio Arrays der String- name=flavio in args[0] name=flavio . Bevor Sie das Argument verwenden, muss diese Zeichenfolge analysiert werden. Der bequemste Weg, dies zu tun, ist die Verwendung der Minimist- Bibliothek, die das Arbeiten mit Befehlszeilenargumenten erleichtern soll:

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

Betrachten Sie nun die Ausgabe an die Konsole.

Daten über das Konsolenmodul an die Konsole ausgeben


Das Standard- Konsolenmodul Node.js bietet dem Entwickler viele Möglichkeiten zur Interaktion mit der Befehlszeile während der Programmausführung. Im Allgemeinen entspricht dies dem console , das in browserbasiertem JavaScript verwendet wird. Die vielleicht einfachste und am weitesten verbreitete Methode des console ist console.log() , mit der Zeichenfolgendaten an die Konsole ausgegeben werden. Wenn Sie ein Objekt an dieses übergeben, wird es vor der Ausgabe in seine Zeichenfolgendarstellung konvertiert.

Der Methode console.log() können mehrere Werte übergeben werden:

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

Nach dem Ausführen dieser Befehlsfolge gelangen sowohl der x Wert als auch der y Wert zur Konsole.

Um komplexe Zeichenfolgen zu bilden, unterstützt der Befehl console.log() die Verwendung von Platzhaltern, die bei der Ausgabe von Daten in der Reihenfolge ihrer Priorität durch die entsprechenden Werte ersetzt werden.

Hier ist zum Beispiel ein Befehl, der den Text anzeigt. My cat has 2 years :

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

Betrachten Sie die Funktionen von Platzhaltern:

  • %s formatiert den Wert als Zeichenfolge.
  • %d oder %i formatieren den Wert als Ganzzahl.
  • %f formatiert den Wert als Gleitkommazahl.
  • %O verwendet, um Zeichenfolgendarstellungen von Objekten anzuzeigen.

Hier ist ein weiteres Beispiel für die Verwendung von Platzhaltern:

 console.log('%O', Number) 

▍Reinigen der Konsole


Verwenden Sie zum console.clear() der Konsole den Befehl console.clear() (das Verhalten in verschiedenen Terminals kann variieren).

▍Zählen von Elementen


Jetzt schauen wir uns die nützliche Methode console.count() . Schauen Sie sich diesen Code an:

 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?' ) 

Die Methode count() zählt die Anzahl der Zeilenausgaben und zeigt das Ergebnis daneben an.
Mit dieser Methode können Sie im folgenden Beispiel Äpfel und Orangen zählen:

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

▍Anzeigen der Ergebnisse der Stapelverfolgung auf der Konsole


Manchmal ist es nützlich, eine Ablaufverfolgung des Funktionsstapels auf der Konsole zu drucken. Zum Beispiel, um die Frage zu beantworten, wie wir zu einem bestimmten Ort im Programm gekommen sind. Sie können dies mit dem folgenden Befehl tun:

 console.trace() 

Hier ist ein Beispiel für seine Verwendung:

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

Folgendes ist passiert, als ich diesen Code im REPL-Modus ausgeführt habe:

 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) 

▍Messen der Zeit, die zum Ausführen einer Aktion benötigt wird


Mit den console.time() und console.timeEnd() können Sie beispielsweise die Zeit messen, die zum Ausführen einer Funktion benötigt wird. Es sieht so aus:

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

▍Arbeiten mit stdout und stderr


Wie wir gesehen haben, console.log() Befehl console.log() hervorragend zum Ausgeben von Nachrichten an die Konsole. Bei Verwendung wird der sogenannte Standardausgabestream oder stdout .

Der Befehl console.error() speichert Daten im Standardfehlerstrom stderr . An stderr gesendete Daten werden an die Konsole gesendet, obwohl das, was an diesen Stream ausgegeben wird, beispielsweise in die Fehlerprotokolldatei umgeleitet werden kann.

▍Verwenden Sie Farbe, wenn Sie Daten an die Konsole ausgeben


Um die in der Konsole angezeigten Texte einzufärben, können Sie Escape-Sequenzen verwenden, die Farben identifizieren:

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

Wenn Sie diesen Befehl beispielsweise im REPL-Modus ausführen, wird der Text hi gelb angezeigt.
Dieser Ansatz ist jedoch nicht besonders praktisch. Es ist praktisch, eine spezielle Bibliothek zu verwenden, z. B. Kreide, um farbigen Text in der Konsole anzuzeigen . Diese Bibliothek unterstützt neben der Farbformatierung von Texten auch andere Formen ihrer Gestaltung. Mit seiner Hilfe ist es beispielsweise möglich, den Text fett, kursiv oder unterstrichen zu gestalten.

Verwenden Sie den folgenden Befehl, um es von npm zu installieren:

 npm install chalk 

Sie können es so verwenden:

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

Die Verwendung des chalk.yellow() ist viel praktischer als Escape-Sequenzen, und der Programmtext mit diesem Ansatz ist viel einfacher zu lesen.

Weitere Informationen zu Kreide finden Sie auf dieser Bibliotheksseite auf GitHub.

▍Erstellen Sie einen Fortschrittsbalken


Der Fortschrittsbalken kann in verschiedenen Situationen nützlich sein. Mit dem Fortschrittspaket können Sie Fortschrittsanzeigen erstellen, die in der Konsole ausgeführt werden. Sie können es folgendermaßen installieren:

 npm install progress 

Unten finden Sie ein Beispiel für Code, in dem ein Indikator erstellt wird, mit dem Informationen zu einer Aufgabe angezeigt werden können, die aus 10 Schritten besteht. In unserem Fall dauert es 100 ms, um jeden Schritt abzuschließen. Nachdem der Indikator voll ist, wird der Befehl clearItnerval() und das Programm beendet.

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

▍Empfang von Benutzereingaben über die Befehlszeile


Wie mache ich Befehlszeilenanwendungen, die für die Node.js-Plattform geschrieben wurden, interaktiv? Ab Version 7 enthält Node.js ein Readline- Modul, mit dem Sie Daten aus Streams empfangen können, die beispielsweise aus process.stdin gelesen werden können. Dieser Thread wird während der Ausführung des Programms Node.js in das Terminal eingegeben. Die Daten werden zeilenweise eingegeben.

Betrachten Sie das folgende Codefragment:

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

Hier fragen wir den Benutzer nach seinem Namen und nachdem wir den Text eingegeben und die Enter auf der Tastatur gedrückt haben, zeigen wir eine Begrüßung an.

Die Methode question() zeigt an, was als erster Parameter an sie übergeben wird (dh die dem Benutzer gestellte Frage), und wartet, bis die Eingabe abgeschlossen ist. Nach dem Drücken der Enter ruft es den im zweiten Parameter übergebenen Rückruf auf und verarbeitet die eingegebenen Daten. Im selben Rückruf schließen wir die readline Schnittstelle.

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 .

Liebe Leser! Node.js-?

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


All Articles