- Node.js को TypeScript फ़ाइलें सीधे चलाने के लिए बेहतर बनाया गया है
- अब अतिरिक्त सेटअप या ट्रांसपाइलिंग के बिना
.tsफ़ाइलें सीधे चलाई जा सकती हैं - डेवलपर्स अब tsconfig.json या अलग bundler इंस्टॉल किए बिना काम की दक्षता बढ़ा सकते हैं
- यह फीचर Node.js v22.18.0 (LTS) संस्करण से आधिकारिक रूप से शामिल किया गया है
- इससे JavaScript और TypeScript डेवलपमेंट के बीच की सीमा और कम होने की उम्मीद है
Node.js में TypeScript को सीधे चलाने का समर्थन
- Node.js ने हाल ही में v22.18.0 (LTS) संस्करण में TypeScript फ़ाइलों (.ts) को बिना अलग सेटअप या टूल के सीधे चलाने की सुविधा जोड़ी है
- पहले TypeScript कोड चलाने के लिए ts-node, esbuild, Babel जैसे बाहरी transpiler या bundler की ज़रूरत होती थी, लेकिन अब Node.js खुद TypeScript कोड को पहचानकर चला सकता है
- इस फीचर की मदद से डेवलपर्स tsconfig.json configuration फ़ाइल या अतिरिक्त लाइब्रेरी के बिना
.tsफ़ाइलों को सीधे Node.js में चला सकते हैं - prototyping, experimental development और script execution जैसे कामों में productivity और डेवलपमेंट की सुविधा काफ़ी बढ़ेगी
- JavaScript और TypeScript प्रोजेक्ट्स के बीच इंटरऑपरेबिलिटी मज़बूत होने और नए डेवलपर्स के लिए प्रवेश बाधा कम होने की उम्मीद है
अन्य उल्लेखनीय बदलाव
- esm:
import.meta.mainलागू किया गया - fs: AsyncIterator आधारित fs event handling में सुधार
- permission: child process चलाते समय permission model flag पास करने का समर्थन
- sqlite:
readBigIntsविकल्प जोड़ा गया - src/permission:
permission.has(addon)का समर्थन - url:
fileURLToPathBufferAPI जोड़ी गई - watch:
--watch-kill-signalflag जोड़ा गया - worker:
Workerऑब्जेक्ट को async disposable के रूप में बेहतर बनाया गया
कमिट और दस्तावेज़ से जुड़े अपडेट
- अनावश्यक कोड हटाना, build environment और toolchain की सफ़ाई, तथा npm 10.9.3 upgrade शामिल
globals.md,child_process.md,http2आदि दस्तावेज़ों में stability indicators और RFC numbers के विवरण सुधारे गए- कई नए tests जोड़े गए और bug fixes शामिल किए गए
वितरण फ़ाइलें
- Windows, macOS(Intel/Apple Silicon), Linux(x64, ARM, PPC, s390x, AIX) के लिए installer और binaries उपलब्ध
- source code और पूरी release files को Node.js के आधिकारिक distribution page से डाउनलोड किया जा सकता है
- API documentation को v22.18.0 के अनुसार अपडेट किया गया है
7 टिप्पणियां
वाह, मन को सच में राहत मिली... उम्मीद है यह जल्दी से अच्छी तरह अपनाया जाएगा
सरल स्क्रिप्ट चलाने के लिए यह ठीक लग सकता है, लेकिन लाइव प्रोजेक्ट्स में इसकी कई सीमाएँ हैं, इसलिए इसका इस्तेमाल करने की नौबत शायद कम ही आएगी.
ERR_MODULE_NOT_FOUND/ERR_UNSUPPORTED_DIR_IMPORT त्रुटियों की वजह से extension और path भी ठीक से मिलाने पड़ते हैं,
और NestJS जैसे cases में, जहाँ
"emitDecoratorMetadata"सेटिंग के साथ TypeScript build support चाहिए, ऐसी सुविधाएँ इस्तेमाल नहीं की जा सकतीं, तो...क्या
--experimental-strip-typesडिफ़ॉल्ट रूप से लागू होगा?वैसे भी मैं
enumइस्तेमाल नहीं करता, इसलिए मेरे हिसाब से सिर्फ type removal वाला व्यवहार ही इसे अच्छी तरह चलाने के लिए काफी था।यह बहुत सुविधाजनक हो जाएगा!
लाइक दबाने से खुद को रोक नहीं पा रहा हूँ।
मुझे लगा था कि
--no-experimental-strip-typesफ्लैग के साथ भी यह काफी अच्छा है।लेकिन यह उससे भी बेहतर लग रहा है.
Hacker News की राय
node:testके साथ Node.js में अब मुझे लगता है कि ज़्यादातर मामलों में Node.js लगभग एक भरोसेमंद default विकल्प बन गया है।tsxके साथ चलाना जीवन को काफी आसान बनाता था, लेकिन वह भी पूरी तरह पर्याप्त नहीं था।zod,ts-rest, औरtrpcजैसे tools edge पर runtime type assertions की समस्या को काफी हद तक हल कर रहे हैं, और आजकल full-stack Typescript development सच में बहुत आसान हो गया है.tsfiles को सीधे चला सकता है, और इसमें एक अच्छा built-in test runner भी है (--watchsupport के साथ)। built-in packages भी बेहतर हो रहे हैं।node:fs/promisesजैसे मामलों में, top-level await की वजह से async loop काम भी काफी आसान हो गया है। सबको इसे व्यावहारिक रूप से अपनाने के लिए मनाने में बहुत समय लगा, लेकिन अब माहौल सच में काफी सुखद हो गया हैvitestआजकल बहुत चीज़ें आसान बना देता है, लेकिन.tsfile test environment सेट करने में मैंने वाकई बहुत समय गंवाया है।trpcऔरts-restपूरी तरह अलग समस्याएं हल करते हैं। दोनों इस्तेमाल किए जा सकते हैं, लेकिन production में मैंtrpcसे बचता हूं क्योंकि उसके मामले में API URL पर मेरा सीधा नियंत्रण नहीं होता, और पुराने URLs को स्वाभाविक तरीके से manage और deprecate करना मुश्किल होता है।ts-restमें भी मैं आम तौर परzodऔर types साझा करके API request/response pairs को खुद manage करना पसंद करता हूं। औरtrpcसाफ़ तौर पर एक RPC tool है, इसलिए उसके नाम में-restदेखना हर बार खटकता हैtsxभी चलाता है। types हटाने के बाद भी JSX को JavaScript में बदलना पड़ता है, इसलिए वही हिस्सा जानने की जिज्ञासा है.mjshack अभी भी चाहिए या नहीं)। मैं कुछ समय से ecosystem से दूर हूं, इसलिए उसके बाद क्या बदला यह जानना चाहता हूंnode 20version ही इस्तेमाल कर रहे हैंnode_modulesमें स्वीकार नहीं किया जाता (संबंधित: node.js आधिकारिक दस्तावेज़). तो फिर project dependencies का क्या होगा, यह जानने की जिज्ञासा है। मैंने data model के लिए एक library Typescript में लिखी है, और मैं उसे अपनी app में Typescript के रूप में import करना चाहता हूं। जानना चाहता हूं कि यह नियम सिर्फ npm packages पर लागू होता है या सभी dependencies पर। यहां एक अवसर है। मैंने typescript (असल में पूरे JS) execution के लिए एक golang-based runtime बनाया है, और Grafana team द्वारा इस्तेमाल किया जाने वालाsobekभी शायद type strip functionality जोड़ने भर से काम चला ले। अगर एक भी runtime ऐसा आ जाए जो पूरी तरह Typescript को default के रूप में अपनाए, तो मुझे लगेगा कि Node.js में सचमुच एक क्रांति आ जाएगी। transpiler की ज़रूरत नहीं,typescript-goकी ज़रूरत नहीं,rustकी भी ज़रूरत नहीं (हालांकिrustथोड़ा-सा 😉), बस एक अच्छा parser और ऐसा system काफ़ी होगा जो debugging mode में source maps और types को track कर सके। खैर, Node team और सभी contributors को सम्मान और धन्यवाद। standard के रूप में Node होने की वजह से लगता है कि हम सब उसी के पीछे-पीछे चल रहे हैं। embedding API भी सरल है और usability भी साफ़-सुथरी है, इसलिए standalone बनाते समय भी सुविधाजनक है"private"field की परवाह भी नहीं करताnode_modulesमें type strip support नहीं हैnapifunctions implement नहीं थे, इसलिए वे नहीं चले, औरopendiroptions मेंrecursiveignore होने जैसी समस्याएं भी थीं। मैं Bun के catch-up का इंतज़ार कर रहा हूं, लेकिन अभी तक यह बड़े projects में production use के लिए तैयार नहीं लगता। Bun-specific features पहली नज़र में अच्छे लगते हैं, लेकिन व्यवहार में कमज़ोर महसूस होते हैं। documentation भी Node.js जितनी उच्च गुणवत्ता की नहीं हैlocalAddressignore हो जाता हैEventEmitterसे जुड़ी race problems (आंशिक समाधान:eventemitter2के साथ)vitesdev server कभी-कभी अटक जाता था, और फिरnode_modulesहटाकर दोबारा install करना पड़ता थामैंने Node की अपनी TS और test runner features इस्तेमाल की हैं, लेकिन वे अभी Bun जितनी अच्छी नहीं हैं। फिलहाल ऐसे features के लिए मैं Bun ही इस्तेमाल कर रहा हूं। Node ecosystem में मैंने सीखा है कि एक ही चीज़ पर all-in जाने के बजाय, अलग-अलग tools को उनकी specialization के हिसाब से मिलाकर इस्तेमाल करना बेहतर होता है।
Bun.js: Node runtime के लिए, TS execution और testing में उपयोग।TSX,TS-Node, Node खुद आदि कई विकल्प आज़मा चुका हूंNPM: tooling scripts चलाने के लिए उपयोगPNPM: dependencies install करने के लिए उपयोग। (npm,yarn,bunकी तुलना में सबसे बेहतर लगता है)Biome.js: linting के लिए। अब तक इस्तेमाल किए गए किसी भी linting tool से बेहतरimport { stripTypeScriptTypes } from 'node:module') भी expose की गई है। frontend dependencies के बिना simple webapp बनाते समय, पूरी app को typescript में बनाया जा सकता है और frontend scripts serve करते समय सिर्फ types हटा दिए जाएं (उदाहरण project)tscजैसे typechecker के ज़रिए static checking होती है, और type information हट जाती है। Python भी runtime पर type annotations को ignore करता है, और Java में भी bytecode में कुछ type information जैसे generics आदि हट जाते हैंtscचला लेना मेरे लिए ठीक बैठता हैtsxका इस्तेमाल करके ऐसा ही setup चला रहे हैं, जहां build/transpile के बिना execution हो जाता है। development के दौरान यह बहुत उपयोगी है।tsxके--watchकी मदद से TS source से सीधे server चलाते हैं, और बदलाव होने पर वह अपने-आप restart हो जाता है। आगे चलकर शायदnodemonऔर Node की built-in features से ऐसा ही माहौल बनाया जा सके। अगर runtime में typechecking तक करनी हो, तो v8 level पर support चाहिए होगा, और यह लगभग पूरे rewrite जितना बड़ा काम होगाenumके अलावा वास्तव में इस्तेमाल होने वाले कौन-से cases हैं?