टाइपस्क्रिप्ट फ़ाइलें बदलने पर ts-नोड को कैसे देखें और पुनः लोड करें


190

मैं टाइपस्क्रिप्ट के साथ एक देव सर्वर चलाने की कोशिश कर रहा हूं और हर बार ts फ़ाइलों को ट्रांसप्लिंग किए बिना एक कोणीय अनुप्रयोग। मैंने पाया कि मैं रनिंग कर सकता हूं ts-nodeलेकिन मैं चाहता हूं कि मैं भी .tsफाइलें देखूं और ऐप / सर्वर को फिर से लोड करूं क्योंकि मैं कुछ घड़ी के साथ ऐसा करूंगा।

जवाबों:


401

मैं अपने विकास के माहौल के लिए एक ही चीज़ से जूझ रहा था जब तक कि मैंने यह नहीं देखा कि nodemonएपीआई हमें एक कस्टम कमांड निष्पादित करने के लिए अपने डिफ़ॉल्ट व्यवहार को बदलने की अनुमति देता है। उदाहरण के लिए:

nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts

या इससे भी बेहतर: nodemon.jsonनिम्न सामग्री के साथ एक फ़ाइल के लिए नोडमॉन के कॉन्फ़िगरेशन को बाहरी करें , और फिर बस चलाएं nodemon, जैसा कि सैंडोकन ने सुझाव दिया है:

{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./index.ts" }

ऐसा करने के आधार पर, आप ts-nodeअंतर्निहित कार्यान्वयन के बारे में चिंता किए बिना एक प्रक्रिया को फिर से लोड करने में सक्षम होंगे ।

चीयर्स!

नोडमॉन के सबसे हाल के संस्करण के लिए अपडेट किया गया:

nodemon.jsonनिम्नलिखित सामग्री के साथ एक फ़ाइल बनाएँ ।

{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./src/index.ts"      // or "npx ts-node src/index.ts"
}

अगर index.tsएक एक्सप्रेस उदाहरण है, तो मैं इसे कैसे मार सकता हूं और पुनः आरंभ कर सकता हूं
hjl

सिद्धांत में @elaijuh यही कमांड चाल करना चाहिए, जब नोड नोड को कस्टम कमांड को निष्पादित करने के लिए कॉन्फ़िगर किया गया है (इस मामले में ts-node) डिफ़ॉल्ट नोड कमांड के बजाय, यह प्रक्रिया को बंद कर देगा और हर बार एक नया शुरू करेगा वॉच एक्सप्रेशन पर एक बदलाव पाता है जो
इग्नोर करता है

15
आप इस तरह से सभी उल्लिखित विकल्पों के साथ एक nodemon.json फ़ाइल भी बना सकते हैं: { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" }और सिर्फ टाइप करेंnodemon
Sandokan El Cojo

3
मैंने ./फ़ोल्डर नामों से पहले जोड़ने की गलती की और यह टूट गया। यह मेरे लिए काम किया { "verbose": true, "watch": ["server/**/*.ts"], "ext": "ts js json", "ignore": ["server/**/*.spec.ts"], "exec": "ts-node index.ts" }:। और कमांड लाइन:nodemon --watch server/**/*.ts --ignore server/**/*.spec.ts --verbose --exec ts-node index.ts
एड्रियन मोइसा

2
मैं सिर्फ उल्लेख करना चाहूंगा, कि आपको extकॉन्फिग फाइल में भी सेट करना है, इसलिए ts के लिए इसका लुक बदल जाता है। मेरी विन्यास फाइल इस तरह दिखती है:{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "ext": "ts js json", "_exec": "node dist/startup.js", "exec": "ts-node src/startup.ts" }
लास डी। स्लॉट

114

मैंने डंप किया है nodemonऔर ts-nodeएक बेहतर विकल्प के पक्ष में, ts-node-dev https://github.com/whitecolor/ts-node-dev

बस दौडो ts-node-dev src/index.ts


6
और यह बेहतर क्यों है?
देिलन

22
यह तेज़ है, और स्वचालित रूप से पता लगाता है कि कौन सी फ़ाइलों को देखने की आवश्यकता है, कोई कॉन्फ़िगरेशन की आवश्यकता नहीं है।
मिकेल कूज़िक

4
टीएस-नोड के लिए यह सबसे अच्छा (यदि एकमात्र नहीं) विकल्प है, खासकर बड़ी परियोजनाओं के लिए। यह खरोंच से सभी फ़ाइलों को फिर से नहीं करता है, लेकिन एक वृद्धिशील संकलन करता है, जैसे tsc --watch
एंजेलोस पिकोलस

3
मेरे मामले में, इस सचमुच 10 बार की तुलना में तेजी nodemonसे ts-node। धन्यवाद!
फ्लोरियन

3
तो मैं सचमुच सिर्फ है "start": "ts-node-dev src"। इसके लिए आने वाले किसी भी प्रकार के बेबल, नोडमोन या किसी भी विन्यास की आवश्यकता नहीं है। आपके लिए सब कुछ संभाला जाता है।
Jadadelaine

52

यहाँ npm लिपियों का उपयोग करते हुए, हेबरलैज़ के उत्तर का विकल्प दिया गया है ।

मेरा package.json:

  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
  • -e ध्वज को देखने के लिए विलुप्त होने को सेट करता है,
  • -w देखा निर्देशिका सेट करता है,
  • -x स्क्रिप्ट निष्पादित करता है।

--inspectमें watch:serveस्क्रिप्ट वास्तव में एक Node.js झंडा है, यह सिर्फ प्रोटोकॉल डिबगिंग सक्षम बनाता है।


2
यह भी सुनिश्चित करें कि प्रोजेक्ट के लिए स्थानीय स्तर पर टाइपस्क्रिप्ट स्थापित हो। अन्यथा आपको मिलने वाली त्रुटि बहुत स्पष्ट नहीं है।
अरण्यर

मुझे लगता है कि यह इसts-node --inspect -- src/index.ts वजह से होना चाहिए ।
bluenote10

1
यह दृष्टिकोण काफी शानदार उत्पादन उत्पन्न करता है।
फ्रीवॉकर

-e ts -w ./srcमेरे लिए चाल - यह एक loopback4 सीएलआई उत्पन्न परियोजना के साथ काम किया
जोनाथन कार्डोज़

16

विशेष रूप से इस समस्या के लिए मैंने tsc-watchलाइब्रेरी बनाई है । आप इसे npm पर पा सकते हैं ।

स्पष्ट उपयोग मामला होगा:

tsc-watch server.ts --outDir ./dist --onSuccess "node ./dist/server.js"


यह एक्सप्रेस या koa सर्वर के मामले में कैसे काम करेगा क्योंकि यह वास्तव में पिछले नोड को नहीं मारता है?
ब्रायनस्टी

'tsc-watch' आपके लिए प्रक्रिया को मारता है और पुनः आरंभ करता है।
जिल्मरान

यही वह है जिसकी तलाश में मैं हूं। सुनिश्चित नहीं हैं कि ts-node-dev का उद्देश्य क्या है, लेकिन मैं टाइपस्क्रिप्ट त्रुटियों की रिपोर्ट करने के लिए इसे प्राप्त नहीं कर सका। काम करने की कोशिश में घंटों बिताने के बाद, मैंने tsc-watch की कोशिश की, और यह एक आकर्षण की तरह काम किया!
चार्ल्स नेकियो

@gilamran आपके पैकेज के प्रलेखन में एक टाइपो है: "[...] similar to nodemon but for TypeCcript.":)
मैसिमिलियानो क्रूस


12

यह मेरे लिए काम करता है:

nodemon src/index.ts

स्पष्ट रूप से इस पुल अनुरोध के बाद से धन्यवाद: https://github.com/remy/nodemon/pull/1552


यह मेरे लिए भी काम करता है लेकिन कैसे? तरह तरह के जादुई लगते हैं। टाइपस्क्रिप्ट संकलन क्या है? मैंने ts-nodeस्थापित नहीं किया है।
d512

1
@ d512 क्या आपको यकीन है कि यह आपके में नहीं है node_modules/? मेरे लिए यह विफल रहता है अगर मेरे पास नहीं है।
११:११

1
यह वास्तव में ts-nodeस्थापित करने की आवश्यकता है। बिना इस आदेश को चलाने के ts-nodeपरिणामस्वरूप failed to start process, "ts-node" exec not foundत्रुटि होगी। आप संभवतः में एक बचे हुए विरूपण साक्ष्य के रूप में यह किया था node_modules। यह कहा जा रहा है, यह समाधान बहुत अच्छा है क्योंकि इसे अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।
ब्रैंडन क्लैप

7

आप ts-node-dev का उपयोग कर सकते हैं

जब कोई भी आवश्यक फाइल बदलती है (मानक नोड-देव के रूप में) तो यह लक्ष्य नोड प्रक्रिया को पुनरारंभ करता है, लेकिन पुनरारंभ के बीच टाइपस्क्रिप्ट संकलन प्रक्रिया को साझा करता है।

इंस्टॉल

yarn add ts-node-dev --dev

और आपका पैकेज। इस तरह हो सकता है

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "tsc": "tsc",
  "dev": "ts-node-dev --respawn --transpileOnly ./src/index.ts",
  "prod": "tsc && node ./build/index.js"
}

धन्यवाद! यह मेरे नोड सर्वर के साथ ऑटो पुनः लोड करने में सक्षम करने का सबसे आसान तरीका था।
हिशम मुबारक


1

मैं ts-node का उपयोग नहीं करना चाहूंगा और हमेशा डिस्टर्ब फोल्डर से ही चलूंगा।

ऐसा करने के लिए, बस अपने पैकेज को सेट करें। डिफ़ॉल्ट कॉन्फिग के साथ जजोन:

....
"main": "dist/server.js",
  "scripts": {
    "build": "tsc",
    "prestart": "npm run build",
    "start": "node .",
    "dev": "nodemon"
  },
....

और फिर nodemon.json कॉन्फ़िग फ़ाइल जोड़ें :

{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "npm restart"
}

यहाँ, मैं "exec": "npm पुनरारंभ" का उपयोग करता हूं,
इसलिए सभी ts फ़ाइल js फ़ाइल में फिर से संकलित होगी और फिर सर्वर को पुनरारंभ करेगी।

देव वातावरण में चलने के लिए,

npm run dev

इस सेटअप का उपयोग करके मैं हमेशा वितरित फ़ाइलों से चलाऊंगा और ts-node की कोई आवश्यकता नहीं होगी।


0

इसे अपने package.json फ़ाइल में जोड़ें

scripts {
"dev": "nodemon --watch '**/*.ts' --exec 'ts-node' index.ts"
}

और इस काम को करने के लिए आपको ts-node को देव-निर्भरता के रूप में स्थापित करना होगा

yarn add ts-node -D

yarn devदेव सर्वर शुरू करने के लिए चलाएँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.