Ngoprek Deno buat yang udah bosen sama Node
Buat kamu yang udah lumayan lama mainan Node.js, pasti pernah dong ngerasa... bosen? Atau mungkin bukan bosen sih, lebih ke penasaran, "Ada lagi nggak ya yang seru selain Node?". Node.js itu keren banget, udah jadi tulang punggung banyak aplikasi modern. Tapi, dunia teknologi kan jalan terus ya, dan ada aja inovasi baru yang muncul. Nah, salah satu yang bikin heboh beberapa tahun belakangan ini, dan dibuat sama kreator Node.js sendiri, Ryan Dahl, adalah Deno.
Deno itu ibarat "generasi baru" buat ngejalanin JavaScript dan TypeScript di luar browser. Kalau kamu udah nyaman sama JavaScript/TypeScript di Node, ngoprek Deno ini bisa jadi petualangan seru berikutnya yang nggak jauh-jauh amat dari zona nyamanmu, tapi nawarin pengalaman yang beda dan beberapa perbaikan signifikan dari Node.
Kenapa Deno Bisa Bikin 'Ngoprek' Lebih Seru?
Node.js itu udah tua (dalam artian positif, matang!), dan seiring umurnya, ada beberapa hal yang terasa 'kurang modern' atau 'ribet'. Deno muncul buat mencoba ngatasin hal-hal itu, bawa pendekatan yang lebih fresh dan ngikutin standar web modern.
Keamanan dari Sananya: Ini perbedaan paling fundamental. Di Node.js, kalau kamu install sebuah library atau jalanin script, dia bisa ngakses apa aja di komputermu (file system, network, environment variables) tanpa tanya-tanya. Deno itu kebalikannya. Secara default, Deno itu secure. Dia nggak bisa sembarangan ngakses file, network, atau environment variables. Kamu harus kasih izin eksplisit pakai flag (--allow-read
, --allow-net
, --allow-env
, dll.) waktu ngejalanin script-nya. Ini kayak browser yang minta izin sebelum ngakses lokasi atau kamera. Konsep ini bikin kita lebih sadar dan hati-hati soal permission yang dibutuhkan sama kode yang kita jalanin, terutama code* dari luar. Modul Pakai Standar Web (ES Modules): Kamu tahu import ... from ...
yang sering dipakai di frontend? Di Deno, itu standar! Kamu bisa langsung import modul dari URL, misalnya import { serve } from "https://deno.land/[email protected]/http/server.ts";
. Nggak perlu lagi yang namanya require()
. Dan yang lebih keren, Deno nggak pakai nodemodules
. Semua dependensi di-cache secara global di komputermu. Jadi, nggak ada lagi folder nodemodules
yang segede gaban di setiap project. Ini bikin project lebih rapi dan transfer project jadi gampang, tinggal copy paste* file kode utamanya aja. TypeScript Langsung Jalan: Nah, buat penggemar TypeScript, ini surga! Deno punya runtime TypeScript built-in. Kamu nggak perlu install typescript
package terpisah, nggak perlu config* tsconfig.json
yang kadang bikin pusing di awal. Tulis kode TypeScript, langsung jalanin pakai deno run file.ts
. Sesimpel itu. Tooling Lengkap Built-in: Node.js itu minimalis, cuma runtime doang. Buat formatting kode, linting, testing, bundling, kamu butuh tool eksternal kayak Prettier, ESLint, Jest/Mocha, Webpack/Parcel. Deno udah nyediain tool dasar itu langsung dari command line: deno fmt
buat format kode, deno lint
buat linting, deno test
buat ngejalanin test, deno bundle
buat bundle kode jadi satu file JavaScript, dan deno compile
buat bikin executable mandiri. Ini mengurangi setup* awal project secara signifikan. Standar Web Jadi Acuan: Deno berusaha sebisa mungkin ngikutin API standar web. Misalnya, buat fetch data, dia pakai Fetch API yang sama kayak di browser. Buat event, pakai Event Emitter standar web. Ini bikin developer* yang biasa main di frontend lebih cepat akrab sama Deno.
Oke, Gimana Mulai Ngoprek Deno? (Instalasi & Hello World)
Ini bagian paling gampang. Instalasi Deno itu simpel banget, mirip kayak instalasi tool modern lainnya.
Via Shell (macOS/Linux):
bash
curl -fsSL https://deno.land/install.sh | sh
Via PowerShell (Windows):
powershell
irm https://deno.land/install.ps1 | iex
Atau pakai package manager favoritmu kayak Homebrew, Scoop, atau Choco. Cek dokumentasi resmi Deno di deno.land
buat cara paling update.
Setelah terinstal, buka terminal baru dan cek versinya:
bash
deno --version
Harusnya keluar informasi versi Deno, V8 (engine JavaScript-nya), dan TypeScript.
Sekarang, bikin file pertama. Namain aja hello.ts
(karena kita mau pakai TypeScript, biar kerasa bedanya sama Node):
typescript
// hello.ts
const message: string = "Halo dunia dari Deno!";
console.log(message);
Buat ngejalaninnya, cukup buka terminal di folder tempat file hello.ts
berada, lalu ketik:
bash
deno run hello.ts
Voila! Harusnya langsung muncul output: Halo dunia dari Deno!
. Perhatiin, kamu nggak perlu compile dulu TypeScript-nya, Deno langsung ngejalaninnya. Nggak ada npm init
, nggak ada package.json
, nggak ada npm install
, nggak ada node_modules
. Langsung run. Keren kan?
Mulai Mainin Fitur Khas Deno (Tips Aplikaif)
Setelah hello world, saatnya nyoba fitur-fitur yang bikin Deno beda.
1. Keamanan (Permissions):
Bayangin kamu mau bikin script Deno yang baca isi file. Bikin file baru, misalnya read_file.ts
:
typescript
// read_file.ts
try {
const content = await Deno.readTextFile("./hello.ts"); // Coba baca file hello.ts
console.log("Isi file hello.ts:");
console.log(content);
} catch (error) {
console.error(Gagal membaca file: ${error.message});
}
Kalau kamu coba jalanin pakai deno run read_file.ts
, kemungkinan besar akan muncul error yang bilang kalau skrip ini nggak punya izin buat baca file.
error: Uncaught (in promise) PermissionDenied: A file operation was blocked by the security policy.
at Object.readTextFile (ext:denofs/30fs.js:247:11)
at async file:///path/to/your/project/read_file.ts:2:19
Ini Deno lagi ngasih tahu kalau dia butuh izin. Buat ngasih izin baca file, tambahin flag --allow-read
:
bash
deno run --allow-read read_file.ts
Nah, sekarang baru jalan dan nampilin isi file hello.ts
. Gampang kan? Kamu bisa kasih izin buat network pakai --allow-net
, environment variables pakai --allow-env
, write file pakai --allow-write
, ngejalanin proses lain pakai --allow-run
. Kalau mau kasih semua izin (ini nggak disarankan buat code yang nggak kamu percaya banget), bisa pakai --allow-all
.
2. Modul dari URL:
Ini yang paling kerasa bedanya dari Node. Kamu nggak perlu package manager kayak npm/yarn buat nambahin library. Langsung import dari URL! Contoh, bikin server HTTP sederhana pakai standard library Deno:
typescript
// server.ts
import { serve } from "https://deno.land/[email protected]/http/server.ts";const port = 8000;console.log(Server berjalan di http://localhost:${port}/);serve(async (request) => {
const url = new URL(request.url);
const path = url.pathname;
Jalaninnya:
bash
deno run --allow-net server.ts
Kenapa pakai --allow-net
? Karena server kita butuh ngakses network (port 8000). Coba buka browser dan akses http://localhost:8000/
atau http://localhost:8000/greet?name=Tester
. Keren kan, bikin server minimalis segampang itu tanpa package eksternal (kecuali standard library Deno itu sendiri yang di-import dari URL).
Tips buat Modul URL:
Versioning: Perhatiin URL-nya, ada @0.193.0
. Ini penting buat ngunci versi library* yang kamu pakai. Jangan pakai versi yang latest
di production biar aplikasimu stabil. Caching: Pertama kali kamu import modul dari URL, Deno bakal nge-download dan nyimpen di cache global. Selanjutnya, dia pakai yang di-cache. Kalau mau update*, tambahin --reload
waktu deno run
. Managing Dependencies (Opsional): Kalau projectmu gede dan banyak import dari URL, URL-nya bakal bertebaran di mana-mana. Ada pola umum buat ngerapihin ini, yaitu bikin file deps.ts
atau imports.ts
(namanya bebas) buat ngumpulin semua import* eksternal.
typescript
// deps.ts
export { serve } from "https://deno.land/[email protected]/http/server.ts";
// Export library lain yang kamu pakai...
Terus di file server.ts
tadi, ubah import-nya jadi:
typescript
// server.ts
import { serve } from "./deps.ts"; // Import dari file deps.ts lokal
Ini bikin manajemen versi dan library terpusat di satu file. Deno juga support import_map.json
yang fungsinya mirip kayak package.json
bagian dependencies
, tapi untuk mapping URL, bisa kamu pelajari lebih lanjut di dokumentasi Deno.
3. TypeScript Nggak Pakai Ribet:
Seperti yang udah disinggung, hello.ts
tadi langsung jalan kan? Kamu bisa nulis kode TypeScript sepuasnya tanpa setup tambahan. Deno juga punya support yang bagus di VS Code lewat extension resminya ("Deno") yang bakal ngasih intellisense, type checking, dan debugging buat kode Deno (TypeScript atau JavaScript). Pastiin extension-nya aktif buat workspace project Deno-mu.
4. Tooling Built-in yang Berguna:
Cobain tooling Deno di project server tadi:
Formatting: deno fmt server.ts
(atau deno fmt
aja buat semua file di folder itu). Ini bakal ngerapihin kode kamu otomatis sesuai style* standar Deno.
- Linting:
deno lint server.ts
(ataudeno lint
aja). Deno bakal ngecek potential masalah di kode kamu. - Testing: Buat file test, misalnya
server_test.ts
:
typescript
// server_test.ts
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
import { serve } from "./deps.ts"; // Import serve dari deps.ts atau langsung dari URL// Fungsi dummy buat test (server asli butuh mock/integration test yang lebih kompleks)
// Ini cuma contoh penggunaan testing utility di Deno
Deno.test("basic test", () => {
const a = 1;
const b = 2;
assertEquals(a + b, 3);
});// Contoh test asynchronous
Deno.test("async test", async () => {
const result = await Promise.resolve("done");
assertEquals(result, "done");
});
Jalanin test-nya: deno test
. Deno bakal nyari file dengan pola nama test.ts
atau test.js
dan ngejalanin test di dalamnya. Ada utility testing lengkap di deno.land/std/testing
.
- Bundling & Compiling:
deno bundle server.ts bundle.js
: Ini bakal nge-bundle kode server kamu jadi satu file JavaScript (bundle.js
). Berguna kalau mau deploy ke environment* yang nggak ada Deno tapi bisa jalanin JavaScript (walaupun jarang). deno compile --allow-net server.ts
: Ini yang paling menarik! Deno bisa nge-compile kode kamu jadi satu executable mandiri buat OS targetmu (Windows, macOS, Linux). Jadi, kamu bisa bikin command-line tool pakai Deno dan ngasih file executable-nya ke orang lain tanpa mereka harus install Deno! Keren buat bikin tool internal perusahaan atau utility yang gampang didistribusiin. Jangan lupa flag* izinnya (--allow-net di contoh server ini).
Hal yang Perlu Diperhatikan Saat Pindah dari Node ke Deno (Tips buat Transisi):
Ekosistem: Ekosistem library Deno belum sebesar Node/npm. Memang banyak library Node yang pure JavaScript bisa jalan di Deno, tapi nggak semuanya, terutama yang ngakses Node API (fs
, http
, process
, dll.). Tapi komunitas Deno terus berkembang, dan banyak library populer sudah di-port atau ada alternatif Deno-native. Ada juga library kompatibilitas yang memungkinkan beberapa library* Node jalan di Deno (cari di deno.land/x
). Asinkronisitas: Deno pakai async/await dan Promises secara native dan agresif. Hampir semua API Deno mengembalikan Promise. Kalau kamu masih nyaman pakai callback* ala Node lama, di Deno kamu bakal dipaksa (dengan cara yang baik!) buat pakai Promise/async await. No package.json
, No nodemodules
: Ini butuh adaptasi mindset. Manajemen dependensi jadi lewat URL atau importmap.json
. Awalnya mungkin terasa aneh, tapi lama-lama terasa lebih bersih dan simpel (nggak ada konflik versi yang rumit antar dependency*). Mulai dari Project Kecil: Jangan langsung port project Node-mu yang gede ke Deno. Mulai dari project kecil, bikin utility sederhana, script* buat otomatisasi, atau server API yang minimalis. Ini cara terbaik buat ngerasain perbedaannya dan belajar pelan-pelan. Manfaatkan Dokumentasi & Komunitas: Dokumentasi Deno itu bagus dan jelas. deno.land/manual
adalah teman terbaikmu. Gabung juga di community* Deno (Discord, forum) kalau ada pertanyaan.
Kapan Bagusnya Pakai Deno?
Project Baru: Kalau mulai project dari nol, Deno bisa jadi pilihan menarik. Setup-nya cepat, terutama buat command-line tool* atau server API sederhana. Command-line Tools: Fitur compile jadi executable bikin Deno sangat cocok buat bikin tool* CLI yang gampang didistribusiin. Project yang Prioritaskan Keamanan: Kalau security itu krusial dan kamu mau kontrol granular terhadap permission* kode, model keamanan Deno sangat membantu. Suka TypeScript: Kalau kamu penggemar berat TypeScript dan pengen ngoding tanpa setup* tsconfig.json
yang ribet, Deno itu jawabannya.
- Pengen Eksperimen: Ya, namanya juga 'ngoprek'. Kalau kamu cuma pengen nyoba sesuatu yang baru, ngerasain sensasi ngoding JavaScript/TypeScript di luar browser dengan cara yang beda, Deno itu seru banget buat dieksplorasi.
Kesimpulan: Ayo Mulai Ngoprek!
Ngoprek Deno itu bukan berarti kamu harus ninggalin Node.js selamanya. Node.js tetap relevan dan punya ekosistem yang luar biasa besar. Tapi Deno nawarin perspektif baru, ngatasin beberapa pain point di Node, dan bawa fitur-fitur modern yang menarik.
Dengan runtime TypeScript built-in, tooling lengkap, model keamanan yang ketat, dan pendekatan modul yang modern, Deno itu layak banget buat dicoba. Jadi, buat kamu yang udah "bosen" sama Node atau cuma penasaran pengen nyoba hal baru yang masih di dunia JavaScript/TypeScript, tunggu apa lagi? Install Deno, buka editor kode, dan mulai ngoprek! Kamu bakal nemuin banyak hal seru yang beda dari pengalamanmu di Node. Selamat bereksperimen!