Hi Co.Creators!
Perkenalkan, aku Bara, Front-End Developer di Jenius. Saat ini aku bergabung di squad Nakula dan sehari-hari mengerjakan fitur Flexi Saver dan upgrade react native di apps Jenius. Kali ini aku mau bahas tentang Deno.js Javascript Runtime. Yuk langsung aja!
Intro
Deno Official Website : https://deno.land/
Javascript diciptakan oleh Brendan Eich pada tahun 1995 sebagai bahasa pemrograman untuk browser. Saat itu Javascript cuma bisa dieksekusi pada browser dan gak bisa dijalankan di server. Karena itu, Javascript jadi bahasa pemrograman “de facto” bagi website developer / front-end web bersamaan dengan HTML dan CSS.
Namun, pada tahun 2009 Ryan Dahl, programmer senior di Silicon Valley, punya inisiatif buat menjalankan Javascript sebagai “back-end” dengan cara menciptakan runtime atau tools buat menjalankan Javascript di server. Runtime tersebut kemudian diberi nama Node.js. Nah, Node.js ini dibuat dengan teknologi V8 Javascript Engine milik Google. Sejak saat itu, Javascript bisa dijalankan di front-end maupun back-end, bahkan jadi salah satu bahasa pemrograman back-end paling favorit hingga saat ini.
Setelah sembilan tahun berlalu, Ryan Dahl merasa Node.js gak optimal dan punya beberapa kelemahan yang gak bisa diperbaiki dengan sekadar meng-update node.js. Oleh karena itu, Ryan Dahl mengembangkan runtime baru untuk Javascript yang diberi nama Deno.js.
Kini Deno.js sedang populer di komunitas software developer karena Ryan Dahl meluncurkan Deno.js versi 1.0 pada 13 Mei 2020.
Deno.js sendiri dibangun dengan teknologi s:
- Rust (Core pada Deno dibangun dengan Rust, sedangkan Node dengan C++)
- Tokio (Event Loop yang ditulis dalam Rust)
- TypeScript (Deno support javascript dan typescript by default)
- V8 (Google’s JavaScript runtime)
Deno Architecture : https://deno.land/manual/contributing/architecture
Feature
Fitur-fitur yang ditawarkan oleh Deno.js versi 1.0
- Build-in Typescript
Biar bisa menggunakan typescript pada server node.js. developer harus melakukan hal berikut :
- Instal typescript module package
- Initialize typescript config
- Melakukan transpile typescript menjadi Javascript menggunakan babel atau typescript node
Pada Deno.js, developer gak perlu melakukan hal-hal tersebut karena sudah support typescript by default.
- No NPM, Node Modules Folder and Package.json
Pada environment Node.js, developer harus menginstal module dependency yang di-download dari repository seperti NPM. Kemudian disimpan di dalam folder node_modules dan versi dependency yang diinstal disimpan dalam package.json.
Deno.js mengambil pendekatan seperti bahasa pemrograman GO, yaitu impor langsung dari URL repository. Modul yang diinstal dari repository akan di-cache secara otomatis, jadi developer gak perlu melakukan konfigurasi akun repository seperti dengan NPM login dan dependency bisa di-download secara desentralisasi melalui repository mana pun.
- Build-in Tooling and Utilities
Deno menyediakan banyak built-in tools, jadi gak perlu pusing lagi mengonfigurasi third party tool.
Tooling yang disediakan antara lain:
- Test runner (deno test)
Dalam ekosistem node.js terdapat banyak alternative test runners yang gak official kayak Jest, Jasmine, Ava, atau Mocha. Pada Deno, terdapat test runner official yang bisa dipakai di testing std library dan bisa di-download di https://deno.land/std/testing
Dokumentasi tools lebih lanjut bisa dilihat di sini.
- Code formatter (deno fmt)
Deno menyediakan built-in code formatter untuk melakukan auto-format pada TypeScript dan Javascript.
Developer bisa membuat beberapa baris untuk mengabaikan formatting dengan cara menambahkan comment // deno-fmt-ignore.
https://github.com/denoland/deno/blob/master/docs/tools/formatter.md
Informasinya mengenai tools lainnya dapat dilihat di https://deno.land/manual/tools
- STD and Deno’s standard library
Salah satu cara Deno.js meningkatkan DX (developer experience) adalah dengan menyediakan library module yang sudah terstandarisasi dan berfungsi sebagai helpers atau utilities. Semua module diaudit terlebih dulu oleh core developer untuk memastikan kualitas code. Module pada Deno di-host di repository bernama STD https://deno.land/std.
- Secure by Default
Salah satu keunggulan Deno.js yang menarik adalah peningkatan level security dari node permission system. Node.js runtime bersifat sangat permisif, artinya node.js memperbolehkan full access ke computer network dan file system. Hal tersebut menimbulkan potensi bagi code third-party untuk merusak sistem kalu gak diperiksa secara teliti.
Dari sisi sekuriti, Deno.js melakukan pendekatan yang berbeda. By default, semua code program dieksekusi dalam secure sandbox environment. Hal ini mencegah code program untuk mengakses hal-hal yang gak diinginkan seperti file system, network, dan environment variable, kecuali sudah diberikan izin terlebih dahulu via command-line argument.
Bahkan developer bisa menambahkan whitelist. Berarti, developer bisa membatasi akses read/write kode program Deno dalam folder project untuk meminimalisir potensi serangan dari malicious software.
No More Talks, Show Me The Code!
Installation
Installer deno.js dikirim sebagai single executable with no dependencies. Jadi cukup panggil dan install satu file itu saja, maka deno akan terinstal otomatis. Berikut adalah command line untuk menginstal deno.js
- Shell (Mac, Linux):
- PowerShell (Windows):
- Homebrew (Mac):
- Chocolatey (Windows):
- Scoop (Windows):
- Build and install from source using Cargo
Getting Started
Untuk memastikan apakah deno.js sudah terinstal, kamu bisa mengeksekusi script berikut pada terminal atau command line
Welcome to Deno! 🙂
HTTP Request via CURL
Deno.js bisa melakukan HTTP request via curl seperti screenshot di bawah ini. Request ditolak oleh deno karena gak memakai –allow-net flag. Hal ini membuktikan fitur security sandbox pada Deno.js.
Kita ulangi command yang sama ditambahkan dengan flag –allow-net. Dapat dilihat HTTP request ke website jenius sukses dilakukan.
Membuat Web Server
Web server pada Deno.js bisa dibuat dengan 6 baris kode saja. Buatlah file mod.ts baru di folder project kamu yang berisi code snippet berikut.
Run file typescript tersebut menggunakan terminal dengan command sebagai berikut.
Kalau berhasil tereksekusi, terminal akan men-download dependency yang dibutuhkan.
Karena flag –allow-net lupa ditambahkan, dependencies berhasil terinstal, tapi file gak bisa tereksekusi.
Eksekusi file yang sama tapi dengan menambahkan –allow-net.
Kalau berhasil maka akan muncul tanda check di terminal.
Jalankan browser, lalu buka URL localhost:8000 atau port yang kamu setting di file mod.ts. Jika berhasil, maka local server deno.js akan menampilkan “Hello World!”
Conclusion
Meskipun masih belum diadopsi secara luas, aku merasa Deno.js memiliki prospek yang cerah dan worth it untuk dicoba.
Berikut beberapa kelebihan Deno:
- TypeScript by default (Built-in)
- Gampang diinstall (cukup 1 file binary)
- Security level yang lebih baik (security sandbox)
- Desentralisasi package dan impor langsung via URL
- Built-in tooling and utilities
Nah, menurut kamu, pengaplikasian Deno tuh kayak apa sih? Share yuk di kolom komentar!
References:
- Official Deno.js Website
- Node.js vs Deno: What You Need to Know
- The Deno Handbook: A TypeScript Runtime Tutorial with Code Examples
- 6 Keunggulan Deno daripada Node | Getting Started | Yussan Academy
- What is Deno & Will it replace Node.js?
- 10 Things I Regret About Node.js – Ryan Dahl – JSConf EU
- Berkenalan Dengan Deno
- Deno – a better Node.js? | Krzysztof Piechowicz
- Getting Started Using TypeScript with Node.js and Express
- Deno — A Node.JS Killer?
- Is Deno as fast as Rust?
- From Node to Deno
- Freecodecamp – 6 Hours Coding in Deno