- Node.js ditingkatkan sehingga dapat menjalankan file TypeScript secara langsung
- Kini file
.tsdapat dijalankan langsung tanpa konfigurasi tambahan atau transpiling - Developer dapat meningkatkan efisiensi kerja tanpa tsconfig.json atau pemasangan bundler terpisah
- Fitur ini resmi diterapkan mulai Node.js v22.18.0 (LTS)
- Diharapkan menghasilkan batas yang makin kabur antara pengembangan JavaScript dan TypeScript
Dukungan eksekusi TypeScript langsung di Node.js
- Node.js baru-baru ini memperkenalkan fitur untuk langsung menjalankan file TypeScript (.ts) pada versi v22.18.0 (LTS), tanpa konfigurasi atau alat terpisah
- Sebelumnya, untuk menjalankan kode TypeScript diperlukan transpiler eksternal atau bundler seperti ts-node, esbuild, dan Babel, tetapi kini Node.js sendiri dapat mengenali dan menjalankan kode TypeScript tanpa alat-alat tersebut
- Melalui fitur ini, developer kini dapat langsung menjalankan file
.tsdi Node.js tanpa file konfigurasi tsconfig.json maupun library tambahan - Produktivitas dan kemudahan pengembangan meningkat besar untuk prototyping, pengembangan eksperimental, dan eksekusi skrip
- Diharapkan ada penguatan keterhubungan antara proyek JavaScript dan TypeScript, serta penurunan hambatan masuk bagi developer baru
Perubahan penting lainnya
- esm: implementasi
import.meta.main - fs: peningkatan penanganan event fs berbasis AsyncIterator
- permission: dukungan pengiriman flag model izin saat menjalankan subproses
- sqlite: penambahan opsi
readBigInts - src/permission: dukungan
permission.has(addon) - url: penambahan API
fileURLToPathBuffer - watch: penambahan flag
--watch-kill-signal - worker: objek
Workerditingkatkan menjadi async disposable
Pembaruan terkait commit dan dokumentasi
- Termasuk penghapusan kode yang tidak perlu, perapihan lingkungan build dan toolchain, serta upgrade ke npm 10.9.3
- Perbaikan indikator stabilitas terperinci dan nomor RFC pada dokumentasi seperti
globals.md,child_process.md, danhttp2 - Banyak penambahan test dan perbaikan bug juga telah diterapkan
File distribusi
- Tersedia installer dan biner untuk Windows, macOS (Intel/Apple Silicon), dan Linux (x64, ARM, PPC, s390x, AIX)
- Kode sumber dan file rilis lengkap dapat diunduh dari halaman distribusi resmi Node.js
- Dokumentasi API telah diperbarui berdasarkan v22.18.0
7 komentar
Wah, rasanya lega banget... semoga cepat jadi standar.
Sepertinya cukup oke untuk menjalankan skrip sederhana, tetapi untuk proyek nyata ada banyak keterbatasan jadi rasanya tidak akan terlalu sering dipakai.
Karena ada error
ERR_MODULE_NOT_FOUND/ERR_UNSUPPORTED_DIR_IMPORT, ekstensi maupun path juga harus disesuaikan.Fitur seperti NestJS yang membutuhkan dukungan build TypeScript dengan pengaturan
"emitDecoratorMetadata"juga tidak bisa digunakan, jadi...Apakah
--experimental-strip-typesditerapkan secara default?Lagipula saya memang tidak memakai
enum, jadi menurut saya pribadi, hanya dengan perilaku penghapusan tipe saja pun sudah berjalan dengan cukup baik.Ini akan jadi sangat praktis!
Tidak bisa menahan buat kasih jempol.
Saya sudah merasa
--no-experimental-strip-typessaja sudah cukup bagus.Bahkan sepertinya ini lebih bagus lagi.
Komentar Hacker News
node:testdi Node.js, menurut saya sekarang Node.js sudah menjadi pilihan default yang meyakinkan untuk hampir semua kasus. Menjalankan lewattsxdulu memang sangat meningkatkan kualitas hidup, tapi tetap belum sepenuhnya lengkap. Penegasan tipe saat runtime di edge kini banyak terbantu oleh alat seperti zod, ts-rest, dan trpc, dan belakangan ini pengembangan full-stack Typescript benar-benar jadi sangat mudah.ts, dan ada test runner bawaan yang cukup bagus (--watchdidukung). Paket bawaannya juga makin baik. Misalnyanode:fs/promises, berkat top-level await pekerjaan loop asinkron juga jadi jauh lebih mudah. Butuh waktu lama untuk meyakinkan semua orang agar mau memakai pendekatan yang realistis, tapi sekarang situasinya benar-benar nyaman.ts. Saya rasa trpc dan ts-rest adalah masalah yang sama sekali berbeda. Keduanya bisa dipakai, tetapi di production saya menghindari trpc karena saya tidak bisa benar-benar memiliki URL API saya sendiri, dan tidak bisa mengelola serta menghentikan URL lama secara alami. Untuk ts-rest juga, biasanya saya lebih suka berbagi zod dan tipe secara langsung untuk mengelola sendiri pasangan request/response API. Dan setiap kali trpc yang jelas-jelas alat RPC punya akhiran-restdi namanya, itu terasa mengganggutsx. Walaupun tipenya dihapus, JSX tetap harus diubah menjadi JavaScript, jadi saya penasaran soal bagian itu.mjsmasih diperlukan). Saya agak lama jauh dari ekosistem ini, jadi ingin tahu apa yang berubah setelah itunode_modules(terkait: dokumentasi resmi node.js). Lalu saya penasaran bagaimana dengan dependensi proyek. Saya menulis library model data dalam Typescript, dan ingin mengimpornya ke aplikasi saya dalam bentuk Typescript. Saya penasaran apakah aturan ini hanya berlaku untuk paket npm, atau untuk semua dependensi. Di sini ada peluang. Saya membuat runtime berbasis golang untuk menjalankan typescript (tepatnya eksekusi JS secara umum), dan sepertinya sobek yang dipakai tim grafana juga hanya perlu menambah fitur type stripping. Kalau ada satu saja runtime yang benar-benar mengadopsi Typescript sebagai bawaan, rasanya Node.js akan benar-benar terdorong berinovasi. Tidak perlu transpiler, tidak perlu typescript-go, tidak perlu rust (meski rust tetap agak 😉), cukup sistem dengan parser yang baik yang bisa melacak source map dan tipe dalam mode debug. Bagaimanapun, apresiasi dan terima kasih untuk tim Node dan semua kontributor. Karena Node menjadi standar, rasanya kita semua mengikuti jejak itu. API embedding-nya juga sederhana dan rapi dipakai, jadi nyaman untuk membuat executable mandiri"private"itu sendirinode_modulesrecursiveyang diabaikan padaopendir. Saya menunggu Bun mengejar ketertinggalan, tetapi sampai sekarang rasanya belum siap dipakai secara nyata di proyek besar. Fitur khusus bun juga terlihat bagus pada kesan pertama, tetapi di praktik terasa kurang matang. Dokumentasinya juga belum sebaik Node.jslocalAddressdiabaikan pada koneksi TCPnode_moduleslalu memasang ulangSaya sudah mencoba fitur TS dan test runner bawaan Node, tapi masih belum sebagus Bun. Untuk sementara, kalau butuh fitur seperti itu saya masih memakai Bun. Di ekosistem Node, saya belajar bahwa lebih baik tidak all-in pada satu hal saja, melainkan menggabungkan alat yang masing-masing unggul di bidangnya.
Bun.js: untuk runtime Node, dipakai untuk menjalankan TS dan testing. Saya sudah mencoba bermacam-macam seperti TSX, TS-Node, dan Node bawaan
NPM: dipakai untuk menjalankan skrip tooling
PNPM: dipakai untuk memasang dependensi. (Menurut saya paling unggul dibanding npm, yarn, bun)
Biome.js: untuk linting. Lebih baik daripada alat linting mana pun yang pernah saya pakai
import { stripTypeScriptTypes } from 'node:module') juga diekspos. Saat mengembangkan webapp sederhana tanpa dependensi frontend, kita bisa membuat semuanya dalam typescript lalu saat menyajikan skrip frontend cukup buang tipenya saja (contoh proyek)tsc, lalu informasi tipe dihapus. Python juga mengabaikan anotasi tipe saat runtime, dan Java pun memiliki sifat bahwa sebagian informasi tipe seperti generic dihapus dari bytecodetsccocok untuk sayatsx, jadi sama-sama bisa dijalankan tanpa perlu build/transpile. Saat development itu sangat berguna. Berkat--watchditsx, saya bisa menjalankan server langsung dari source TS dan otomatis restart saat ada perubahan. Ke depan sepertinya lingkungan serupa bisa dibuat hanya dengan nodemon dan fitur bawaan Node. Kalau mau type-checking di runtime, dukungannya harus ada di level v8, dan itu nyaris pekerjaan setara menulis ulang semuanyaenum, contoh yang benar-benar dipakai apa lagi?