Yang Baru di Node.js v20 (Test Runner, Model Izin, SEA, V8 JS Engine 11.3)

Diterbitkan: 2023-04-28

Node.js v20 sekarang tersedia! Pada 18 April 2023, dipublikasikan dan sekarang dapat digunakan oleh semua orang. Dengan rilis ini, Node.js akan jauh lebih aman dan berkinerja lebih baik.

Penting untuk diketahui — karena ini adalah rilis genap, ini dijadwalkan untuk menjadi versi dukungan jangka panjang (LTS) pada Oktober 2023 dan akan didukung hingga April 2026. Namun, tim Node.js secara aktif mencari komunitas umpan balik untuk mengidentifikasi dan memperbaiki masalah apa pun sebelum dipromosikan ke LTS.

Rilis baru Node.js ini menghadirkan pembaruan dan fitur menarik yang pasti akan diapresiasi pengembang seperti Model Izin eksperimental, synchronous import.meta.resolve , pelari uji yang stabil, memperbarui mesin JavaScript V8 ke versi 11.3, membawa peningkatan kinerja dan bug perbaikan, dan banyak lagi.

Pada artikel ini, Anda akan menjelajahi perubahan yang diperkenalkan di Node.js v20, memberikan pandangan mendalam tentang fitur dan kemampuan barunya.

Memulai Dengan Node.js v20

Menginstal Node.js v20 sangat mirip dengan versi Node.js lainnya. Yang perlu Anda lakukan hanyalah:

  1. Unduh paket penginstal dari situs web resmi Node.js.
  2. Setelah Anda mengunduh penginstal, jalankan dan ikuti instruksi untuk menyelesaikan proses penginstalan. Proses ini cukup mudah, dan Anda hanya perlu menyetujui perjanjian lisensi dan mengklik tombol "Berikutnya".
  3. Restart Sistem/Mesin Anda setelah proses instalasi selesai untuk memastikan bahwa semua perubahan berlaku.
  4. Verifikasi instalasi Node.js Anda dengan menjalankan perintah berikut:
 node -v
Verifikasi Instalasi Node.js v20
Instalasi Node.js v20

Jika Anda melihat nomor versi (v20.0.0), itu berarti Node.js terinstal dengan benar, dan Anda siap untuk mulai bekerja dengan Node.js v20.

Node.js v20 telah tiba! Lihat Permission Model, synchronous import.meta.resolve, stable test runner, dan lebih banyak fitur dan pembaruan menarik di sini ️ Klik untuk Tweet

Apa yang Baru di Node.js v20?

Mari jelajahi 5 pembaruan utama yang diperkenalkan dengan rilis Node.js ini. Fitur-fitur ini meliputi:

Model Izin Eksperimental

Pengenalan Model Izin eksperimental di Node.js v20 merupakan tambahan signifikan yang memberi pengembang lebih banyak kontrol atas akses ke sumber daya tertentu selama eksekusi.

Fitur baru ini bermanfaat saat keamanan dan penggunaan sumber daya sangat penting, seperti di lingkungan produksi.

Model Izin hadir dengan beberapa kemampuan, termasuk membatasi akses ke sistem file, proses_anak, utas_pekerja, dan tambahan asli.

Pengembang dapat menggunakan tanda seperti --allow-fs-read , --allow-fs-write , dan --allow-child-process untuk menentukan sumber daya mana yang dapat diakses. Untuk mengaktifkan tanda ini, pengembang perlu menggunakan tanda --experimental-permission bersama dengan izin yang diperlukan.

Berikut adalah contoh cara menggunakan Model Izin untuk mengizinkan akses baca dan tulis ke seluruh sistem file:

 $ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js

Pengembang juga dapat menggunakan Model Izin untuk menentukan akses ke folder dan file tertentu. Misalnya, perintah berikut mengizinkan akses tulis ke folder /tmp/ :

 $ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

Salah satu manfaat signifikan dari Model Izin adalah kemampuan untuk menjalankan kontrol yang lebih terperinci atas akses sistem file. Misalnya, pengembang dapat menentukan jalur dan pola wildcard untuk mengizinkan akses ke folder atau file tertentu.

 $ node --experimental-permission --allow-fs-read=/home/user/* index.js

Perintah di atas memberikan akses baca ke semua folder di dalam direktori /home/user/ .

Properti izin dari objek proses juga dapat digunakan untuk memeriksa apakah izin khusus telah diberikan saat runtime. Misalnya, jika Anda ingin memeriksa apakah proses Node.js Anda memiliki akses baca ke folder tertentu, /home/user/documents , Anda dapat menggunakan kode berikut:

 if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }

Dengan menggunakan Model Izin, Anda memiliki kontrol yang lebih baik atas akses sistem file proses Node.js Anda, yang dapat menghasilkan keamanan yang lebih baik dan penggunaan sumber daya yang lebih efisien.

Sangat penting untuk dicatat bahwa Model Izin masih eksperimental dan dapat berubah di rilis Node.js mendatang. Dianjurkan untuk tetap mengikuti perkembangan dokumentasi Model Izin dan berhati-hati saat menggunakan fitur eksperimental ini.

Pelari Uji Stabil

Node.js v20 menyertakan versi stabil dari modul test_runner yang memungkinkan developer membuat dan menjalankan rangkaian pengujian JavaScript dengan cepat dan mudah tanpa menginstal dependensi tambahan.

Pelari pengujian yang stabil sekarang mencakup beberapa blok penyusun, seperti describe , it / test , dan pengait, untuk membuat dan menyusun file pengujian, bersama dengan mocking, mode tontonan, dan kemampuan untuk menjalankan beberapa file pengujian secara paralel menggunakan node --test perintah node --test .

Berikut adalah contoh cara menggunakan test runner:

 import { test, mock } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; mock.method(fs, 'readFile', async () => "Hello World"); test('synchronous passing test', async (t) => { // This test passes because it does not throw an exception. assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); });

Runner pengujian menawarkan reporter pengujian yang dapat dikonfigurasi dan dikustomisasi melalui flag --test-reporter , cakupan pengujian eksperimental melalui flag --experimental-test-coverage dan kemampuan mengejek.

Meskipun tidak dimaksudkan untuk menggantikan kerangka uji berfitur lengkap seperti Jest atau Mocha, pelari uji stabil menawarkan cara sederhana dan cepat untuk membuat rangkaian uji. Ini telah ditingkatkan secara signifikan sejak diperkenalkan di Node.js v19, dan berkat pengujian dan umpan balik pengguna akhir, sekarang telah ditandai sebagai stabil di Node.js v20.

Informasi selengkapnya dapat ditemukan dalam permintaan tarik gabungan ini.

Mesin JavaScript V8 Diperbarui ke 11.3

Mesin JavaScript V8, yang menggerakkan Node.js, telah diperbarui ke versi 11.3 di Node.js v20. Ini membawa peningkatan kinerja dan memperkenalkan fitur bahasa baru. Beberapa fitur baru pembaruan ini meliputi:

  • String.prototype.isWellFormed dan toWellFormed : Metode ini sangat berguna untuk memastikan format string yang tepat. Ini membantu memastikan bahwa input string pengguna dalam format UTF-16 yang benar, mengurangi kesalahan pada usia emoji.
  • Metode yang mengubah Array dan TypedArray dengan salinan: Ini berguna untuk membuat salinan array yang dimodifikasi tanpa memengaruhi data asli, yang sangat relevan dalam kasus di mana Anda perlu menyimpan data asli untuk perbandingan atau tujuan lain.
  • ArrayBuffer yang Dapat Diubah Ukurannya dan SharedArrayBuffer yang Dapat Ditumbuhkan : memberikan fleksibilitas yang lebih besar, memungkinkan alokasi memori yang lebih efisien.
  • Bendera RegExp v dengan set notasi dan properti string: menambahkan fungsionalitas untuk ekspresi reguler.
  • Panggilan ekor WebAssembly: menyediakan cara untuk mengoptimalkan jenis panggilan fungsi tertentu.

Pembaruan ini menunjukkan komitmen berkelanjutan dari komunitas pengembangan Node.js untuk meningkatkan kinerja dan fungsionalitas.

Sinkron import.meta.resolve()

Di Node.js v20, import.meta.resolve() telah diperkenalkan, yang membuatnya lebih mudah untuk menulis skrip yang tidak peka terhadap lokasi. Fungsi ini kembali secara sinkron, mirip dengan perilaku browser, memungkinkan eksekusi yang lebih efisien.

Kait penyelesaian loader pengguna masih dapat didefinisikan sebagai fungsi async, tetapi import.meta.resolve() akan tetap kembali secara sinkron untuk kode aplikasi bahkan jika kait penyelesaian async dimuat.

Perilaku sinkron import.meta.resolve() memungkinkan eksekusi kode yang lebih efisien, terutama saat menangani data dalam jumlah besar. Sebagai penulis, Anda dapat menentukan kait penyelesaian sebagai fungsi asinkron atau sinkronisasi, tergantung pada preferensi Anda. Kode aplikasi akan tetap dijalankan secara sinkron terlepas dari apakah ada hook penyelesaian async yang dimuat.

Aplikasi Eksperimental Eksekusi Tunggal (SEA)

Eksperimental Single Executable Applications (SEA) adalah fitur baru yang diperkenalkan di Node.js v20 yang memungkinkan menggabungkan aplikasi Anda dengan biner Node.js, memungkinkan pengguna akhir untuk mendistribusikan dan menjalankannya sebagai satu file yang dapat dieksekusi.

Ini telah menjadi permintaan lama dari komunitas, dan tim telah menyempurnakan pendekatan tersebut selama setahun terakhir.

Di Node.js v20, membangun satu aplikasi yang dapat dieksekusi membutuhkan injeksi blob yang disiapkan oleh Node.js dari konfigurasi JSON daripada menginjeksi file JS mentah.

Gumpalan adalah file yang berisi data biner, dalam hal ini, disiapkan oleh Node.js, dan disuntikkan ke dalam biner. Perubahan ini dibuat untuk mengaktifkan penyematan beberapa sumber daya yang ada bersama ke dalam SEA, yang membuka kasus penggunaan baru.

Berikut adalah contoh file sea-config.jso n:

 { "main": "myscript.js", "output": "sea-prep.blob" }

Saat dieksekusi dengan perintah node --experimental-sea-config sea-config.json , blob ditulis ke file sea-prep.blob , yang kemudian dapat disuntikkan ke dalam biner.

Fitur SEA memungkinkan pengembang untuk mendistribusikan aplikasi Node.js tanpa mengharuskan pengguna menginstal Node.js. Fungsinya dibuat oleh Darshan Sen, yang memenangkan Outstanding Contribution dari penghargaan New Arrival sebagai bagian dari JavaScriptLandia Awards di OpenJS World.

Microsoft, anggota OpenJS Foundation, sedang menyelidiki fitur ini sebagai cara untuk mengurangi serangan vektor dan memberdayakan arsitektur Node.js untuk pengalaman yang lebih baik. Meskipun fitur SEA masih dalam tahap percobaan, ini merupakan pengembangan baru yang menarik untuk komunitas Node.js.

Pertunjukan

Node.js v20 hadir dengan peningkatan signifikan pada waktu prosesnya, dengan fokus baru pada kinerja oleh tim kinerja Node.js yang baru dibentuk. Penyempurnaan mencakup pengoptimalan pada bagian inti runtime, seperti URL, fetch() , dan EventTarget .

Salah satu peningkatan penting adalah pengurangan biaya inisialisasi EventTarget , yang telah dipotong setengahnya, menghasilkan akses lebih cepat ke semua subsistem yang menggunakannya. Selain itu, panggilan V8 Fast API telah digunakan untuk meningkatkan performa di API seperti URL.canParse() dan timer.

Perubahan spesifik lainnya adalah penyertaan Ada versi 2.0 yang diperbarui, parser URL yang cepat dan sesuai spesifikasi yang ditulis dalam C++.

Tahukah Anda Node.js v20 menghadirkan pelari uji asli yang stabil? Saatnya menguji kode Anda dengan lebih efisien! Lihat ️ Klik untuk Tweet

Ringkasan

Pada artikel ini, Anda telah mempelajari beberapa fitur utama (eksperimental dan stabil) dan peningkatan yang dibawa oleh Node.js v20, seperti peningkatan pada mesin JavaScript V8, performa, runner pengujian, dan pengenalan model izin eksperimental, dan aplikasi eksekusi tunggal .

Penting untuk diketahui bahwa Node.js v14 akan berakhir pada April 2023, jadi disarankan untuk mulai merencanakan peningkatan ke Node.js v18 (LTS) atau vNode.js 20 (segera menjadi LTS).

Apakah Anda ingin mencoba Node.js versi terbaru? Anda dapat melakukannya dengan menerapkan aplikasi Node.js Anda di Kinsta dan dapatkan $20 pertama dari kami. Kami sudah mendukung Node.js v20, yang berarti Anda dapat menguji fitur dan kemampuannya yang baru mulai hari ini.

Sekarang giliran Anda! Fitur atau peningkatan apa yang menurut Anda paling menarik di Node.js v20? Apakah ada hal penting yang mungkin kita abaikan? Beri tahu kami di komentar.