Panduan pemula untuk Node.js Bagian 2





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:





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 nodedan 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 processmenyediakan 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, stdoutatau stderrsemuanya 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 SIGTERMdan memprosesnya menggunakan prosesor sinyal prosesor ( processtidak 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, supervisorddll.



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 processmemiliki properti yang envberisi semua variabel lingkungan yang ditetapkan saat proses dimulai.



Berikut adalah contoh mengakses variabel lingkungan NODE_ENV yang disetel developmentke 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 nodedigunakan 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 nodeke 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 undefinednilai yang mengembalikan eksekusi. console.log()



Setelah itu, kami bisa memasukkan sesuatu yang lain.



Gunakan tabuntuk pelengkapan otomatis


REPL bersifat interaktif.



Jika ditekan tabsaat 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 Numbertambahkan 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 .breakdi 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 argvobjek 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=joemengapa 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 consolebrowser.



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.logbeberapa 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.errormenampilkan 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 chalkdan gunakan sebagai berikut:



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


Penggunaannya chalk.yellowjauh 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…



All Articles