Buat Kamu yang Biasa Main NodeJS Cobain Deno Deh Rasanya Beda Loh

Buat Kamu yang Biasa Main NodeJS Cobain Deno Deh Rasanya Beda Loh
Photo by Robin Ulrich/Unsplash

Guys, kalau kamu udah nyaman banget main-main sama Node.js, udah hapal seluk-beluknya, udah khatam sama npm install dan bikin package.json sampai kriting, mungkin sesekali kepikiran: "Ada lagi nggak sih yang seru di dunia runtime JavaScript/TypeScript di luar browser?". Nah, kalau pertanyaan itu pernah mampir di kepala, atau sekadar lagi nyari sensasi baru dalam ngoding backend atau CLI, coba deh lirik Deno.

Deno ini ibarat "adik" dari Node.js, karena yang bikin sama-sama Ryan Dahl. Tapi jangan salah sangka, dia bukan sekadar versi 2.0 atau versi yang diperbarui gitu aja. Deno itu dirancang dari nol, mencoba memperbaiki beberapa hal yang menurut Ryan Dahl dulu kurang pas di Node.js. Hasilnya? Rasanya beda banget!

Oke, mungkin kamu mikir, "Apa iya beda? Paling gitu-gitu aja." Eits, jangan underestimate dulu. Ada beberapa poin kunci yang bikin ngoding pakai Deno itu punya feel yang beda dibanding Node.js. Mari kita bedah satu per satu biar kamu kebayang "beda rasanya" itu kayak gimana.

1. Keamanan Jadi Prioritas Utama (Secure by Default)

Ini beda paling kentara dan mungkin paling penting. Kalau di Node.js, secara default script kamu punya akses penuh ke sistem, entah itu baca/tulis file, akses network, atau akses environment variable. Kamu harus hati-hati banget sama package pihak ketiga yang kamu instal, karena mereka bisa aja ngelakuin hal-hal aneh tanpa izinmu.

Di Deno, konsepnya kebalikannya. Secara default, Deno itu sandbox. Script kamu nggak punya izin apa-apa. Mau baca file? Nggak bisa. Mau akses internet? Ditolak. Mau akses environment variable? Juga nggak bisa. Semua harus minta izin secara eksplisit saat kamu menjalankan script-nya.

Contohnya, kalau kamu punya script main.ts yang butuh baca file data.txt dan ngirim hasilnya lewat HTTP request, kamu harus jalankan Deno dengan flag izin:

bash
deno run --allow-read --allow-net main.ts

Flag --allow-read ngasih izin buat baca file, --allow-net ngasih izin buat akses jaringan. Kalau cuma butuh baca file aja ya cukup --allow-read. Kalau nggak ada izinnya, script kamu akan crash dengan pesan error yang jelas.

Ini bikin kamu lebih tenang kalau lagi nyoba-nyoba script atau dependensi baru. Kamu tahu persis apa yang boleh diakses script itu dan apa yang nggak. Rasa aman ini beda banget sama Node.js yang "terbuka" secara default.

2. TypeScript adalah Warga Negara Kelas Satu (First-Class Support)

Buat kamu yang udah nyaman atau bahkan prefer pakai TypeScript dibanding JavaScript murni, Deno ini bakal jadi teman baikmu. Deno punya built-in support untuk TypeScript. Jadi, kamu nggak perlu lagi repot-repot setup tsc, tsconfig.json, atau nambahin step kompilasi ke dalam workflow pengembanganmu. Deno bisa langsung menjalankan file .ts atau .tsx tanpa konfigurasi tambahan.

Kamu tinggal bikin file .ts atau .tsx, terus jalankan pakai deno run nama_file.ts. Deno akan otomatis mengkompilasi TypeScript ke JavaScript di belakang layar sebelum menjalankannya. Ini bikin siklus pengembangan jadi jauh lebih cepet dan simpel kalau kamu memang niat pakai TypeScript dari awal. Nggak ada lagi alasan "males setup TypeScript" kalau pakai Deno.

Di Node.js, meskipun komunitasnya udah bikin banyak tool kayak ts-node atau setup Webpack/Rollup/esbuild buat handle TypeScript, tetep aja itu layer tambahan yang kadang butuh konfigurasi dan bisa bikin pusing kalau ada masalah. Di Deno? Tinggal tulis kode TypeScript, jalankan, beres. Ini juga salah satu poin yang bikin "rasanya" beda, lebih ringkas dan to the point buat urusan TypeScript.

3. Modul Sistem yang Berbeda Total: Goodbye node_modules?

Nah, ini dia salah satu perubahan paling radikal yang dibikin Ryan Dahl di Deno: sistem modulnya nggak pakai npm dan nggak ada folder node_modules. Kalau di Node.js kita biasa npm install terus import modul pakai nama paket (import express from 'express'), di Deno cara import modul itu langsung pakai URL!

Contoh:

typescript
// Import server dari standard library Deno
import { serve } from "https://deno.land/[email protected]/http/server.ts";

Jadi, kamu ngimport modul itu langsung dari web, pakai URL lengkap, termasuk versi modulnya. Saat pertama kali script Deno yang punya import URL dijalankan, Deno bakal ngunduh modul-modul itu dan menyimpannya di cache lokal di komputermu. Untuk selanjutnya, Deno akan pakai versi yang ada di cache, kecuali kalau kamu minta update atau pakai versi yang beda.

Apa sih kelebihan dan kekurangan sistem ini dibanding npm dan node_modules?

  • Kelebihan:

* Nggak ada lagi folder node_modules yang legendaris itu, yang kadang bikin proyek jadi super gede atau bikin bingung kenapa dependensi satu bikin konflik sama dependensi lain. * Jauh lebih simpel ngertiin dependensi kamu datangnya dari mana, karena langsung kelihatan URL-nya. * Bisa ngimport dari sumber mana aja selama itu valid URL (tapi tentu disarankan dari sumber terpercaya ya, kayak deno.land/std atau deno.land/x). * Nggak ada lagi file package.json dan package-lock.json buat ngatur dependensi eksternal (walaupun Deno punya konsep deno.json atau deno.jsonc buat konfigurasi proyek, termasuk ngunci versi dependensi atau bikin alias import).

  • Kekurangan:

Ekosistem modul Deno masih jauh lebih kecil dibanding ekosistem Node.js (puluhan tahun head start Node.js itu signifikan banget). Meskipun banyak modul Node.js yang bisa dijalanin di Deno (ada layer kompatibilitas), tapi nggak semua seamless*. * Harus hati-hati banget sama URL yang kamu import. Kalau sumbernya mati atau URL-nya ganti, kode kamu bisa langsung error. Makanya disarankan pakai deno.land/x yang dikelola oleh komunitas Deno dan biasanya lebih stabil. * Versi modul harus ditulis eksplisit di URL. Ini bisa bikin baris import jadi panjang. Tapi kabar baiknya, Deno punya file konfigurasi (deno.json/deno.jsonc) di mana kamu bisa definisikan alias import dan versi modul secara terpusat, mirip-mirip package.json tapi dengan pendekatan yang beda.

Perbedaan sistem modul ini adalah salah satu alasan utama kenapa "rasanya" beda. Nggak ada lagi ritual npm install, nggak ada lagi drama node_modules. Kamu langsung refer ke sumbernya di web. Simpel, tapi butuh adaptasi.

4. Tooling Lengkap dalam Satu Binary (Built-in Tools)

Di Node.js, kalau kamu mau format kode, linting, ngetes, atau generate dokumentasi, kamu butuh nginstal package eksternal lagi: Prettier buat formatting, ESLint buat linting, Jest/Mocha buat testing, JSDoc buat docs, dan seterusnya. Masing-masing butuh konfigurasi sendiri.

Deno nyediain tool penting ini secara built-in di dalam satu file binary Deno yang kamu instal. Kamu nggak perlu nginstal apa-apa lagi.

  • deno fmt: Buat format kode (JavaScript, TypeScript, JSON, Markdown). Mirip Prettier, tapi udah nempel sama Deno.

deno lint: Buat linting kode. Mirip ESLint, juga udah built-in*. Aturannya bisa dikonfigurasi. deno test: Buat menjalankan test. Deno punya framework testing built-in*.

  • deno doc: Buat generate dokumentasi dari kode kamu.
  • deno run: Buat menjalankan script (udah dibahas di awal).
  • deno info: Buat lihat info cache, dependensi, dll.
  • deno compile: Bisa mengkompilasi script Deno kamu jadi satu file executable (binary) yang bisa dijalankan di OS target tanpa perlu nginstal Deno! Cocok banget buat bikin CLI tool. Ini fitur yang keren dan beda banget sama Node.js secara default.

Dengan tool-tool ini udah ada di Deno binary, kamu nggak perlu lagi mikirin setup awal yang ribet. Instal Deno, dan kamu udah punya semua tool dasar buat ngembangin aplikasi. Ini juga bikin "rasanya" beda: lebih all-in-one, lebih praktis.

5. Standard Library yang Dikurasi (Curated Standard Library)

Selain modul eksternal yang diimport pakai URL, Deno juga punya standard library yang dikurasi dan diaudit oleh tim Deno. Isinya modul-modul dasar yang umum dibutuhkan, seperti HTTP server/client, modul buat filesystem (fs), path manipulation, cryptographic functions, data encoding/decoding (base64, base58, UUID), dll. Modul-modul ini dijamin kompatibel satu sama lain dan mengikuti filosofi Deno.

Kamu bisa akses standard library ini dari https://deno.land/std/. Contoh:

typescript
// Menggunakan modul fs dari standard library
import { readFileSync } from "https://deno.land/[email protected]/fs/read_file.ts";

Adanya standard library yang resmi dan terawat ini bikin kamu nggak perlu nyari-nyari package eksternal buat tugas-tugas dasar yang umum. Di Node.js, meskipun ada modul built-in, cakupannya mungkin beda, dan banyak fungsi yang "standar" malah diimplementasikan oleh package dari komunitas (misalnya, banyak framework HTTP di Node.js). Deno menyediakan core utilities ini di standard library yang terpusat.

6. Lebih Dekat dengan Web Standard APIs

Deno berusaha semaksimal mungkin mengikuti Web Standard APIs. Contoh paling jelas adalah Deno mengimplementasikan Fetch API yang biasa kamu pakai di browser buat ngelakuin HTTP request. Jadi, kamu bisa pakai fetch() di Deno, sama persis kayak di browser, tanpa perlu nginstal package kayak node-fetch di Node.js.

Selain fetch, ada juga implementasi API lain yang mirip browser, seperti Web Crypto API, URL, URLSearchParams, TextEncoder, TextDecoder, atob, btoa, performance.now(), Web Workers, dan masih banyak lagi.

Ini juga bikin "rasanya" beda. Kalau kamu sering bolak-balik ngoding frontend (browser) dan backend, pakai Deno bakal terasa lebih seamless. API-API yang kamu udah kenal di browser bisa langsung dipakai di backend. Ini mengurangi context switching dan membuat kode terasa lebih konsisten antara lingkungan frontend dan backend.

7. Performance? Itu Nggak Cuma Soal Speed, Tapi Juga DevX

Soal performa mentah, Deno dibangun di atas V8 (mesin JavaScript yang sama kayak Node.js) dan core-nya ditulis pakai Rust (bahasa yang terkenal cepat dan aman). Jadi, secara teoritis, performa eksekusi kode JavaScript/TypeScript-nya bisa diadu sama Node.js.

Tapi "rasa" performa yang beda di Deno itu seringkali bukan cuma soal kecepatan eksekusi kode, melainkan kecepatan development experience (DevX). Dengan Deno, kamu nggak perlu nunggu npm install yang kadang makan waktu (terutama kalau banyak dependensi). Kamu nggak perlu nunggu proses kompilasi TypeScript yang terpisah. Built-in tool-nya langsung tersedia. Import modul langsung dari cache lokal (setelah diunduh pertama kali) itu cepet. Siklus edit-save-run jadi lebih responsif, terutama di proyek-proyek kecil atau saat lagi nyoba-nyoba.

Ini yang sering bikin Deno terasa lebih "gesit" atau "ringan" buat pengembangan sehari-hari, meskipun untuk aplikasi skala besar dengan traffic tinggi, performa mentah keduanya mungkin akan sangat bergantung pada arsitektur aplikasi dan bagaimana kamu menulis kode.

Gimana Cara Mulai Nyobain Deno? Gampang Kok!

Salah satu hal yang bikin Deno menarik buat dicoba adalah instalasinya yang gampang. Kamu nggak butuh package manager khusus kayak nvm buat ngatur versi (meskipun ada dvm kalau kamu mau). Kamu bisa pakai installer satu baris script di Linux/macOS atau pakai scoop/choco di Windows.

Contoh di macOS/Linux:

bash
curl -fsSL https://deno.land/install.sh | sh

Atau pakai Homebrew di macOS:

bash
brew install deno

Setelah terinstal, kamu bisa langsung cek versinya:

bash
deno --version

Terus, coba bikin file sederhana, misalnya hello.ts:

typescript
console.log("Halo dari Deno!");

Jalankan pakai:

bash
deno run hello.ts

Langsung jalan kan? Nggak pakai npm init, npm install, atau setup TypeScript.

Coba bikin file yang butuh akses network, misalnya fetch_example.ts:

typescript
const res = await fetch("https://deno.land/");
const body = await res.text();
console.log(body.substring(0, 100) + "..."); // Cetak 100 karakter pertama

Jalankan:

bash
deno run fetch_example.ts

Deno akan nanya izin:

?  ️ The script tried to access the network at "https://deno.land/". Allow? [y/n/A] (y = yes, n = no, A = allow always)

Kalau kamu ketik y atau A, script baru jalan. Kalau kamu ketik n, script akan error. Atau, kamu bisa langsung kasih izin di command line:

bash
deno run --allow-net fetch_example.ts

Gampang banget kan buat mulai nyobain?

Jadi, Kapan Sebaiknya Coba Deno?

Deno mungkin bukan pengganti Node.js buat semua proyek, terutama kalau kamu udah punya proyek Node.js yang besar dan stabil dengan banyak dependensi. Memigrasi proyek semacam itu ke Deno bisa jadi effort yang lumayan, terutama karena ekosistem package Deno masih lebih kecil dan butuh adaptasi dengan sistem modulnya.

Tapi Deno sangat menarik buat kamu coba kalau:

  • Mulai Proyek Baru: Terutama kalau kamu pengen coba pendekatan yang lebih modern, aman secara default, dan nyaman sama TypeScript.
  • Bikin CLI Tool: Fitur deno compile yang bisa bikin single executable file itu killer feature buat distribusi CLI tool.

Pengen Belajar Hal Baru: Deno nawarin perspektif yang beda dalam ngembangin aplikasi server-side atau CLI pakai JavaScript/TypeScript. Ini bisa nambah wawasan dan skill* kamu. Prioritas Keamanan Tinggi: Konsep secure by default* Deno itu nilai plus banget buat aplikasi yang butuh lapisan keamanan ekstra. Tim Kamu Nyaman dengan TypeScript: Karena Deno punya support TypeScript first-class*, tim yang udah biasa pakai TypeScript bakal cepet adaptasi.

Intinya, Deno itu memberikan "rasa" yang berbeda dalam ngoding di luar browser. Lebih fokus ke modernitas, keamanan, dan kesederhanaan di beberapa aspek. Nggak ada maksud bilang Deno itu lebih baik dari Node.js secara absolut, karena Node.js punya ekosistem yang super gede dan komunitas yang matang. Tapi Deno menawarkan alternatif yang segar dengan filosofi yang unik.

Buat kamu yang udah nyaman sama Node.js, nyobain Deno itu kayak nyobain resep kopi baru. Bahannya (JavaScript/TypeScript, V8) sama, tapi cara bikinnya, rasanya, dan aftertaste-nya itu beda. Siapa tahu, kamu malah nemuin "rasa" ngoding yang baru yang lebih pas buat proyek-proyek tertentu atau bahkan jadi preference barumu.

Jadi, jangan ragu buat download Deno dan coba jalanin beberapa script sederhana. Rasain bedanya. Mungkin kamu bakal kaget betapa simplenya beberapa hal yang di Node.js butuh setup ini itu. Selamat mencoba!