Ini adalah bagian ketiga dari terjemahan manual Node.js. Hari ini kita akan berbicara tentang memilih hosting untuk proyek Node.js, bagaimana bekerja dengan Node.js dalam mode REPL dan bagaimana menjalankan skrip dengan argumen, cara berinteraksi dengan konsol dan modul.

[Kami menyarankan Anda untuk membaca] Bagian lain dari siklus iniBagian 1: 
Informasi Umum dan MemulaiBagian 2: 
JavaScript, V8, beberapa trik pengembanganBagian 3: 
Hosting, REPL, bekerja dengan konsol, modulBagian 4: 
npm, package.json dan file package-lock.jsonBagian 5: 
npm dan npxBagian 6: 
loop acara, tumpukan panggilan, timerBagian 7: 
Pemrograman AsinkronBagian 8: 
Panduan Node.js, Bagian 8: HTTP dan Protokol WebSocketBagian 9: 
Panduan Node.js, bagian 9: bekerja dengan sistem fileBagian 10: 
Panduan Node.js, Bagian 10: Modul Standar, Streaming, Database, NODE_ENVPDF lengkap dari Node.js Guide Hosting untuk Aplikasi Node.js
Pilihan hosting untuk aplikasi Node.js tergantung pada kebutuhan Anda. Berikut adalah daftar singkat opsi hosting yang dapat Anda jelajahi dengan memutuskan untuk menggunakan aplikasi Anda dan membuatnya tersedia untuk umum. Pertama, pertimbangkan opsi sederhana, yang kemampuannya terbatas, dan kemudian lebih kompleks, tetapi juga dengan kemampuan yang lebih serius.
Option Opsi hosting termudah: terowongan lokal
Bahkan jika alamat IP dinamis diberikan ke komputer Anda atau Anda berada di belakang NAT, Anda dapat menggunakan aplikasi Anda di atasnya dan melayani permintaan pengguna untuk itu menggunakan terowongan lokal.
Opsi ini cocok untuk pengorganisasian pengujian dengan cepat, untuk mengatur demonstrasi produk, atau untuk memberikan akses ke aplikasi ke sekelompok orang yang sangat kecil.
Ada layanan yang sangat baik untuk mengatur terowongan lokal, 
ngrok , tersedia untuk banyak platform.
Menggunakan ngrok, itu sudah cukup untuk menjalankan perintah dari bentuk 
ngrok PORT dan port yang Anda tentukan akan dapat diakses dari Internet. Pada saat yang sama, jika Anda menggunakan versi layanan gratis, Anda akan memiliki alamat di domain 
ngrok.io . Jika Anda memutuskan untuk berlangganan, Anda dapat menggunakan nama domain Anda sendiri, dan di samping itu, Anda dapat meningkatkan keamanan solusi (menggunakan ngrok, Anda membuka akses ke komputer Anda di seluruh Internet).
Alat lain yang dapat digunakan untuk mengatur terowongan lokal disebut 
localtunnel .
âLingkungan untuk menyebarkan proyek Node.js yang tidak memerlukan konfigurasi
Kesalahan
Glitch adalah lingkungan dan platform interaktif untuk pengembangan aplikasi cepat yang memungkinkan Anda untuk menyebarkannya di subdomain glitch.com. Platform ini belum mendukung domain penggunanya sendiri, ada beberapa 
batasan saat bekerja dengannya, tetapi sangat bagus untuk mengerjakan prototipe aplikasi. Desain Glitch terlihat cukup lucu (mungkin ini dapat ditulis menjadi keunggulan platform ini), tetapi ini bukan semacam "mainan" lingkungan yang sangat terbatas. Di sini Anda memiliki kesempatan untuk bekerja dengan Node.js, CDN, repositori aman untuk informasi rahasia, kemampuan untuk bertukar data dengan GitHub dan banyak lagi.
Proyek Glitch dijalankan oleh perusahaan yang sama di belakang FogBugz dan Trello (salah satu pencipta StackOverflow). Saya sering menggunakan platform ini untuk menunjukkan aplikasi.
Codepen
Codepen adalah platform hebat di mana komunitas yang menarik telah terbentuk. Di sini Anda dapat membuat proyek yang menyertakan banyak file, dan menggunakan mereka menggunakan domain Anda sendiri.
â Lingkungan tanpa server
Platform tanpa server memungkinkan Anda untuk menerbitkan aplikasi tanpa sepenuhnya memikirkan server, tentang pengaturannya atau tentang pengelolaannya. Paradigma komputasi tanpa server adalah aplikasi yang mempublikasikan sebagai fungsi yang merespons panggilan ke titik akhir jaringan. Pendekatan serupa untuk penyebaran aplikasi juga disebut FAAS (Functions As A Service, Function as a Service).
Berikut adalah beberapa solusi populer di bidang ini:
Kedua proyek ini memberikan pengembang dengan tingkat abstraksi tertentu, yang memungkinkan penerbitan aplikasi pada berbagai platform FAAS, misalnya, Amazon AWS Lambda, Microsoft Azure dan Google Cloud.
â solusi PAAS
PAAS (Platform Sebagai Layanan, Platform sebagai Layanan) adalah platform yang menangani banyak hal yang, dalam keadaan normal, harus diurus oleh pengembang yang menyebarkan aplikasi.
Zeit Sekarang
Zeit adalah opsi yang menarik untuk menggunakan aplikasi. Penempatan, menggunakan platform ini, bermuara untuk memasukkan perintah 
now di terminal. Ada Zeit versi gratis, ada beberapa batasan saat bekerja dengannya. Ada juga versi berbayar yang lebih kuat dari platform ini. Menggunakan Zeit, Anda tidak bisa memikirkan fakta bahwa aplikasi Anda memerlukan server. Anda cukup menggunakan aplikasi, dan semua lainnya dikelola oleh platform ini.
Nanobox
Pencipta platform 
Nanobox , yang mencakup penyebaran aplikasi Node.js, menyebutnya PAAS V2.
Heroku
Heroku adalah platform hebat lainnya untuk hosting aplikasi Node.js. 
Berikut ini adalah artikel yang bagus tentang cara bekerja dengannya.
Microsoft biru
Azure adalah platform cloud dari Microsoft. Dokumentasinya memiliki 
bagian tentang aplikasi Node.js.
Google Cloud Platform
Google Cloud adalah lingkungan yang hebat untuk menyebarkan aplikasi Node.js. 
Inilah bagian yang relevan dari dokumentasinya.
âVPS hosting
Ada banyak platform yang menyediakan 
layanan hosting VPS . Fitur umum dari platform semacam itu adalah kenyataan bahwa pengembang memiliki server virtual, secara mandiri menginstal sistem operasi (Linux atau Windows) di dalamnya, dan secara mandiri menyebarkan aplikasi.
Di antara platform yang menyediakan layanan VPS, yang jumlahnya sangat banyak, kami dapat mencatat hal-hal berikut, yang saya gunakan dan yang dapat saya rekomendasikan kepada orang lain:
Kami sendiri, kami menambahkan bahwa RUVDS juga menyediakan layanan hosting VPS. Kami dilisensikan oleh FSTEC, pelanggan kami diasuransikan oleh AIG, kami memiliki empat pusat data di berbagai negara. Ada pusat data sendiri RUCLOUD level TIER 3 di kota Korolev, wilayah Moskow, serta zona tekanan di pusat data Deltalis (Swiss) , London Equinix LD8 (Inggris Raya) , dan MMTS-9 (Moskow, Rusia). Semua zona penahanan memenuhi tingkat keandalan setidaknya TIER 3. 
Mitra perusahaan adalah FINAM JSC, grup keuangan BCS, National Settlement Depository (Moscow Exchange), VTsIOM JSC, perusahaan Gars-Telecom, operator taksi Gett, operator pengiriman Klub Pengiriman dan banyak lainnya. 
Server Server normal
Solusi hosting lain adalah membeli (atau menyewa, misalnya, menggunakan layanan 
Vultr Bare Metal ) server biasa, menginstal Linux dan perangkat lunak lain di dalamnya, menghubungkannya ke Internet dan host aplikasi Node.js di atasnya.
Hosting adalah topik yang sangat besar, tetapi, semoga, materi dalam bagian ini memungkinkan Anda untuk memilih dengan tepat apa yang Anda butuhkan. Sekarang kita beralih ke cerita tentang bekerja dengan Node.js dalam mode REPL.
Menggunakan Node.js dalam Mode REPL
Singkatan REPL adalah singkatan dari Read-Evaluate-Print-Loop (siklus "baca - hitung - keluaran"). Menggunakan REPL adalah cara yang bagus untuk dengan cepat menjelajahi kemampuan Node.js.
Seperti yang sudah Anda ketahui, perintah 
node digunakan untuk menjalankan skrip di Node.js, tampilannya seperti ini:
 node script.js 
Jika Anda memasukkan perintah yang sama, tetapi tidak menentukan nama file, Node.js akan diluncurkan dalam mode REPL:
 node 
Jika Anda mencoba sekarang untuk memasukkan perintah seperti itu di terminal Anda, maka sebagai hasilnya Anda akan melihat sesuatu seperti berikut:
 > node > 
Node.js sekarang dalam mode siaga. Sistem mengharapkan kita untuk memasukkan beberapa kode JavaScript pada baris perintah yang akan dijalankannya.
Untuk memulai, mari kita coba sesuatu yang sangat sederhana:
 > console.log('test') test undefined > 
Di sini kami menyarankan Node.js untuk mengeksekusi perintah yang digunakan untuk menampilkan data ke konsol. Nilai pertama, 
test , adalah apa yang 
console.log('test') . Nilai kedua, 
undefined , adalah apa yang mengembalikan fungsi 
console.log() .
Setelah perintah selesai, prompt REPL muncul, yang berarti bahwa kita dapat memasukkan perintah baru di sini.
â Perintah lengkap menggunakan tombol Tab
REPL adalah lingkungan yang interaktif. Jika Anda menekan tombol 
Tab pada keyboard Anda saat menulis kode, REPL akan mencoba untuk secara otomatis menyelesaikan entri dengan memilih, misalnya, nama yang sesuai untuk variabel yang telah Anda deklarasikan atau nama objek standar.
âMelayani Objek JavaScript
Masukkan nama beberapa objek JavaScript standar di baris perintah, misalnya, 
Number , tambahkan titik setelah itu dan tekan 
Tab .
REPL akan mencantumkan properti dan metode objek yang dapat berinteraksi dengan pengembang:
Meneliti Objek AngkaâMelayani objek global
Untuk mengetahui objek Node.js global mana yang dapat Anda gunakan, masukkan perintah 
global. di terminal 
global. dan tekan 
Tab .
Penelitian Objek Globalâ Variabel Khusus _
Variabel 
_ (garis bawah) menyimpan hasil dari operasi terakhir yang dilakukan. Variabel ini dapat digunakan sebagai bagian dari perintah yang dimasukkan ke konsol.
â Perintah dimulai dengan titik
Dalam mode REPL, Anda dapat menggunakan beberapa perintah khusus yang dimulai dengan titik. Inilah mereka:
- Perintah .helpmenampilkan informasi referensi untuk perintah yang dimulai dengan titik.
- Perintah .editorsistem dalam mode editor, yang membuatnya mudah untuk memasukkan kode JavaScript multi-line. Setelah berada dalam mode ini, Anda memasukkan semua yang Anda inginkan, untuk menjalankan kode, gunakan perintahCtrl+D
- Perintah .breakmemungkinkan.breakuntuk membatalkan input ekspresi multi-line. Penggunaannya mirip dengan penggunaan pintasan keyboardCtrl+C
- Perintah .clearmenghapus konteks REPL dan juga memotong input ekspresi multi-line.
- Perintah .loadmemuat kode dari file JavaScript ke dalam sesi saat ini.
- Perintah .savemenyimpan semua yang dimasukkan selama sesi REPL ke file.
- Perintah .exitmemungkinkan.exituntuk keluar dari sesi REPL, ia bertindak seperti dua penekanan tombol berurutan dari kombinasi tombolCtrl+C
Perlu dicatat bahwa REPL mengakui input ekspresi multi-line bahkan tanpa menggunakan 
.editor .
Misalnya, kami mulai memasukkan kode iterator:
 [1, 2, 3].forEach(num => { 
Jika, setelah memasukkan kurung kurawal, tekan tombol 
Enter , REPL akan menuju ke baris baru, prompt di mana akan terlihat seperti tiga titik. Ini menunjukkan bahwa kita dapat memasukkan kode untuk blok yang sesuai. Ini terlihat seperti ini:
 ... console.log(num) ... }) 
Menekan 
Enter setelah memasukkan tanda kurung terakhir akan menjalankan ekspresi. Jika Anda memasukkan 
.break dalam mode ini, input akan dibatalkan dan ekspresi tidak akan dieksekusi.
Mode REPL adalah fitur berguna Node.js, tetapi cakupannya terbatas pada eksperimen kecil. Kami tertarik pada sesuatu yang lebih dari kemampuan untuk menjalankan beberapa perintah. Oleh karena itu, kami beralih ke bekerja dengan Node.js dalam mode normal. Yaitu, mari kita bicara tentang bagaimana skrip Node.js dapat mengambil argumen baris perintah.
Bekerja dengan argumen baris perintah dalam skrip Node.js
Saat menjalankan skrip Node.js, argumen dapat diteruskan ke mereka. Ini panggilan skrip biasa:
 node app.js 
Argumen yang diteruskan ke skrip dapat berupa nilai independen atau konstruk nilai kunci. Dalam kasus pertama, menjalankan skrip terlihat seperti ini:
 node app.js flavio 
Yang kedua - seperti ini:
 node app.js name=flavio 
Metode meneruskan argumen digunakan untuk menentukan bagaimana Anda bisa bekerja dengannya dalam kode skrip.
Jadi, untuk mengakses argumen baris perintah, objek 
process Node.js standar digunakan. Ini memiliki properti 
argv , yang merupakan array yang berisi, antara lain, argumen yang diteruskan ke skrip saat startup.
Elemen pertama dari array 
argv berisi path lengkap ke file yang dieksekusi ketika perintah 
node dimasukkan pada baris perintah.
Elemen kedua adalah path ke skrip executable.
Semua elemen lain dari array, mulai dari yang ketiga, berisi apa yang diteruskan ke skrip ketika dijalankan.
Enumerasi argumen yang tersedia di 
argv (ini termasuk path ke 
node dan path ke file skrip yang dapat dieksekusi) dapat diatur menggunakan 
forEach loop:
 process.argv.forEach((val, index) => { console.log(`${index}: ${val}`) }) 
Jika Anda tidak tertarik pada dua argumen pertama, berdasarkan 
argv Anda dapat membuat array baru yang akan mencakup semuanya dari 
argv kecuali dua elemen pertama:
 const args = process.argv.slice(2) 
Misalkan, saat menjalankan skrip, hanya satu argumen yang diteruskan ke sana, dalam bentuk nilai independen:
 node app.js flavio 
Anda dapat mengakses argumen ini seperti ini:
 const args = process.argv.slice(2) args[0] 
Sekarang mari kita coba menggunakan konstruksi tipe nilai kunci:
 node app.js name=flavio 
Dengan pendekatan ini, setelah array 
args terbentuk, 
name=flavio string 
name=flavio dalam 
args[0] . Sebelum menggunakan argumen, string ini harus diuraikan. Cara paling mudah untuk melakukan ini adalah dengan menggunakan perpustakaan 
minimalis , yang dirancang untuk memudahkan bekerja dengan argumen baris perintah:
 const args = require('minimist')(process.argv.slice(2)) args['name']  
Sekarang perhatikan output ke konsol.
Mengeluarkan data ke konsol menggunakan modul konsol
Modul 
konsol Node.js standar memberi pengembang banyak peluang untuk berinteraksi dengan baris perintah selama eksekusi program. Secara umum, ini sama dengan objek 
console digunakan dalam JavaScript berbasis browser. Mungkin metode modul 
console paling sederhana dan paling banyak digunakan adalah 
console.log() , yang digunakan untuk menampilkan data string ke konsol. Selain itu, jika Anda melewatkan sebuah objek ke sana, maka itu, sebelum output, akan dikonversi ke representasi stringnya.
Metode 
console.log() dapat memberikan beberapa nilai:
 const x = 'x' const y = 'y' console.log(x, y) 
Setelah menjalankan urutan instruksi ini, baik nilai 
x dan nilai 
y akan sampai ke konsol.
Untuk membentuk string yang kompleks, perintah 
console.log() mendukung penggunaan wildcard, yang ketika mengeluarkan data, diganti dengan nilai-nilai yang sesuai dalam urutan prioritas.
Sebagai contoh, berikut adalah perintah yang menampilkan teks 
My cat has 2 years :
 console.log('My %s has %d years', 'cat', 2) 
Pertimbangkan fitur wildcard:
- %smemformat nilai sebagai string.
- %datau- %imemformat nilai sebagai bilangan bulat.
- %fmemformat nilai sebagai angka titik-mengambang.
- %Odigunakan untuk menampilkan representasi string dari objek.
Berikut adalah contoh lain menggunakan wildcard:
 console.log('%O', Number) 
âMembersihkan konsol
Untuk menghapus konsol, gunakan perintah 
console.clear() (perilakunya di terminal yang berbeda dapat bervariasi).
â Elemen Penghitungan
Sekarang kita akan melihat metode 
console.count() berguna. Lihatlah kode ini:
 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?' ) 
Metode 
count() menghitung jumlah output baris dan menampilkan hasilnya di sebelahnya.
Dengan menggunakan metode ini, dalam contoh berikut, Anda dapat menghitung apel dan jeruk:
 const oranges = ['orange', 'orange'] const apples = ['just one apple'] oranges.forEach(fruit => { console.count(fruit) }) apples.forEach(fruit => { console.count(fruit) }) 
âMenampilkan hasil penelusuran tumpukan ke konsol
Kadang-kadang berguna untuk mencetak jejak tumpukan fungsi ke konsol. Misalnya, untuk menjawab pertanyaan tentang bagaimana kami sampai di tempat tertentu dalam program. Anda dapat melakukan ini dengan perintah berikut:
 console.trace() 
Berikut ini adalah contoh penggunaannya:
 const function2 = () => console.trace() const function1 = () => function2() function1() 
Inilah yang terjadi ketika saya menjalankan kode ini dalam 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) 
âMengukur waktu yang dibutuhkan untuk menyelesaikan suatu tindakan
Anda dapat mengukur waktu yang dibutuhkan, misalnya, untuk menjalankan fungsi, menggunakan metode 
console.time() dan 
console.timeEnd() . Ini terlihat seperti ini:
 const doSomething = () => console.log('test') const measureDoingSomething = () => { console.time('doSomething()') //    ,     doSomething() console.timeEnd('doSomething()') } measureDoingSomething() 
âBekerja dengan stdout dan stderr
Seperti yang telah kita lihat, perintah 
console.log() sangat bagus untuk menampilkan pesan ke konsol. Saat menggunakannya, apa yang disebut stream output standar, atau 
stdout .
Perintah 
console.error() membuang data ke stream kesalahan standar, 
stderr . Data yang dikirim ke 
stderr sampai ke konsol, meskipun apa yang dihasilkan oleh aliran ini dapat, misalnya, dialihkan ke file log kesalahan.
âGunakan warna saat mengeluarkan data ke konsol
Untuk mewarnai teks yang ditampilkan di konsol, Anda dapat menggunakan urutan pelarian yang mengidentifikasi warna:
 console.log('\x1b[33m%s\x1b[0m', 'hi!') 
Jika Anda menjalankan perintah ini, misalnya, dalam mode REPL, teks 
hi akan ditampilkan dengan warna kuning.
Namun pendekatan ini tidak terlalu nyaman. Akan lebih mudah menggunakan perpustakaan khusus, misalnya, 
kapur tulis, untuk menampilkan teks berwarna di konsol . Perpustakaan ini, di samping pemformatan warna teks, mendukung cara lain untuk menata mereka. Misalnya, dengan bantuannya dimungkinkan untuk membuat teks dalam huruf tebal, miring atau bergaris bawah.
Untuk menginstalnya dari npm, gunakan perintah berikut:
 npm install chalk 
Anda bisa menggunakannya seperti ini:
 const chalk = require('chalk') console.log(chalk.yellow('hi!')) 
Menggunakan perintah 
chalk.yellow() jauh lebih nyaman daripada escape sequence, dan teks program dengan pendekatan ini jauh lebih mudah dibaca.
Untuk mempelajari lebih lanjut tentang kapur, periksa 
halaman perpustakaan ini di GitHub.
âBuat bilah kemajuan
Bilah kemajuan mungkin berguna dalam situasi yang berbeda. Anda dapat menggunakan paket 
progres untuk membuat indikator progres berjalan di konsol. Anda dapat menginstalnya seperti ini:
 npm install progress 
Di bawah ini adalah contoh kode di mana indikator dibuat yang dapat digunakan untuk menampilkan informasi tentang tugas yang terdiri dari 10 langkah. Dalam kasus kami, dibutuhkan 100 ms untuk menyelesaikan setiap langkah. Setelah indikator penuh, perintah 
clearItnerval() dan program berakhir.
 const ProgressBar = require('progress') const bar = new ProgressBar(':bar', { total: 10 }) const timer = setInterval(() => { bar.tick() if (bar.complete) {   clearInterval(timer) } }, 100) 
âPenerimaan input pengguna dari baris perintah
Bagaimana cara membuat aplikasi baris perintah yang ditulis untuk platform Node.js interaktif? Mulai dari versi 7, Node.js berisi modul 
readline yang memungkinkan Anda menerima data dari stream yang dapat dibaca, misalnya, dari 
process.stdin . Utas ini, selama eksekusi program Node.js, adalah apa yang dimasukkan di terminal. Data dimasukkan satu baris pada satu waktu.
Pertimbangkan potongan kode berikut:
 const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }) readline.question(`What's your name?`, (name) => { console.log(`Hi ${name}!`) readline.close() }) 
Di sini kami menanyakan namanya kepada pengguna, dan setelah memasukkan teks dan menekan tombol 
Enter pada keyboard, kami menampilkan salam.
Metode 
question() menampilkan apa yang diteruskan sebagai parameter pertama (yaitu, pertanyaan yang diajukan kepada pengguna) dan menunggu input untuk diisi. Setelah menekan 
Enter ia memanggil callback yang dilewatinya di parameter kedua dan memproses apa yang dimasukkan. Dalam panggilan balik yang sama, kami menutup antarmuka 
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 .
Pembaca yang budiman! Node.js-?
