যখন টাইপস্ক্রিপ্ট ফাইল পরিবর্তন হয় তখন কীভাবে টিএস-নোডটি দেখুন এবং পুনরায় লোড করবেন


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কোনও এক্সপ্রেস উদাহরণ হয় তবে কীভাবে আমি এটি মেরে
ফিরতে পারি

@ তাত্ত্বিকভাবে ইলাইজহ এই একই কমান্ডটি কৌশলটি করা উচিত, যখন নোডমন ডিফল্ট নোড কমান্ডের পরিবর্তে একটি কাস্টম কমান্ড কার্যকর করতে কনফিগার করা হয় (এই ক্ষেত্রে টিএস-নোড), এটি প্রক্রিয়াটি বন্ধ করে দেবে এবং প্রতিবার এটি নতুন করে শুরু করবে ঘড়ির অভিব্যক্তিটি উপেক্ষা করে প্রকাশের
বিয়োগের

15
আপনি এতে উল্লিখিত সমস্ত বিকল্পগুলির সাথে একটি নোডমন.জেসন ফাইলও তৈরি করতে পারেন: { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" }এবং কেবল টাইপ করুনnodemon
সান্দোকান এল কোজো

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কনফিগার ফাইলেও সেট করতে হবে, তাই টিএস পরিবর্তনের জন্য এটির চেহারা। আমার কনফিগারেশন ফাইলটি এর মতো দেখাচ্ছে:{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "ext": "ts js json", "_exec": "node dist/startup.js", "exec": "ts-node src/startup.ts" }
লাসে ডি স্লট

113

আমি ফেলে দিয়েছি nodemonএবং ts-nodeআরও ভাল বিকল্পের পক্ষে করছি, ts-node-dev https://github.com/whitecolor/ts-node-dev

শেষ ঘন্টা ts-node-dev src/index.ts


6
এবং কেন এই ভাল?
Deilan

22
এটি দ্রুততর এবং স্বয়ংক্রিয়ভাবে সনাক্ত করে যে কোন ফাইলগুলি দেখার দরকার, কোনও কনফিগার দরকার নেই।
মিকেল কুউজিক

4
এটি টিএস-নোডের জন্য বিশেষত বৃহত্তর প্রকল্পগুলির জন্য সেরা (একমাত্র নয়) বিকল্প। এটি স্ক্র্যাচ থেকে সমস্ত ফাইল পুনরায় সংকলন করে না, তবে একটি ইনক্রিমেন্টাল সংকলন করে tsc --watch
অ্যাঞ্জেলোস পিকৌলাস

2
আমার ক্ষেত্রে, এই আক্ষরিক 10 বার তুলনায় দ্রুততর nodemonসঙ্গে ts-node। ধন্যবাদ!
ফ্লোরিয়ান

3
সুতরাং আমি আক্ষরিক ঠিক আছে "start": "ts-node-dev src"। বাবেল, নোডমোন, বা এটির সাথে আসা কোনও কনফিগারেশনের দরকার নেই। আপনার জন্য সবকিছু পরিচালনা করা হয়।
জেমেডেইলাইন

52

এনপিএম স্ক্রিপ্টগুলি ব্যবহার করে এখানে হেবারএলজেডের উত্তরের বিকল্প রয়েছে ।

আমার 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আমার জন্য কৌতুকটি করেছেন - এটি লুপব্যাক
সি এল আই

16

বিশেষত এই সমস্যার জন্য আমি tsc-watchলাইব্রেরি তৈরি করেছি created আপনি এটি এনপিএম খুঁজে পেতে পারেন ।

স্পষ্টত ব্যবহারের ক্ষেত্রে হবে:

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


এটি কোনও এক্সপ্রেস বা কোয়া সার্ভারের ক্ষেত্রে কীভাবে কাজ করবে যেহেতু এটি পূর্ববর্তী নোডের প্রকৃতপক্ষে আসলেই হত্যা করে না?
ব্রায়ানস্টে

'টিএসএস-ওয়াচ' আপনার জন্য প্রক্রিয়াটিকে মেরে ফেলে এবং পুনরায় চালু করে।
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/? আমার কাছে এটি না থাকলে এটি ব্যর্থ হয়।
DLight

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

আমি টিএস-নোড ব্যবহার না করা এবং সর্বদা ডিস্ট ফোল্ডার থেকে চালানো পছন্দ করব।

এটি করতে, কেবলমাত্র আপনার প্যাকেজ সেট করুন: ডিফল্ট কনফিগারেশনের সাথে জসন:

....
"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"
}

এখানে, আমি "এক্সিকিউটিভ": "এনপিএম পুনঃসূচনা" ব্যবহার করি
যাতে সমস্ত টিএস ফাইল পুনরায় সংকলন করে জেএস ফাইল এবং তারপরে সার্ভারটি পুনরায় চালু করতে পারে।

দেব পরিবেশে চলার জন্য,

npm run dev

এই সেটআপটি ব্যবহার করে আমি সর্বদা বিতরণ করা ফাইলগুলি থেকে চালিত করব এবং টিএস-নোডের প্রয়োজন নেই।


0

এটি আপনার প্যাকেজ.জসন ফাইলে যুক্ত করুন

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

এবং এই কাজটি করতে আপনাকে ডিএস-নির্ভরতা হিসাবে ts-node ইনস্টল করতে হবে

yarn add ts-node -D

yarn devদেব সার্ভার শুরু করতে চালান run

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.