Apa itu Deno? Node.js yang lebih baik

Sekiranya anda menyukai Node.js tetapi bukan pengurus pakejnya npm, atau anda mahukan persekitaran waktu operasi JavaScript yang lebih selamat daripada Node.js, anda mungkin menjumpai projek sumber terbuka baru Deno yang menarik (perkataan Deno adalah anagram Node). Sebaliknya, jika anda menggunakan Node.js dalam pengeluaran, tidak ada yang dapat dilihat di sini, teruskan - Deno masih "sangat dalam pembangunan."

Deno adalah program untuk menjalankan kod JavaScript dan TypeScript di luar penyemak imbas. Ini adalah usaha terbaru yang dipelopori oleh Ryan Dahl, yang mengasaskan projek Node.js pada tahun 2009, dan ini adalah usaha untuk menayangkan semula Node.js berdasarkan kemajuan dalam JavaScript sejak 2009, termasuk penyusun TypeScript. Seperti Node.js, Deno pada dasarnya adalah shell di sekitar mesin JavaScript Google V8, walaupun tidak seperti Node.js, ia merangkumi penyusun TypeScript dalam gambar yang dapat dilaksanakan.

Deno dan JavaScript lanjutan

Pada tahun 2009, JavaScript kekurangan beberapa ciri yang berguna untuk Node.js, menurut Dahl. Beberapa di antaranya telah ditambahkan ke JavaScript selama bertahun-tahun sebagai sebahagian daripada standard ECMAScript (ES), dan TypeScript telah membahas beberapa lagi.

JavaScript mempunyai peristiwa dan panggilan balik pada dasarnya selama-lamanya, tetapi ia boleh menyebabkan kod yang agak rumit, terutama ketika anda ingin mengaitkan tindakan tidak segerak. Janji-janji menjadikan sintaks sedikit lebih mudah dibaca. A promiseadalah objek yang dikembalikan yang mewakili penyelesaian atau kegagalan operasi asinkron, yang mana anda dapat melampirkan panggilan balik, dan bukannya mengalihkan panggilan balik ke fungsi. Menyatakan fungsi asyncakan menyederhanakan sintaks, yang membolehkan anda menggunakan awaitfungsi untuk berhenti sejenak sehingga janji itu selesai.

Semasa Node.js dibuat, standard de facto untuk modul JavaScript adalah CommonJS, yang disokong oleh npm. Sejak itu jawatankuasa ECMAScript secara rasmi memberkati standard yang berbeza, Modul ES, yang menjadi sokongan jspm. Deno menyokong Modul ES.

Susunan yang diketik adalah API ES6 untuk mengendalikan data binari, sesuatu yang mungkin digunakan oleh Node.js; kekurangan sokongan data binari menyebabkan beberapa masalah reka bentuk Node.js. Deno menggunakan tatabentuk yang ditaip ketika perlu memanipulasi data binari mentah. Node.js kini menyokong tataletak yang diketik untuk kod pengguna.

TypeScript adalah superset JavaScript yang diketik yang dikompilasi ke JavaScript biasa (ES3 atau lebih tinggi; itu boleh dikonfigurasi). TypeScript menambah jenis, kelas, dan modul pilihan ke JavaScript, dan menyokong alat untuk aplikasi JavaScript berskala besar. (Anders Hejlsberg menyebutnya "JavaScript yang skala.") Seperti yang disebutkan sebelumnya, Deno berisi gambar penyusun TypeScript sebagai bagian dari waktu operasinya. Sekiranya anda menyampaikan fail Deno a TypeScript, ia akan menyusunnya terlebih dahulu ke JavaScript dan kemudian menyebarkannya ke mesin V8.

Kekurangan reka bentuk Node.js

Menurut Dahl, yang bagaimanapun merancang Node.js dan Deno, Node.js mengalami tiga masalah reka bentuk utama:

  • sistem modul yang kurang dirancang, dengan pengedaran berpusat;
  • banyak API lama yang mesti disokong;
  • dan kekurangan keselamatan.

Deno menyelesaikan ketiga-tiga masalah. 

Pelaksanaan selamat Deno

Cara Deno meningkatkan keselamatan terhadap Node.js adalah mudah: Secara lalai, Deno tidak akan membiarkan program mengakses cakera, rangkaian, subproses, atau pemboleh ubah persekitaran. Apabila anda perlu membenarkan semua ini, anda boleh memilih dengan bendera baris perintah, yang boleh sebutir yang anda suka, misalnya --allow-read=/tmpatau --allow-net=google.com. Peningkatan keselamatan lain di Deno adalah bahawa ia selalu mati kerana kesalahan yang tidak dapat ditangkap, tidak seperti Node.js, yang akan membolehkan pelaksanaan diteruskan setelah kesalahan yang tidak ditangkap, dengan hasil yang mungkin tidak dapat diramalkan.

Modul deno

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

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

Modul Deno boleh dihoskan di mana sahaja - tidak ada repositori terpusat untuk modul pihak ketiga. Di samping itu, modul sentiasa disimpan dalam cache dan disusun secara tempatan, dan tidak dikemas kini melainkan anda secara eksplisit meminta penyegaran. Oleh itu, anda seharusnya dapat menjalankan program Deno yang sudah ada di komputer riba anda, selagi semua import telah diselesaikan sekali, walaupun anda menggunakan kapal terbang tanpa sambungan.

Deno memang mempunyai koleksi modul standard terpusat yang tidak mempunyai kebergantungan luaran dan disemak oleh pasukan teras Deno; ia tinggal di pelayan deno.land. Koleksi modul deno_std adalah port perpustakaan standard Go yang longgar.

Terdapat sedikit sejarah di sebalik pilihan model untuk perpustakaan. Dahl menulis prototaip Deno terutamanya dalam bahasa Go, tetapi menemui kemungkinan konflik antara pengumpul sampah di Go dan V8. Dia dan rakan-rakannya kemudian menulis semula Deno tepat dengan V8, Rust, dan Rust asynchronous I / O paket Tokio. Mereka melaksanakan perpustakaan standard Deno dalam TypeScript.

Pada ketika ini, Deno adalah persekitaran yang wajar dan menyenangkan untuk digunakan untuk membina projek skrip peribadi kecil di TypeScript. Menurut Dahl, Deno tidak akan pernah mempengaruhi kejayaan Node.js. Walaupun begitu, apabila Deno mencapai versi 1.0, ia mungkin menjadi pilihan yang sesuai untuk membina projek yang lebih besar.