Selamat siang teman!
Saya terus memposting terjemahan tutorial Node.js ini .
Bagian lain:
Bagian 1
Bagian 2
Bagian 3
Bagian 4
Mesin JavaScript V8
V8 adalah nama mesin JavaScript yang didukung oleh Google Chrome. Ini adalah hal yang mengambil kode JavaScript Anda dan menjalankannya di browser.
Dengan kata lain, V8 adalah runtime JavaScript. DOM dan API web lainnya juga diekspos oleh browser.
Mesin JavaScript adalah peramban independen. Inilah yang menyebabkan munculnya Node.js. V8 dipilih sebagai mesin untuk Node.js pada tahun 2009, dan dengan semakin populernya Node.js, V8 telah menjadi dasar bagi banyak JavaScript sisi-server.
Ekosistem Node.js sangat besar dan berkat V8 kami dapat membuat aplikasi desktop menggunakan Electron misalnya.
Mesin JS lainnya
Peramban lain memiliki mesin JavaScript sendiri:
- Firefox - SpiderMonkey
- Safari - JavaScriptCore (Nitro)
- Tepi - Chakra
dll.
Semua mesin ini menerapkan standar ECMA ES-262 (ECMAScript) , standar yang digunakan oleh JavaScript.
Tentang kinerja
V8 ditulis dalam C ++ dan terus berkembang. Ini bekerja pada semua sistem operasi.
Kami tidak akan mempertimbangkan fitur implementasi V8: Anda dapat menemukannya di sini , mereka berubah dari waktu ke waktu, seringkali secara radikal.
V8 terus berkembang, seperti mesin JavaScript lainnya, untuk meningkatkan kecepatan web dan ekosistem Node.js.
Ada kompetisi kinerja di web yang telah berlangsung selama bertahun-tahun, dan kami (sebagai pengguna dan pengembang) mendapatkan banyak dari kompetisi ini karena kami mendapatkan alat yang lebih cepat dan lebih dioptimalkan setiap tahun.
Kompilasi
JavaScript biasanya dipasarkan sebagai bahasa yang ditafsirkan, tetapi mesin modern tidak hanya menafsirkan JavaScript, mereka juga mengkompilasinya.
Ini telah terjadi sejak 2009 ketika kompiler SpiderMonkey JavaScript ditambahkan di Firefox 3.5.
JavaScript mengkompilasi V8 on-the-fly (just-in-time, JIT, kompilasi dinamis) untuk mempercepatnya.
Ini mungkin terdengar berlawanan dengan intuisi, tetapi dengan munculnya Google Maps pada tahun 2004, JavaScript telah berevolusi dari bahasa di mana blok kode kecil ditulis ke bahasa di mana aplikasi lengkap dibuat, terdiri dari ratusan atau ribuan baris kode yang dieksekusi di browser.
Saat ini, aplikasi browser kami dapat berjalan selama berjam-jam, mereka bukan lagi alat sederhana untuk menyelesaikan tugas primitif seperti validasi formulir.
Di dunia saat ini, kompilasi JavaScript masuk akal: meskipun butuh lebih banyak waktu untuk menyiapkan kode, kinerjanya secara signifikan melebihi kinerja kode yang ditafsirkan.
Menjalankan skrip Node.js dari baris perintah
Cara standar untuk menjalankan program Node.js adalah dengan menjalankan perintah global
node
dan memberikan nama yang dapat dieksekusi.
Jika file utama aplikasi Node.js Anda dinamai
app.js
, Anda dapat memanggilnya seperti ini:
node app.js
Saat menjalankan perintah yang ditentukan, pastikan Anda berada di direktori dengan file
app.js
.
Bagaimana cara saya keluar dari Node.js?
Ada berbagai cara untuk menghentikan aplikasi Node.js.
Ketika Anda menjalankan program melalui terminal, Anda dapat menutupnya menggunakan
ctrl-C
, bagaimanapun, mari kita bahas metode perangkat lunak.
Mari kita mulai dengan yang paling radikal dan berbicara tentang mengapa itu tidak boleh digunakan.
Utama (global, modul kernel) modul
process
menyediakan metode yang mudah untuk keluar dari aplikasi perangkat lunak-Node.js: process.exit()
.
Ketika Node.js mencapai baris kode ini, proses eksekusi program segera berakhir.
Ini berarti bahwa semua panggilan balik sedang berlangsung, permintaan yang diajukan (tertunda), akses sistem file terbuka, menulis surat kepada,
stdout
atau stderr
semuanya akan dibatalkan.
Jika ini dapat diterima untuk Anda, Anda bisa meneruskan
exit()
bilangan bulat ke metode - sinyal untuk menyelesaikan kode:
process.exit(1)
Kode keluar default adalah 0, yang menunjukkan keberhasilan. Kode keluar yang berbeda memiliki arti yang berbeda, Anda dapat menggunakannya untuk memastikan interaksi beberapa program dengan yang lain.
Anda dapat membaca lebih lanjut tentang kode keluar di sini .
Anda juga dapat menetapkan nilai yang sesuai untuk properti
exitCode
:
process.exitCode = 1
dan setelah program selesai, Node.js akan mengembalikan kode ini.
Eksekusi program akan berakhir dengan lembut ketika semua proses selesai.
Di Node.js, kami sering memulai server:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('Hi!')
})
app.listen(3000, () => console.log('Server ready'))
Program ini tidak akan pernah berakhir. Jika Anda menelepon
process.exit()
, semua permintaan yang menunggu atau berjalan akan dibatalkan. Itu tidak keren.
Dalam hal ini, perlu untuk mengirim perintah sinyal
SIGTERM
dan memprosesnya menggunakan prosesor sinyal prosesor ( process
tidak perlu terhubung, tersedia secara default):
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('Hi!')
})
const server = app.listen(3000, () => console.log('Server ready'))
process.on('SIGTERM', () => {
server.close(() => {
console.log('Process terminated')
})
})
Apa itu sinyal? Sinyal adalah sistem komunikasi POSIX: mengirimkan pemberitahuan acara ke suatu proses.
SIGKILL
- sinyal tentang penyelesaian segera dari proses, serupa process.exit()
.
SIGTERM
- sinyal tentang ujung lunak proses. Sinyal ini dapat dikirim oleh sistem kontrol proses seperti upstart
, supervisord
dll.
Anda dapat mengirim sinyal ini dalam program melalui fungsi lain:
process.kill(process.id, 'SIGTERM')
Atau dari program Node.js lain atau aplikasi lain yang berjalan pada sistem, asalkan mereka tahu PID dari proses yang ingin Anda selesaikan.
Bagaimana cara membaca variabel lingkungan di Node.js?
Modul Node.js utama
process
memiliki properti yang env
berisi semua variabel lingkungan yang ditetapkan saat proses dimulai.
Berikut adalah contoh mengakses variabel lingkungan NODE_ENV yang disetel
development
ke nilai default:
process.env.NODE_ENV // development
Menetapkan nilai dalam produksi sebelum menjalankan skrip akan memberi tahu Node.js bahwa ia memiliki lingkungan produksi di depannya.
Dengan cara yang sama, Anda dapat mengakses variabel lingkungan apa pun yang ditetapkan.
Cara menggunakan Node.js REPL
Perintah ini
node
digunakan untuk menjalankan skrip Node.js:
node script.js
Jika kami menghilangkan nama file, kami akan masuk ke mode REPL:
node
REPL (Run Evaluate Print Loop) adalah runtime kode (biasanya jendela terminal) yang menerima ekspresi yang dimasukkan oleh pengguna dan mengembalikan hasil evaluasi ekspresi ini.
Jika Anda masuk
node
ke terminal, hal berikut terjadi:
>
Terminal akan masuk ke mode siaga.
Untuk lebih tepatnya, terminal dalam hal ini sedang menunggu beberapa kode JavaScript untuk dimasukkan.
Mari kita perkenalkan yang berikut ini:
> console.log('test')
test
undefined
>
Nilai pertama
test
,, adalah apa yang kami pesan untuk output ke konsol, maka kami mendapatkan undefined
nilai yang mengembalikan eksekusi. console.log()
Setelah itu, kami bisa memasukkan sesuatu yang lain.
Gunakan tab
untuk pelengkapan otomatis
REPL bersifat interaktif.
Jika ditekan
tab
saat menulis kode, REPL akan mencoba untuk menyelesaikan apa yang telah ditulisnya dengan memilih dari variabel yang telah ditentukan atau ditentukan sebelumnya.
Objek JavaScript
Coba ketikkan nama kelas JavaScript, misalnya
Number
tambahkan periode untuknya dan klik tab
.
REPL akan menampilkan semua properti dan metode kelas ini:
Objek Global
Anda bisa mendapatkan daftar objek global dengan mengetik
global.
dan menekan tab
:
Variabel khusus _
Jika Anda mengetik di akhir kode
_
, hasil operasi terakhir akan ditampilkan.
Perintah setelah poin
REPL berisi beberapa perintah khusus yang dimulai dengan titik. Di sini mereka:
.help
- menunjukkan daftar perintah yang tersedia.editor
- mengaktifkan mode pengeditan untuk menulis kode JavaScript multi-baris. Untuk menjalankan kode dalam mode ini, tekanctrl-D
.break
- berhenti memasukkan kode multi-line. Mirip dengan menekanctrl-C
.clear
- me-reset konteks REPL ke objek kosong, menghapus semua kode yang dimasukkan.load
- Memuat file JavaScript yang terletak di direktori saat ini (berfungsi).save
- menyimpan sesi REPL ke file dengan nama yang ditentukan.exit
- keluar dari REPL. Sama seperti ketuk gandactrl-C
REPL memahami bahwa Anda memasukkan kode multi-line tanpa menelepon
.editor
.
Misalnya, jika Anda mulai menerapkan iterasi:
[1, 2, 3].forEach(num => {
dan menekan
enter
, REPL akan melompat ke baris baru dengan tiga titik di awal, menunjukkan bahwa Anda dapat terus bekerja dengan blok kode:
... console.log(num)
... })
Jika Anda masuk
.break
di akhir, mode kode multi-line akan berhenti dan ekspresi tidak akan dieksekusi.
Melewati argumen menggunakan baris perintah
Saat meluncurkan aplikasi Node.js, Anda dapat meneruskan sejumlah argumen ke sana.
Argumen dapat berupa mandiri atau kunci dan nilai.
Sebagai contoh:
node app.js joe
atau
node app.js name=joe
Bagaimana Anda mengambil nilai dalam kode Node.js tergantung pada ini.
Objek bawaan digunakan untuk mengambil nilai
process
.
Properti
argv
objek ini berisi array argumen yang dilewatkan melalui baris perintah.
Argumen pertama adalah path lengkap dari perintah
node
.
Yang kedua adalah path lengkap dari file yang dapat dieksekusi.
Argumen yang menarik bagi kami mulai dari posisi ketiga (indeks array).
Anda dapat mengulangi argumen (termasuk jalur simpul dan jalur file) dengan loop:
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`)
})
Argumen yang diteruskan dapat diperoleh dengan membuat array baru tanpa dua parameter pertama:
const args = process.argv.slice(2)
Jika kami memiliki satu argumen tanpa indeks (kunci):
node app.js joe
kita bisa mendapatkannya seperti ini:
const args = process.argv.slice(2)
args[0]
Pada kasus ini:
node app.js name=joe
args[0]
- inilah name=joe
mengapa kita perlu menguraikannya. Cara terbaik untuk melakukan ini adalah dengan menggunakan perpustakaan minimalis untuk berurusan dengan argumen:
const args = require('minimist')(process.argv.slice(2))
args['name'] // joe
Di sini Anda perlu menggunakan tanda hubung ganda sebelum setiap argumen:
node app.js --name=joe
Menghasilkan hasil ke baris perintah menggunakan Node.js
Output standar melalui modul console
Node.js menyediakan modul konsol yang berisi banyak cara yang sangat berguna untuk berinteraksi dengan baris perintah.
Itu terlihat seperti objek
console
browser.
Salah satu metode utama modul ini adalah
console.log()
, yang mencetak string yang diteruskan ke konsol.
Jika Anda melewati objek, itu akan dikonversi menjadi string.
Kami dapat melewati
console.log
beberapa variabel:
const x = 'x'
const y = 'y'
console.log(x, y)
dan Node.js akan menampilkan keduanya.
Kami juga dapat memformat string menggunakan specifier:
Sebagai contoh:
console.log('My %s has %d years', 'cat', 2)
%s
- memformat variabel sebagai string%d
- memformat variabel sebagai angka%i
- Mengonversi variabel menjadi bilangan bulat%o
- memformat variabel sebagai objek
Sebagai contoh:
console.log('%o', Number)
Membersihkan konsol
console.clear()
membersihkan konsol (perilaku tergantung pada konsol yang digunakan).
Menghitung elemen
console.count()
Merupakan metode yang nyaman.
Periksa 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?'
)
Penghitung menghitung jumlah baris yang ditampilkan dan menampilkan nomor ini.
The value of x is 1 and has been checked .. how many times?: 1
The value of x is 1 and has been checked .. how many times?: 2
The value of y is 2 and has been checked .. how many times?: 1
Jadi, Anda dapat menghitung jumlah 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 jejak tumpukan
Ada situasi di mana Anda perlu menampilkan jejak tumpukan fungsi, misalnya, untuk menjawab pertanyaan "Bagaimana kita mencapai potongan kode ini?"
Anda dapat melakukannya dengan
console.trace()
:
const function2 = () => console.trace()
const function1 = () => function2()
function1()
Ini akan mencetak jejak tumpukan ke konsol. Ini adalah apa yang akan kita lihat di baris perintah jika kita menjalankan kode di Node.js 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)
Menghitung waktu eksekusi kode
Anda dapat dengan mudah menghitung berapa lama suatu fungsi telah berjalan menggunakan
time()
dan timeEnd()
:
const doSomething = () => console.log('test')
const measureDoingSomething = () => {
console.time('doSomething()')
// -
doSomething()
console.timeEnd('doSomething()')
}
measureDoingSomething()
stdout dan stderr
Seperti yang kita ketahui, console.log sangat bagus untuk mencetak pesan ke konsol. Ini disebut keluaran standar atau
stdout
.
console.error
menampilkan aliran stderr
.
Aliran ini bukan keluaran ke konsol, tetapi ditulis ke log kesalahan.
Output gaya
Anda dapat mewarnai keluaran teks ke konsol menggunakan urutan melarikan diri . Urutan ini adalah seperangkat simbol yang mengidentifikasi warna.
Sebagai contoh:
console.log('\x1b[33m%s\x1b[0m', 'hi!')
Jika Anda mengetik kode di atas dalam Node.js REPL, itu
hi!
akan berwarna kuning.
Metode yang dipertimbangkan agak melelahkan. Cara paling sederhana untuk mewarnai keluaran konsol adalah dengan menggunakan perpustakaan. Salah satu pustaka ini adalah Chalk , yang, selain mendefinisikan warna, memungkinkan Anda membuat teks tebal, miring, atau bergaris bawah.
Instal pustaka menggunakan
npm install chalk
dan gunakan sebagai berikut:
const chalk = require('chalk')
console.log(chalk.yellow('hi!'))
Penggunaannya
chalk.yellow
jauh lebih mudah daripada menghafal urutan kompleks. Itu juga membuat kode lebih mudah dibaca.
Membuat bilah kemajuan
Progress adalah pustaka yang hebat untuk membuat progress bar di terminal. Instal dengan
npm install progress
.
Cuplikan ini membuat bilah progres 10 langkah. Satu langkah dilakukan setiap 100 ms. Saat mengisi indikator, kami menonaktifkan penghitung:
const ProgressBar = require('progress')
const bar = new ProgressBar(':bar', { total: 10 })
const timer = setInterval(() => {
bar.tick()
if (bar.complete) clearInterval(timer)
}, 100)
Terima kasih atas perhatiannya, teman-teman. Jika Anda menemukan kesalahan dan kesalahan ketik jangan ragu untuk menulis di PM, saya akan berterima kasih.
Bersambungβ¦