Apa Deno? Node.js yang 'lebih baik'

Jika Anda menyukai Node.js tetapi bukan pengelola paketnya, npm, atau Anda menginginkan lingkungan runtime JavaScript yang lebih aman daripada Node.js, Anda mungkin menemukan proyek sumber terbuka baru yang diminati Deno (kata Deno adalah anagram dari Node). Di sisi lain, jika Anda menggunakan Node.js dalam produksi, tidak ada yang bisa dilihat di sini, lanjutkan - Deno masih "masih dalam pengembangan".

Deno adalah program untuk menjalankan kode JavaScript dan TypeScript di luar browser. Ini adalah upaya terbaru yang dipelopori oleh Ryan Dahl, yang mendirikan proyek Node.js pada tahun 2009, dan merupakan upaya untuk menata kembali Node.js sehubungan dengan kemajuan JavaScript sejak 2009, termasuk kompiler TypeScript. Seperti Node.js, Deno pada dasarnya adalah shell di sekitar mesin JavaScript Google V8, meskipun tidak seperti Node.js, ia menyertakan compiler TypeScript dalam gambarnya yang dapat dieksekusi.

Deno dan JavaScript tingkat lanjut

Pada tahun 2009, JavaScript kekurangan beberapa fitur yang akan berguna untuk Node.js, menurut Dahl. Beberapa di antaranya telah ditambahkan ke JavaScript selama bertahun-tahun sebagai bagian dari standar ECMAScript (ES), dan TypeScript telah membahas beberapa lagi.

Pada dasarnya JavaScript memiliki peristiwa dan callback selamanya, tetapi dapat menghasilkan kode yang agak rumit, terutama bila Anda ingin merangkai tindakan asinkron. Janji membuat sintaks sedikit lebih mudah dibaca. A promiseadalah objek yang dikembalikan yang mewakili penyelesaian atau kegagalan akhir dari operasi asinkron, tempat Anda dapat memasang callback, bukan meneruskan callback ke suatu fungsi. Mendeklarasikan suatu fungsi asynclebih menyederhanakan sintaks, memungkinkan Anda menggunakan awaitdalam fungsi untuk menjeda dengan cara non-pemblokiran sampai promise diselesaikan.

Ketika Node.js dibuat, standar de facto untuk modul JavaScript adalah CommonJS, yang didukung oleh npm. Sejak itu komite ECMAScript secara resmi memberkati standar yang berbeda, ES Modules, yang didukung oleh jspm. Deno mendukung Modul ES.

Array yang diketik adalah ES6 API untuk menangani data biner, sesuatu yang bisa digunakan Node.js; kurangnya dukungan data biner menyebabkan beberapa masalah desain Node.js. Deno menggunakan array yang diketik ketika perlu memanipulasi data biner mentah. Node.js sekarang mendukung array yang diketik untuk kode pengguna.

TypeScript adalah superset dari JavaScript yang dikompilasi ke JavaScript biasa (ES3 atau lebih tinggi; itu dapat dikonfigurasi). TypeScript menambahkan jenis, kelas, dan modul opsional ke JavaScript, dan mendukung alat untuk aplikasi JavaScript skala besar. (Anders Hejlsberg menyebutnya "JavaScript yang menskalakan.") Seperti disebutkan sebelumnya, Deno berisi gambar compiler TypeScript sebagai bagian dari waktu prosesnya. Jika Anda mengirimkan file Deno a TypeScript, file itu akan mengkompilasinya ke JavaScript dan kemudian meneruskannya ke mesin V8.

Kekurangan desain Node.js.

Menurut Dahl, yang memang mendesain Node.js dan Deno, Node.js mengalami tiga masalah desain utama:

  • sistem modul yang dirancang dengan buruk, dengan distribusi terpusat;
  • banyak API lama yang harus didukung;
  • dan kurangnya keamanan.

Deno memperbaiki ketiga masalah tersebut. 

Deno eksekusi aman

Cara Deno meningkatkan keamanan melalui Node.js sederhana: Secara default, Deno tidak akan membiarkan program mengakses disk, jaringan, subproses, atau variabel lingkungan. Jika Anda perlu mengizinkan salah satu dari ini, Anda dapat ikut serta dengan panji baris perintah, yang dapat dibuat sedetail mungkin, misalnya --allow-read=/tmpatau --allow-net=google.com. Peningkatan keamanan lain di Deno adalah bahwa ia selalu mati pada kesalahan yang tidak tertangkap, tidak seperti Node.js, yang akan memungkinkan eksekusi dilanjutkan setelah kesalahan yang tidak tertangkap, dengan hasil yang mungkin tidak dapat diprediksi.

Modul Deno

Di Node.js, Anda memuat modul CommonJS menggunakan requirekata kunci dan semuanya, standar dan pihak ketiga, secara implisit berasal dari npmjs.com. Di Deno, Anda memuat modul ES menggunakan importkata kunci dan secara eksplisit menyatakan URL. Sebagai contoh:

impor * sebagai log dari "//deno.land/std/log/mod.ts";

Modul Deno dapat dihosting di mana saja - tidak ada repositori terpusat untuk modul pihak ketiga. Selain itu, modul selalu disimpan dalam cache dan dikompilasi secara lokal, dan tidak diperbarui kecuali Anda secara eksplisit meminta penyegaran. Oleh karena itu, Anda harus dapat menjalankan program Deno yang sudah ada di laptop Anda, selama semua impor telah diselesaikan satu kali, bahkan jika Anda berada di pesawat tanpa konektivitas.

Deno memang memiliki kumpulan modul standar terpusat yang tidak memiliki ketergantungan eksternal dan ditinjau oleh tim inti Deno; itu tinggal di server deno.land. Koleksi modul deno_std adalah port lepas dari pustaka standar Go.

Ada sedikit sejarah di balik pemilihan model perpustakaan tersebut. Dahl menulis prototipe Deno-nya terutama dalam bahasa Go, tetapi menemukan potensi konflik antara pengumpul sampah di Go dan V8. Dia dan kolaboratornya kemudian menulis ulang Deno dengan V8, Rust, dan paket I / O asinkron Rust Tokio. Mereka menerapkan perpustakaan standar Deno di TypeScript.

Pada titik ini, Deno adalah lingkungan yang masuk akal dan menyenangkan untuk digunakan untuk membangun proyek skrip pribadi kecil di TypeScript. Menurut Dahl, Deno tidak akan pernah mempengaruhi kesuksesan Node.js. Namun demikian, setelah Deno mencapai versi 1.0, ini mungkin menjadi pilihan yang layak untuk membangun proyek yang lebih besar.