deno bundle diperkenalkan kembali dengan basis esbuild, sehingga kini memungkinkan pembuatan bundle satu file untuk server maupun browser, lengkap dengan tree shaking dan optimisasi otomatis
- Dukungan import teks/byte serta stabilisasi OpenTelemetry bawaan meningkatkan observabilitas dan pengalaman memanfaatkan file eksternal
- Flag
--preload baru, peningkatan kemudahan dependensi lewat deno update, pengukuran cakupan skrip, manajemen izin, hingga kompatibilitas API Node.js mendapatkan peningkatan luas
- Peningkatan dukungan LSP, Jupyter, bench/coverage, tsconfig serta berbagai perbaikan kenyamanan penggunaan juga ikut hadir
Ringkasan perubahan utama dan fitur baru di Deno 2.4
Kembalinya deno bundle
- Di Deno 2.4, subcommand
deno bundle untuk membuat bundle JavaScript satu file kembali hadir bersama mesin esbuild
- Mendukung server dan browser, serta dapat membundel dependensi npm, JSR tanpa masalah
- Dengan dukungan tree shaking otomatis dan optimisasi kode (minify), pengelolaan menjadi lebih praktis
- Ke depannya, fitur perluasan dan kustomisasi proses bundling secara terprogram akan ditambahkan melalui runtime API dan plugin
Dukungan import teks dan byte
- Untuk memungkinkan penyematan file data eksternal seperti teks, biner, gambar ke dalam graph modul JavaScript, tersedia flag
--unstable-raw-imports
- Sebelumnya file eksternal harus dibaca lewat file I/O, tetapi kini tipe file dapat ditentukan di sintaks import untuk memakai data byte/teks secara langsung
- Fitur ini juga berfungsi saat bundling dan kompilasi, sehingga embedding aset ke dalam hasil akhir menjadi mudah
- Bersama dukungan import yang sudah ada seperti JSON dan Wasm, berbagai format file dapat dikelola dengan cara yang ramah spesifikasi
- Walau pembahasan spesifikasi masih berlangsung, Deno berupaya menyeimbangkan kemajuan fitur dan arah standar
Stabilisasi OpenTelemetry bawaan
- Dukungan OpenTelemetry bawaan yang diperkenalkan pada versi 2.2 kini sepenuhnya stabil di 2.4
- Cukup atur variabel lingkungan OTEL_DENO=1, maka pengumpulan log, metrik, dan trace dapat diotomatisasi tanpa flag tambahan
- Mendukung kompatibilitas tanpa konfigurasi dengan Node.js serta lingkungan deployment Deno Deploy
- Juga memungkinkan pengaitan/pengamatan otomatis untuk log
console.log dan permintaan HTTP
- Karena karakteristik penggunaan sumber daya, kontrol lewat variabel lingkungan tetap diperlukan
Flag --preload untuk penyiapan lingkungan sebelum eksekusi
- Ditambahkan flag
--preload untuk mengeksekusi lebih dulu kode yang diperlukan bagi perubahan lingkungan global, pemuatan data, pendaftaran modul dependensi, dan lain-lain sebelum skrip utama berjalan
- Berguna saat membangun platform seperti kustomisasi platform atau pengaturan ulang objek global
- Dapat dipakai di perintah utama seperti
deno run, deno test, deno bench, dan lainnya
Penyederhanaan manajemen dependensi: deno update
- Diperkenalkan subcommand
deno update untuk pembaruan otomatis ke versi terbaru dari dependensi npm dan JSR
- Mendukung pembaruan banyak dependensi sekaligus serta pembaruan presisi berbasis kompatibilitas Semver
- Juga tersedia sebagai alias dari
deno outdated --update, sehingga lebih nyaman digunakan
Cakupan skrip: deno run --coverage
- Kini dimungkinkan mengumpulkan cakupan tidak hanya untuk tiap pengujian, tetapi juga seluruh eksekusi yang mencakup subprocess
- Pengelolaan data yang fleksibel tersedia lewat berbagai cara, termasuk variabel lingkungan
DENO_COVERAGE_DIR
- Dukungan mode gelap juga ditambahkan untuk laporan cakupan HTML
Variabel lingkungan kompatibilitas Deno DENO_COMPAT=1
- Variabel
DENO_COMPAT=1 diperkenalkan untuk meningkatkan kenyamanan dan kompatibilitas pada ekosistem npm serta proyek berbasis package.json
- Secara otomatis menerapkan beberapa flag Unstable, dan ke depan cakupan dukungannya akan diperluas, termasuk penghilangan kebutuhan npm prefix
Peningkatan manajemen izin dan keamanan
- Flag
--allow-net kini mendukung wildcard subdomain dan rentang CIDR
- Ditambahkan flag
--allow-import untuk membatasi host yang boleh diimpor oleh kode, serta --deny-import untuk memblokir secara eksplisit
- API
Deno.permissions kini secara resmi mendukung query tipe "import"
- Saat memakai
Deno.execPath(), kini izin baca tidak lagi diperlukan, sehingga pemanfaatan path executable jadi lebih mudah
Conditional package.json exports
- Dukungan untuk conditional exports pada paket npm ditambahkan, memperkuat dukungan lintas ekosistem termasuk konfigurasi server React
- Perilaku import yang fleksibel dan terpersonalisasi dapat diwujudkan lewat flag kondisi pengguna
Dukungan bare specifier di deno run
- Entry point perintah kini dapat dijalankan dengan alias (bare specifier) yang diatur di
"imports" pada deno.json
- Ini memberi kemudahan besar untuk produktivitas pengembangan dan otomatisasi manajemen modul
Peningkatan formatting kode untuk format seperti XML dan SVG
deno fmt kini mendukung formatting otomatis untuk berbagai file template seperti .xml, .svg, .mustache
Peningkatan dukungan tsconfig.json
- Akurasi pengenalan berbagai opsi seperti
references, extends, files, include, exclude ditingkatkan
- Menawarkan kompatibilitas yang lebih baik dengan framework frontend modern seperti Vue, Svelte, Solid, dan Qwik
Peningkatan kompatibilitas variabel global dan API Node
- Objek global Node.js seperti
Buffer, global, setImmediate, clearImmediate kini selalu tersedia juga di kode pengguna
- Global yang sebelumnya hanya untuk paket npm kini bisa langsung digunakan tanpa flag perintah
- Kompatibilitas lebih dari 95% telah dicapai untuk
node:buffer, node:events, node:querystring, node:quic, node:wasm, dan akan terus diperluas
- Versi default tipe
@types/node juga diperbarui ke 22.15.14
Perubahan manajemen paket npm lokal
- Nama opsi koneksi paket lokal npm berubah dari
patch menjadi links, agar selaras dengan makna npm link
- Saat opsi lama dipakai, akan muncul peringatan deprecation, sehingga manajemen paket menjadi lebih jelas
Peningkatan LSP dan produktivitas pengembangan
- Bersamaan dengan peningkatan performa dan fitur LSP, juga hadir berbagai kemudahan seperti dukungan socket Unix/Vsock pada
fetch, callback onListen pada server, manajemen kernel Jupyter, pembacaan komentar di plugin lint, serta kompatibilitas Markdown untuk tabel bench/coverage
- Pengenalan sinyal Ctrl+Close di Windows (windows SIGHUP) dan format Markdown untuk output teks bench/coverage juga ikut ditingkatkan
Ucapan terima kasih kepada komunitas dan kontributor
- Perkembangan Deno 2.4 sangat terbantu oleh partisipasi dan umpan balik dari berbagai kontributor komunitas
- Untuk informasi lebih lanjut dan rincian perubahan lengkap, lihat halaman rilis GitHub
Kesimpulan
- Deno 2.4 menghadirkan kemajuan besar di berbagai aspek seperti bundling, import file eksternal, observabilitas, izin/keamanan, kompatibilitas, dan produktivitas
- Dalam alur kerja pengembangan serta proyek frontend modern dan ekosistem Node, pengguna bisa merasakan lingkungan pengembangan terintegrasi yang mudah dan kuat
- Informasi tambahan, berita terbaru, dan riwayat perubahan lengkap dapat dilihat di dokumentasi resmi, blog, dan halaman rilis GitHub
1 komentar
Komentar Hacker News
Saya sangat menyukai konsep Deno, jadi saya pernah mencoba menerapkan semaksimal mungkin
Deno.json, JSR, modern import, Deno Deploy, dan lain-lain pada proyek monorepo yang mencakup Next.js, Hono, serta paket privat. Hono berjalan rapi, tetapi Next.js tidak, dan ada juga kasus di mana isu terkait tipe rusak secara halus. Saya juga ingat pemilihan target deployment (seperti Vercel) menjadi masalah. Sebagai contoh, saya membagikan masalah kecil yang saya alami melalui tautan issue. Sebaliknya, Bun memang tidak serapi Deno dari sisi pengalaman penggunaan, tetapi terasa lebih sedikit yang perlu dipikirkan dan kesannya "langsung jalan". Meski begitu, Bun juga tidak sempurna, misalnya runtime Bun belum didukung di VercelAda saran bahwa stack yang dipilih masih berpusat pada npm, terutama di lingkungan dengan banyak paket npm privat, sehingga memang terasa dipaksakan. Menurut saya, daya tarik manis ala Deno justru ada pada memilih stack yang secara bawaan ramah Deno atau ESM. Pengalaman memakai Lume atau menargetkan Deno Deploy cukup bagus. (Skor JSR juga membantu untuk menjelajahi library yang menarik dan kuat dalam kompatibilitas ESM.) Tentu saja, menyarankan untuk memulai dengan stack yang benar-benar baru itu sulit secara realistis, dan investasi yang sudah ada pada Next.js dan sejenisnya juga besar, jadi berat untuk merekomendasikan Deno. Namun, saya rasa keunggulan Deno paling terlihat di lingkungan yang memulai dari nol dengan tool yang Deno-native dan ESM-native. Sebagai catatan, kompatibilitas npm di Deno terus membaik, dan catatan rilis 2.4 juga memuat peningkatan terkait ini. Di lingkungan full-stack, pendekatan yang mengutamakan
package.jsonalih-alihdeno.jsonjustru lebih kompatibel, jadi walaupun dalam jangka panjang ingin mendorongdeno.json, pengaturan berbasis package json juga layak direkomendasikanSaat mencoba Deno dalam mode kompatibilitas npm, kesannya ternyata berjalan cukup baik. Cara pemakaiannya sangat mirip dengan Bun. Jika menjalankan
deno installdi direktori yang memilikipackage.json, ia akan membuatnode_modulesyang ramping, dan perintahdeno task somethingbisa menjalankan skrip yang didefinisikan di package.json. Namun, cara khas Deno sendiri sering kali memakan banyak waktu sehingga terasa membuat frustrasi, dan saat ingin kembali ke lingkungan node/npm malah jadi makin merepotkan. Kesimpulannya, memakai Deno bersama package.json terasa lebih mudahAwalnya saya all-in ke Deno, tetapi terlalu banyak masalah kecil sehingga melelahkan. Sebagai perbandingan, Bun berjalan baik tanpa banyak hal yang perlu dipikirkan
Orang cenderung meremehkan kompatibilitas node di Deno. Saya berharap adopsi variabel lingkungan compat akan membantu penyebarannya. Akan lebih nyaman kalau command seperti denon menyalakannya secara otomatis
Dalam pengalaman saya, kompatibilitas node di Deno justru di bawah ekspektasi dan mengecewakan. Memindahkan proyek sederhana sekitar 100~200 baris ke Deno memakan waktu sekitar 1 jam, padahal seharusnya normalnya selesai dalam 5~10 menit. Beberapa method node tidak didukung, dokumentasi terkait juga kurang memadai, dan bahkan fitur dasar harus diunduh langsung dari URL yang obscure. Saat memindahkan test suite, saya akhirnya menyerah. Terutama, proses berpindah dari CommonJS (CJS) ke ESM jauh lebih menyakitkan dari yang dibayangkan, dan sama sekali tidak semudah yang dijelaskan dokumentasi resmi Deno. Pada akhirnya saya mengalami bahwa seluruh library tidak bisa dipindahkan
Dulu saya cukup positif terhadap Deno, tetapi sekarang saya tidak benar-benar merasa ada alasan untuk memakai Deno dibanding Bun
Ada penilaian bahwa daftar perubahan terbaru Deno itu bagus. Saya cukup puas memakai Deno untuk menulis skrip acak/glue code (untuk machine learning dan semacamnya saya memakai python/uv), dan saya juga menantikan dukungan gRPC serta command bundle di masa mendatang
Masih terasa aneh bahwa Deno sampai sekarang belum benar-benar berjalan baik di FreeBSD. Binding V8 berbasis Rust masih belum di-port
Saya penasaran sebenarnya ada berapa banyak pengguna FreeBSD di antara developer JavaScript modern
Dulu portabilitas antar-Unix dianggap ukuran kebersihan kode, tetapi sekarang saya heran karena kompatibilitas di antara berbagai sistem Unix tidak terlalu ditekankan lagi
Sepertinya sudah terdaftar di port untuk FreeBSD
Sangat bisa dimaklumi kenapa mereka tidak mengerahkan banyak upaya untuk dukungan FreeBSD
Ada pendapat bahwa alasan Deno belum lebih luas dipakai di production adalah ketiadaan database kerentanan yang terstandarisasi. Ini bisa ditutupi dengan kompatibilitas npm 100%, tetapi kalau begitu sebagian besar paket Deno populer justru keluar dari cakupan. Pada dasarnya, tidak adanya package manager terpusat (dan ini memang desain yang disengaja) adalah tantangannya. Ada yang bertanya apakah sudah ada perkembangan terkait hal ini
Bantahannya: jika ketiadaan database kerentanan benar-benar menjadi masalah besar di production, maka C/C++ juga sama-sama tidak bisa dipakai. Faktanya, untuk C/C++ orang memeriksa isu keamanan dengan merujuk pada database CVE/GHSA yang netral terhadap bahasa. Sebagai referensi, pada C juga sering kali orang cukup mem-vendoring file eksternal begitu saja tanpa melacak versinya. Selain itu, ada file
deno.lock, jadi bagi yang peduli, mereka bisa bergantung pada file ini untuk memeriksa database kerentanan terhadap versi yang digunakanStruktur mengambil paket langsung dari URL (seperti GitHub) juga mirip dengan Go, jadi isu yang sama berlaku juga untuk Go
Saya suka karena subcommand bundle ditambahkan kembali. Senang karena tidak perlu lagi memakai cara memutar yang merepotkan
Agak mengejutkan bahwa untuk pekerjaan bundling mereka memilih esbuild, bukan Rolldown berbasis Rust. Rolldown kabarnya segera mencapai v1
Saya sangat menyukai arah Deno, dan rasanya Node seharusnya sejak awal lahir seperti ini. Namun, yang saya khawatirkan adalah Deno ikut terseret tanpa perubahan oleh 'hype' para pesaingnya
Saya terus mendengar penilaian bagus tentang Deno. Gara-gara itu saya mulai berpikir mungkin saya akan mencoba memakai js
Dari sudut pandang keamanan saya mendukung Deno, tetapi saya pernah merasa kurang nyaman karena situs resminya merekomendasikan instalasi dengan format
curl mywebsite.com/foo.sh | sh. Tentu tingkat toleransi risiko tiap orang berbeda, tetapi setidaknya jika file diunduh lalu dijalankan, pengguna atau antivirus bisa memeriksanya. Ekosistem Node/Deno + npm pada dasarnya adalah struktur yang membutuhkan kepercayaan cukup besar. Panduan resmi juga menyediakan opsinpm install -g denoselaincurl | sh, dan npm setidaknya punya pemeriksaan integritas file minimal serta pemindaian malware sederhana, sehingga relatif lebih aman. Situs deno.land pun, walaupun aman di level codebase, dari sisi operasional tidak bisa dijamin 100%, jadi menurut sayacurl | shbukan praktik terbaik keamananSaya tidak setuju dengan logika ini. Kebanyakan skrip instalasi pada akhirnya hanya bertugas mengunduh dan menjalankan biner berukuran ratusan hingga jutaan baris yang dibuat oleh penulis yang sama. Jika sampai tidak bisa mempercayai penulis sama sekali, sehingga mengasumsikan server bisa menyebarkan malware hanya ke IP tertentu, maka malware juga bisa disisipkan di level biner sejak awal, jadi seharusnya proyek itu memang tidak dipakai sama sekali. Perdebatan
curl | shtampaknya meluas karena itu argumen yang mudah dan bisa diulang-ulang, padahal meninjau jutaan baris kode justru masalah keamanan yang sesungguhnya. Jika sampai khawatir pada serangan MITM oleh lembaga pemerintah, satu-satunya jalan adalah memutus seluruh kepercayaan ke internet luar sejak awalAda catatan bahwa onboarding pengguna baru memang sulit. Bahkan jika menyarankan untuk memakai npm, npm sendiri harus sudah terpasang lebih dulu, sementara situs resmi npm menyarankan instalasi nvm, dan nvm pun menggunakan
curl | sh. Jadi pada akhirnya pendekatan lewat npm juga secara tidak langsung menghadapi masalah yang samaDalam diskusi apakah
npm install -g denobenar-benar lebih aman daripadacurl | sh, inti persoalannya bergantung pada: mana yang lebih mudah ditembus peretas, server npm atau server milik sendiri? Jika kita yakin ini bukan soal kompromi server sendiri, maka tidak ada alasancurl | shlebih tidak aman daripadanpm install. Pada akhirnya, dari sudut pandang keamanan, kedua metode ini sama-sama bisa rentan, jadi jika didekati secara ekstrem, masalahnya justru adalah penggunaan internet itu sendiriKritik bahwa implementasi sandbox Deno terasa seperti teknologi era 90-an, sehingga memakainya sendiri bukan kebiasaan keamanan yang baik
Ada yang penasaran apakah pernah ada contoh serangan terhadap model instalasi
curl | shyang benar-benar berhasil di dunia nyata