फ़ाइलों में बदलाव होने पर ts-node को कैसे रीलोड करें: वास्तविक समस्याओं का विश्लेषण
\n\nकल्पना करें: आप TypeScript पर एक सर्वर लिख रहे हैं, ts-node चलाते हैं, एक बदलाव करते हैं — और कुछ नहीं होता। आपको मैन्युअल रूप से प्रक्रिया को रोकना होता है, Ctrl+C दबाना होता है, फिर से चलाना होता है। परिचित लगता है? इस समस्या ने Stack Overflow पर हज़ारों व्यूज़ जुटाए हैं, और यह उचित भी है: ts-node के लिए watch और reload सेट करना एक बड़ी पहेली है।
इस लेख में मैं केवल एक तैयार नुस्खा नहीं दूँगा। हम टॉप त्रुटियों का विश्लेषण करेंगे, जो अनुभवी डेवलपर्स भी करते हैं, और मैं दिखाऊँगा कि उनसे कैसे बचा जाए। आप जानेंगे कि ts-node --watch "आउट ऑफ़ द बॉक्स" क्यों काम नहीं करता, ts-node-dev क्लासिकल दृष्टिकोण से बेहतर क्यों है, और प्रक्रिया में सर्वर के प्रदर्शन को कैसे खराब न करें।
ts-node अपने आप रीलोड क्यों नहीं होता?
\n\nचलिए तुरंत स्पष्ट करते हैं। ts-node कोई dev-सर्वर नहीं है। यह TypeScript का JavaScript में ट्रांसपाइलर है, जो Node.js रनटाइम में कोड चलाता है। इसके पास फ़ाइलों में बदलावों को ट्रैक करने (file watcher) का कोई अंतर्निहित तंत्र नहीं है। जब आप ts-node app.ts लिखते हैं, तो यह केवल फ़ाइल को निष्पादित करता है और काम समाप्त कर देता है।
फ़ाइलों में बदलाव पर ऑटोमैटिक रीलोड पाने के लिए, आपको बाहरी टूल्स का उपयोग करना होगा। और यहीं से मज़ा शुरू होता है।
\n\nts-node के लिए watch और reload सेट करने में टॉप-5 त्रुटियाँ
\n\nमैंने सबसे आम समस्याओं को एकत्र किया है, जिनमें डेवलपर्स फँसते हैं। प्रत्येक को उदाहरणों और समाधानों के साथ देखते हैं।
\n\nत्रुटि #1: सही टूल के बिना --watch फ़्लैग का उपयोग करना
\n\nकई लोग टर्मिनल में लिखते हैं:
\n\nts-node --watch app.ts\n\nऔर आश्चर्यचकित होते हैं कि कुछ काम नहीं करता। बात यह है कि ts-node के पास मानक पैकेज में --watch फ़्लैग नहीं है। यह कमांड केवल अनदेखा की जाती है या त्रुटि देती है।
समाधान: ts-node के साथ nodemon का उपयोग करें। यहाँ सही कमांड है:
npx nodemon --exec ts-node app.ts\n\nया, यदि आप इसे package.json में सहेजना चाहते हैं:
{\n "scripts": {\n "dev": "nodemon --exec ts-node src/index.ts"\n }\n}\n\nयह nodemon को फ़ाइलों में बदलावों पर नज़र रखने और प्रत्येक सेव पर ts-node को पुनरारंभ करने के लिए मजबूर करेगा।
\n\nत्रुटि #2: nodemon .ts फ़ाइलों में बदलाव नहीं देखता
\n\nआपने nodemon सेट किया, फ़ाइल सहेजते हैं, और वह चुप रहता है। क्यों? डिफ़ॉल्ट रूप से, nodemon केवल .js, .json और कुछ अन्य एक्सटेंशन पर नज़र रखता है। .ts सूची में नहीं है।
समाधान: एक्सटेंशन स्पष्ट रूप से निर्दिष्ट करें:
\n\nnodemon --watch src --ext ts --exec ts-node src/index.ts\n\nफ़्लैग --watch src ट्रैकिंग क्षेत्र को src फ़ोल्डर तक सीमित करता है (ताकि node_modules पर नज़र न रखे)। और --ext ts TypeScript फ़ाइलों को ट्रैक किए जाने वाले एक्सटेंशन की सूची में जोड़ता है।
आप nodemon.json भी बना सकते हैं:
{\n "watch": ["src"],\n "ext": "ts",\n "exec": "ts-node src/index.ts"\n}\n\nत्रुटि #3: tsconfig.json के साथ विरोध — गलत module resolution
\n\nएक सामान्य स्थिति: आप nodemon के साथ ts-node का उपयोग करते हैं, लेकिन चलाने पर Cannot find module या Unknown file extension ".ts" जैसी त्रुटियाँ मिलती हैं। अक्सर समस्या tsconfig.json की सेटिंग्स में होती है।
समस्याग्रस्त tsconfig.json का उदाहरण:
\n\n{\n "compilerOptions": {\n "module": "ESNext",\n "moduleResolution": "bundler",\n "target": "ES2020"\n }\n}\n\nसमस्या: ts-node Node.js वातावरण में काम करता है, जबकि module: "ESNext" और moduleResolution: "bundler" Webpa जैसे बंडलर्स के लिए डिज़ाइन किए गए हैं।