- Node.js, TypeScript dosyalarını doğrudan çalıştırabilecek şekilde geliştirildi
- Artık ek yapılandırma ya da transpile işlemi olmadan
.tsdosyaları doğrudan çalıştırılabiliyor - Geliştiriciler, tsconfig.json veya ayrı bir bundler kurmadan çalışma verimliliğini artırabiliyor
- Bu özellik, Node.js v22.18.0 (LTS) sürümünden itibaren resmen eklendi
- JavaScript ve TypeScript geliştirme arasındaki sınırların yumuşaması bekleniyor
Node.js'te TypeScript'i doğrudan çalıştırma desteği
- Node.js, yakın zamanda yayımlanan v22.18.0 (LTS) sürümünde, TypeScript dosyalarını (.ts) ayrı bir yapılandırma veya araç olmadan doğrudan çalıştırabilen bir özellik sundu
- Daha önce TypeScript kodunu çalıştırmak için ts-node, esbuild, Babel gibi harici transpiler'lar veya bundler'lar gerekiyordu; artık bu araçlar olmadan da Node.js kendi içinde TypeScript kodunu tanıyıp çalıştırabiliyor
- Bu özellikle birlikte geliştiriciler, tsconfig.json yapılandırma dosyası veya ek kütüphaneler olmadan
.tsdosyalarını doğrudan Node.js üzerinde çalıştırabiliyor - Prototipleme, deneysel geliştirme ve script çalıştırma gibi alanlarda üretkenlik ve geliştirme kolaylığı önemli ölçüde artıyor
- JavaScript ve TypeScript projeleri arasındaki birlikte çalışabilirliğin güçlenmesi ve yeni geliştiriciler için giriş engelinin azalması bekleniyor
Diğer dikkat çekici değişiklikler
- esm:
import.meta.mainuygulandı - fs: AsyncIterator tabanlı fs olay işleme geliştirildi
- permission: Alt süreç çalıştırılırken izin modeli bayrağının aktarımı destekleniyor
- sqlite:
readBigIntsseçeneği eklendi - src/permission:
permission.has(addon)desteği eklendi - url:
fileURLToPathBufferAPI'si eklendi - watch:
--watch-kill-signalbayrağı eklendi - worker:
Workernesnesi async disposable olacak şekilde geliştirildi
Commit ve dokümantasyonla ilgili güncellemeler
- Gereksiz kodların kaldırılması, build ortamı ve araç zincirinin düzenlenmesi, ayrıca npm 10.9.3 yükseltmesi dahil
globals.md,child_process.md,http2gibi dokümanlarda ayrıntılı kararlılık göstergeleri ve RFC numaraları düzeltildi- Çok sayıda test eklendi ve hata düzeltmeleri yansıtıldı
Dağıtım dosyaları
- Windows, macOS (Intel/Apple Silicon) ve Linux (x64, ARM, PPC, s390x, AIX) için kurulum dosyaları ve ikili dosyalar sağlanıyor
- Kaynak kodu ve tüm sürüm dosyaları Node.js'in resmi dağıtım sayfasından indirilebiliyor
- API dokümantasyonu v22.18.0 temel alınarak güncellendi
7 yorum
İçim gerçekten ferahladı... umarım kısa sürede yaygınlaşır
Basit script’leri çalıştırmak için fena değil gibi görünüyor ama canlı projelerde kısıtları çok olduğu için pek kullanılacakmış gibi görünmüyor.
ERR_MODULE_NOT_FOUND/ERR_UNSUPPORTED_DIR_IMPORThataları yüzünden uzantıları ve yolları da doğru ayarlamak gerekiyorNestJS gibi
emitDecoratorMetadataayarıyla TypeScript build desteği gereken özellikler de kullanılamıyor, o yüzden...--experimental-strip-typesvarsayılan olarak mı etkinleşiyor?Zaten
enumkullanmadığım için, benim ölçütlerime göre yalnızca tip kaldırma davranışıyla bile gayet iyi çalışıyordu.Çok daha kullanışlı olacak gibi görünüyor!
Beğenimi tutamıyorum.
--no-experimental-strip-typesbayrağının bile fazlasıyla iyi olduğunu düşünmüştüm.Üstelik bu daha da iyi görünüyor.
Hacker News görüşleri
node:testile birlikte artık çoğu durumda Node.js'in ikna edici varsayılan seçenek olduğunu düşünüyorum.tsxkullanarak çalıştırmak yaşam kalitesini ciddi biçimde artırmıştı, ama yine de tam değildi.zod,ts-restvetrpcgibi araçlarla edge tarafındaki çalışma zamanı tip doğrulaması büyük ölçüde çözülüyor ve bugünlerde full-stack TypeScript geliştirmek gerçekten çok kolaylaştı.tsdosyalarını doğrudan çalıştırabiliyor ve iyi seviyede yerleşik bir test runner sunuyor (--watchdestekli). Yerleşik paketler de daha iyi hale geliyor.node:fs/promisesgibi şeyler ve top-level await sayesinde asenkron döngü işleri çok daha kolaylaştı. Herkesi buna gerçekçi bir seçenek olduğuna ikna etmek uzun sürdü ama artık gerçekten keyifli bir noktadayızvitestbugünlerde pek çok şeyi rahatlatıyor ama.tsdosyaları için test ortamı yapılandırmaya gerçekten çok zaman harcamıştım.trpcvets-rest'in ise tamamen farklı bir sorun olduğunu düşünüyorum. İkisi de kullanılabilir ama production'datrpc'den kaçınıyorum; çünkü API URL'lerini doğrudan sahiplenemiyorum, eski URL'leri doğal biçimde yönetip aşamalı olarak kaldıramıyorum.ts-restiçin de geneldezodve tipleri doğrudan paylaşıp API istek/yanıt çiftlerini kendim yönetmeyi tercih ediyorum. Bir detrpcbariz şekilde bir RPC aracı iken adında-restgeçmesi her seferinde rahatsız ediyortsxçalıştırmak anlamına gelip gelmediğini merak ediyorum. Tipleri çıkarsanız bile JSX'i JavaScript'e dönüştürmeniz gerekiyor; benim merak ettiğim kısım da budenovebun'ın Node'u dürtüp odaklı ve anlamlı iyileştirmeler yapmaya zorlaması güzel oldu. Bir süre duraklamıştı.mjshilesine hâlâ ihtiyaç var mı bilmiyorum). Bir süredir ekosistemden uzaktım; o zamandan beri nelerin değiştiğini öğrenmek isterimdenoya dabunolmasa da gayet olurdu. Fiilen anlamlı olan şeynodeLTS sürümleri ve yeni projeler bile hâlânode 20kullanıyornode_modulesiçinde kabul edilmemesi üzücü (ilgili: node.js resmi belgeleri). Peki o zaman proje bağımlılıkları nasıl olacak merak ediyorum. Veri modeli için bir kütüphaneyi TypeScript ile yazdım ve bunu uygulamama TypeScript haliyle import etmek istiyorum. Bu kuralın yalnızca npm paketleri için mi, yoksa tüm bağımlılıklar için mi geçerli olduğunu merak ediyorum. Burada bir fırsat var. Ben JavaScript/TypeScript (daha doğrusu genel olarak JS) çalıştırmak için Go tabanlı bir runtime yaptım ve Grafana ekibinin kullandığısobekde yalnızca tip soyma özelliği eklenirse yeterli gibi görünüyor. TypeScript'i varsayılan olarak tamamen benimseyen tek bir runtime ortaya çıksa Node.js'in gerçekten devrim niteliğinde olacağını düşünüyorum. Ne transpiler'a, netypescript-go'ya, ne de Rust'a ihtiyaç var (gerçi Rust biraz olur😉); debug modunda source map ve tipleri izleyen iyi bir parser'a sahip bir sistem yeterli olur. Her hâlükârda Node ekibine ve tüm katkıda bulunanlara takdir ve teşekkürler. Standart olanın Node olması nedeniyle hepimiz onun ardından gidiyormuşuz gibi geliyor. Embedding API'si de basit ve kullanımı temiz; standalone üretirken de kullanışlıprivatealanını hiç umursamıyornode_modulesiçinde tip soyma desteği olmaması bence üzücünapifonksiyonları implemente edilmediği için çalışmıyordu;opendirseçeneklerinderecursive'in yok sayılması gibi aklımda kalan sorunlar da vardı. Bun'ın yetişmesini bekliyorum ama henüz büyük projelerde profesyonel kullanım için hazır görünmüyor. Bun'a özel özellikler de ilk bakışta hoş dursa da pratikte yetersiz geliyor. Belgeleri de Node.js kadar kaliteli değillocalAddressyok sayılıyorEventEmitterile ilgili race sorunları (kısmi çözüm: eventemitter2)vitesdev sunucusu bazen takılıyor venode_modulessilinip yeniden kurulmak zorunda kalıyorduNode'un kendi TS ve test runner özelliklerini denedim ama hâlâ Bun kadar iyi değiller. Şimdilik bu tür işler için Bun kullanıyorum. Node ekosisteminde tek bir şeye tamamen yüklenmektense, farklı araçları uzman oldukları alanlarda birlikte kullanmanın daha iyi olduğunu öğrendim.
Bun.js: Node runtime'ı için, TS çalıştırma ve testlerde kullanıyorum.TSX,TS-Node, Node'un kendisi gibi farklı seçenekleri de denedimNPM: tooling script'lerini çalıştırmak için kullanıyorumPNPM: bağımlılık kurmak için kullanıyorum. (npm,yarn,bunile karşılaştırınca en iyisi olduğunu düşünüyorum)Biome.js: linting için. Şimdiye kadar kullandığım tüm lint araçlarından daha iyiimport { stripTypeScriptTypes } from 'node:module') dışa açılmış durumda. Frontend bağımlılığı olmayan basit bir web uygulaması geliştirirken her şeyi TypeScript ile yazıp frontend script'lerini sunarken yalnızca tipleri çıkarmak mümkün (örnek proje)tscgibi tip denetleyicilerle statik kontrol yapılır ve tip bilgisi çıkarılır. Python da çalışma zamanında tip anotasyonlarını yok sayar; Java da bytecode'da bazı tip bilgilerini, örneğin generic'leri, silertscile çalıştırma modeli bana çok uyuyortsxkullanarak aynı şekilde build/transpile gerektirmeden çalışan bir kurulum kullanıyorum. Geliştirme sırasında çok faydalı oluyor.tsx'in--watchözelliği sayesinde TS kaynaklarından doğrudan sunucu çalıştırıyor ve değişiklikte otomatik yeniden başlatıyor. Yakındanodemonve Node'un yerleşik özellikleriyle benzer bir ortam kurulabilir gibi görünüyor. Runtime'da tip denetimi yapmak için bunun V8 seviyesinde desteklenmesi gerekir; bu da neredeyse baştan yazım ölçeğinde bir iş olurduenumdışında pratikte kullanılan başka ne var diye soruyorum