23 poin oleh GN⁺ 2025-08-04 | 3 komentar | Bagikan ke WhatsApp
  • Lingkungan pengembangan Node.js dalam beberapa tahun terakhir mengalami perubahan mendasar dari sisi kompatibilitas tinggi dengan standar web dan penguatan fitur bawaan
  • Dengan adopsi sistem modul dan pola asinkron modern seperti ESM (ES Modules), prefiks node:, dan top-level await, penulisan kode menjadi lebih intuitif dan aman
  • Fetch API, AbortController, Web Streams, dan lainnya mengurangi ketergantungan pada library eksternal, karena banyak fungsi kini didukung oleh API bawaan
  • Alat pengembangan bawaan seperti test runner, mode Watch, dan dukungan file environment sangat meningkatkan kenyamanan kerja dan produktivitas
  • Dengan penguatan infrastruktur keamanan dan deployment seperti kontrol izin, diagnostics channel, hingga distribusi single executable, Node.js modern terus berevolusi menjadi platform yang profesional dan serbaguna

Perubahan dan perkembangan Node.js

  • Node.js sedang bertransformasi dari struktur awal yang berfokus pada callback dan CommonJS menjadi lingkungan pengembangan yang lebih terstandarisasi
  • Perubahan ini bukan sekadar perubahan tampilan, melainkan perubahan paradigma pengembangan JavaScript sisi server secara keseluruhan

1. Sistem modul: standardisasi ES Modules

  • CommonJS telah lama digunakan di Node.js, tetapi memiliki keterbatasan seperti analisis statis, tree shaking, serta ketidaksesuaian dengan standar web
  • Pendekatan ESM (ES Modules) kini telah menjadi standar baru di Node.js
    • Menggunakan sintaks import dan export
    • Prefiks node: diperkenalkan untuk membedakan modul bawaan secara eksplisit
      • Contoh: import { readFile } from 'node:fs/promises'
      • Perbedaan antara modul bawaan dan paket npm menjadi lebih jelas
  • Dengan dukungan top-level await, await kini bisa digunakan di level teratas modul
    • Tidak perlu lagi membungkusnya dengan fungsi async yang langsung dijalankan
    • Kode menjadi lebih lurus, sederhana, dan mudah dipahami

2. Web API bawaan: pengurangan dependensi eksternal

  • Fetch API kini sudah built-in di Node.js, sehingga permintaan HTTP dapat dilakukan tanpa dependensi eksternal seperti Axios atau node-fetch
  • Fetch secara bawaan mendukung timeout dan pembatalan (AbortSignal.timeout())
    • Penanganan error yang konsisten dimungkinkan tanpa library timeout terpisah
  • Dengan AbortController, pola pembatalan dapat diterapkan pada berbagai pekerjaan asinkron seperti file dan jaringan
    • Menyediakan cara yang terstandarisasi untuk menangani interupsi pengguna atau batas waktu

3. Pengujian bawaan: lingkungan testing profesional

  • Tanpa framework eksternal seperti Jest atau Mocha, test runner bawaan Node.js kini dapat memenuhi sebagian besar kebutuhan
    • Penulisan test yang intuitif dengan node:test dan node:assert
  • Fitur kenyamanan pengembangan seperti mode Watch untuk test dan pelaporan coverage juga tersedia secara bawaan
    • Test dijalankan otomatis setiap kali kode diubah
    • Fitur coverage eksperimental tersedia di Node.js 20 ke atas

4. Pola asinkron yang berevolusi

  • Meski async/await digunakan luas, Node.js modern menekankan pemanfaatan pola eksekusi paralel dan penanganan error yang lebih presisi
    • Menjalankan pekerjaan paralel dengan Promise.all() dan menangani error dengan informasi konteks dalam satu try/catch
  • Dengan memanfaatkan AsyncIterator, pemrosesan event berurutan dan kontrol alur menjadi lebih mudah

5. Fitur stream tingkat lanjut dan kompatibilitas standar web

  • API stream kini memiliki kompatibilitas dengan standar web (Streams API)
    • Dengan Readable.fromWeb dan Readable.toWeb, stream dapat dikonversi antara Node.js dan browser
  • Fungsi pipeline berbasis Promise memungkinkan pembangunan pipeline stream yang intuitif dan aman

6. Worker Threads: pemrosesan paralel untuk pekerjaan intensif CPU

  • Dengan WorkerThreads, batas single-thread JavaScript dapat diatasi dan multi-core dapat dimanfaatkan
  • Perhitungan kompleks atau pemrosesan data besar dapat dilakukan tanpa memblokir loop utama

7. Inovasi dalam pengalaman pengembangan

  • Flag --watch memungkinkan deteksi perubahan kode dan restart otomatis tanpa nodemon
  • Flag --env-file membuat dotenv tidak lagi diperlukan, sehingga environment variable bisa langsung digunakan
  • Konfigurasi lingkungan pengembangan menjadi lebih sederhana dan cepat

8. Keamanan dan pemantauan performa bawaan

  • Dengan Permission Model yang masih eksperimental, izin aplikasi seperti akses file/jaringan dapat dibatasi
    • Menguntungkan untuk penerapan prinsip least privilege dan kepatuhan keamanan
  • Dengan perf_hooks, pengukuran performa bawaan tersedia, dan pekerjaan lambat dapat dianalisis serta dicatat secara otomatis

9. Modernisasi deployment dan packaging

  • Dengan dukungan SEA (Single Executable Application), Node.js dan aplikasi dapat didistribusikan sebagai satu binary
    • Deployment/instalasi menjadi mudah bahkan di lingkungan tanpa Node.js

10. Penanganan error dan diagnostik modern

  • Dengan kelas error terstruktur, konteks yang kaya dan informasi diagnostik dapat disertakan, serta objek error yang konsisten dapat diteruskan
  • Dengan diagnostics_channel, data diagnostik berbasis event yang dikustomisasi dapat dikirim dan otomatisasi pemantauan dapat dilakukan

11. Perkembangan resolusi modul dan manajemen paket

  • Dengan Import Maps, path internal dapat dikelola dalam namespace terpisah
    • Pemisahan modul internal dan refactor menjadi lebih mudah
  • Dengan dynamic import, kode dapat dimuat saat runtime sesuai environment atau konfigurasi, sekaligus memungkinkan code splitting

Ringkasan inti dan prospek ke depan

  • Dalam Node.js, kepatuhan pada standar web, pemaksimalan alat bawaan, dan adopsi pola asinkron modern menjadi semakin penting
  • Dengan pemrosesan paralel berperforma tinggi seperti Worker Threads, serta fitur diagnostik/keamanan, Node.js berkembang menjadi platform kelas profesional
  • Fitur baru seperti distribusi single executable dan namespace modul sangat meningkatkan kemudahan operasional
  • Pola-pola ini dapat diadopsi secara bertahap sambil tetap kompatibel dengan kode yang sudah ada
  • Bahkan setelah 2025, Node.js akan terus berevolusi, dan pola modern yang diperkenalkan di sini diperkirakan menjadi fondasi bagi aplikasi yang berorientasi masa depan

3 komentar

 
sanori 2025-08-07

Saat mulai membuat project dengan Deno, saya sempat berpikir, 'Wah, ternyata hal seperti ini juga bisa ya', dan ternyata node.js juga berubah ke arah yang mirip.

 
dnltmdwhd 2025-08-05

Oh, sekarang tidak pakai axios lagi, bisa langsung pakai fetch

 
GN⁺ 2025-08-04
Komentar Hacker News
  • Perubahan terbesar bukanlah ESM, melainkan fetch dan AbortController kini sudah bawaan di Node; saya bisa menghapus axios atau node-fetch, ukuran bundle Lambda juga berkurang, dan latensi cold start pun memendek sekitar 100ms. Kalau Anda masih refleks mengetik npm i axios, rilis Node 2025 adalah saat yang tepat untuk berhenti.
    • Saya lebih memilih ts-rest di seluruh stack karena mencakup sekaligus pemanggilan API dan validasi; di antara library berbasis zod/json schema, ini yang paling ringan sekaligus memberi type safety yang tangguh. Klien HTTP-nya juga bisa diganti sesuai keinginan (di bun dan engine node saya memilih fastify). Memang ada overhead, tetapi karena type safety bisa dipindahkan ke tahap kompilasi, menurut saya itu sangat sepadan. Penasaran apakah ada alternatif atau pandangan yang lebih baik; sejauh yang saya cari, hanya ts-rest yang bisa menjaga sekaligus bobot ringan dan type safety.
    • Saya kurang suka sintaks fetch dan pekerjaan tambahan seperti await response.json serta penanganan exception tambahan. Waktu memakai axios terasa jauh lebih intuitif; bahkan di contoh kode pun axios cukup memproses response.data, sedangkan fetch mengharuskan cek status sendiri lalu parse JSON, jadi lebih merepotkan.
    • Sebagai penulis library, justru adopsi ESM jauh lebih berat dan menyakitkan, tetapi itu upgrade yang sepadan. fetch sendiri memang bagus, tetapi berkat ESM saya benar-benar mendapatkan banyak hal.
    • node fetch jauh lebih mudah dan sederhana dibanding axios, jadi saya lebih suka itu. Saya bahkan tidak tahu masih ada orang yang terus memakai axios.
    • Saya sangat antusias dengan Undici sebagai library request bawaan; lihat situs resmi undici
  • Sekarang bisa dijalankan dengan membatasi izin akses file system atau jaringan seperti berikut
    # Contoh pembatasan akses file system
    node --experimental-permission \
      --allow-fs-read=./data --allow-fs-write=./logs app.js
    
    # Contoh pembatasan jaringan
    node --experimental-permission \
      --allow-net=api.example.com app.js
    
    Sepertinya terinspirasi dari Deno; ini benar-benar fitur yang luar biasa, dokumentasi fitur permission Deno
  • Kini teks bisa langsung diberi styling tanpa perlu memasang chalk atau picocolors
    const { styleText } = require('node:util');
    
    Lihat dokumentasi resmi styleText
  • Saya jadi tahu berbagai hal yang bisa langsung diterapkan
    1. Node kini punya testing bawaan, jadi tidak perlu lagi memaksa memakai jest
    2. Node juga punya fitur watch bawaan, jadi nodemon pun tidak lagi diperlukan
    • Saya masih lebih memilih jest, karena bisa memakai jest-extended
    • Saya rasa sistem testing bawaan Node kualitasnya kurang bagus; setelah memakainya beberapa minggu Anda akan tahu alasannya, dan bahkan kalau mengajukan isu pun tim Node tampaknya tidak terlalu peduli
  • Menurut Matteo Collina, node fetch secara internal memakai undici fetch; karena harus membangun WHATWG web stream, secara mendasar ini lebih lambat daripada pendekatan undici request,
    video YouTube yang dimaksud,
    blog cara kerja undici
    • Bagi yang penasaran, benchmark bisa dilihat di sini. Saya baru-baru ini menguji di MacBook Pro M3 Max dalam lingkungan lokal dan jaringan; undici adalah yang terbaik di lokal, tetapi di jaringan Axios memberi hasil lebih cepat. Saya tidak tahu persis alasannya, tetapi pengalaman memakai undici selama satu setengah tahun terakhir sangat luar biasa. Ini cukup stabil untuk dipakai di production, tetapi untuk memaksimalkan performa terbaik, tetap perlu mempertimbangkan konteks penggunaan.
  • Berkat transpiler TypeScript native di Node, kompleksitas bagi pengguna TS jauh berkurang
    • Sebenarnya ini hanya menghapus tipe, bukan benar-benar transpile; hal seperti TS enum tidak bekerja dengan benar
    • Masih kurang untuk dipakai secara nyata; saya tidak terlalu peduli soal Enum, tetapi import file lokal tanpa ekstensi masih tidak bisa, dan definisi class property di constructor juga tidak bisa
    • Flag --experimental-strip-types juga sekarang tidak lagi diperlukan
  • Saya sering mengetahui fitur baru seperti ini secara kebetulan. Rasanya mirip seperti saat memakai browser: “oh, itu ada karena ini versi terbaru.” Dulu saat hanya mengerjakan C#, saya senang sekali membaca pengenalan fitur bahasa baru, tetapi sekarang karena memakai banyak bahasa sekaligus, mengikuti satu bahasa saja pun tidak mudah. Hampir semuanya jadi pembelajaran acak dari blog atau pengaruh sekitar.
    • Saya sangat tertarik dengan kabar Node(V8), jadi setiap 2–3 bulan sekali saya membaca release note untuk mengikuti fitur-fitur seperti ini. Kadang saya juga membaca ECMA proposals; saya benar-benar berharap pipeline operator jadi masuk.
  • Setelah lama menjauh dari ekosistem Node lalu melihatnya lagi, ternyata sekarang ada begitu banyak fitur baru yang menarik. Menurut saya ini hasil dari Deno dan Bun yang mengguncang pasar sehingga tim pengembang Node jadi makin terpacu.
  • Node makin berubah menjadi pesaing yang tidak mudah diremehkan dalam persaingannya dengan Bun.js, Deno, dan lainnya. Persaingan timbal balik seperti itu positif bagi perkembangan runtime JS.
    • Perubahannya memang lambat, tetapi pasti dan menyenangkan untuk dilihat. Meski begitu, saya masih merindukan shell function $ milik Bun; memakai JS seperti skrip itu benar-benar nyaman, jadi saya tidak ingin menaruh dua runtime sekaligus di server.
  • Menurut saya, seperti browser, fitur baru di Node juga bisa dibagi dua
    1. Teknologi yang benar-benar baru
    2. Layer tahap “pemolesan” yang ditambahkan di atas fitur yang sudah ada
      Menarik juga melihat orang lebih menaruh bobot pada yang mana.
    • Bagi sebagian orang, “layer pemolesan” itu bisa jadi berarti usability (ergonomics) bagi orang lain.