TypeScript dosyaları değiştiğinde ts düğümü nasıl izlenir ve yeniden yüklenir


192

Ben her zaman ts dosyaları aktarmadan TypeScript ve bir Açısal uygulama ile bir dev sunucusu çalıştırmak için çalışıyorum. Ben koşma ile yapabileceğimi buldum ts-nodeama aynı zamanda .tsdosyaları izlemek ve gulp izle gibi bir şey gibi yapacağım uygulaması / sunucuyu yeniden yüklemek istiyorum.

Yanıtlar:


404

nodemonAPI'sının özel bir komut yürütmek için varsayılan davranışını değiştirmemize izin verdiğini fark edene kadar geliştirme ortamım için aynı şeyle uğraşıyordum . Örneğin:

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

Ya da daha iyisi: nodemon'un yapılandırmasını nodemon.jsonaşağıdaki içeriğe sahip bir dosyaya harici hale getirin ve nodemonSandokan'ın önerdiği gibi çalıştırın :

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

Bunu yapmakla ts-node, temeldeki uygulama hakkında endişelenmenize gerek kalmadan bir süreci canlı olarak yeniden yükleyebileceksiniz .

Şerefe!

Nodemon'un en son sürümü için güncellendi:

nodemon.jsonAşağıdaki içeriğe sahip bir dosya oluşturun .

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

eğer index.tsbir ekspres örneğidir, nasıl ve uygulamasını yeniden başlatın öldürebilir
HJL

@elaijuh teoride aynı komut hile yapmalıdır, nodemon varsayılan düğüm komutu yerine özel bir komut (bu durumda ts-node) yürütmek üzere yapılandırıldığında, işlemi kapatır ve her seferinde yeni bir komut başlatır. saat ifadesinde eksi yoksayma ifadesinde bir değişiklik bulur :)
HeberLZ

15
ayrıca bunun gibi tüm belirtilen seçeneklerle bir nodemon.json dosyası oluşturabilirsiniz: { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" }ve sadece yazınnodemon
Sandokan El Cojo

3
./Klasör adlarından önce ekleme hatası yaptım ve kırıldı. Bu benim için çalıştı: { "verbose": true, "watch": ["server/**/*.ts"], "ext": "ts js json", "ignore": ["server/**/*.spec.ts"], "exec": "ts-node index.ts" }. Ve komut satırı:nodemon --watch server/**/*.ts --ignore server/**/*.spec.ts --verbose --exec ts-node index.ts
Adrian Moisa

2
Ben de ext, yapılandırma dosyasında ayarlamak zorunda bahsetmek istiyorum, bu yüzden ts için görünüm değişir. Yapılandırma dosyam şöyle görünüyor:{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "ext": "ts js json", "_exec": "node dist/startup.js", "exec": "ts-node src/startup.ts" }
Lasse D. Slot

114

Ben terk ettim nodemonve ts-nodeçok daha iyi bir alternatif lehine, ts-node-dev https://github.com/whitecolor/ts-node-dev

Sadece koş ts-node-dev src/index.ts


6
Ve bu neden daha iyi?
Deilan

22
Daha hızlıdır ve hangi dosyaların izlenmesi gerektiğini otomatik olarak algılar, yapılandırma gerekmez.
Mikael Couzic

4
Bu, ts-node için, özellikle daha büyük projeler için en iyi seçenektir. Tüm dosyaları sıfırdan derlemez, ancak gibi artımlı bir derleme yapar tsc --watch.
Angelos Pikoulas

3
benim durumumda, bu anlamıyla 10 kat daha hızlı nodemonolan ts-node. Teşekkür ederim!
Florian

3
Yani tam anlamıyla var "start": "ts-node-dev src". Babil, nodemon veya onunla birlikte gelen herhangi bir yapılandırmaya gerek yoktur. Her şey sizin için halledilir.
JMadelaine

53

İşte npm betikleri kullanarak HeberLZ'nin cevabına bir alternatif .

Benim package.json:

  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
  • -e flag, aranacak uzantıları belirler,
  • -w izlenen dizini ayarlar,
  • -x komut dosyasını yürütür.

--inspectiçinde watch:servekomut dosyası aslında bir node.js bayrağıdır, sadece protokol hata ayıklama sağlar.


2
Ayrıca, proje için yerel olarak dizgi yüklü olduğundan emin olun. Aksi takdirde alabileceğiniz hata çok açık değildir.
Aranir

Bunun olması gerektiğini düşünüyorum ts-node --inspect -- src/index.tsnedeniyle şimdi bu .
bluenote10

1
Bu yaklaşım, önemli miktarda gereksiz çıktı üretmektedir.
Freewalker

-e ts -w ./srcbenim için hile yaptı - bu bir loopback4 CLI oluşturulan proje ile çalıştı
Jonathan Cardoz

16

Özellikle bu sorun için tsc-watchkütüphaneyi oluşturdum . npm'de bulabilirsiniz .

Açık kullanım örneği:

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


Önceki düğüm örneğini gerçekten öldürmediği için bir ekspres veya koa sunucusu durumunda bu nasıl çalışır?
brianestey

'tsc-watch' işlemi sizin için öldürür ve yeniden başlatır.
gilamran

Tam da aradığım şey buydu. Ts-node-dev'in amacının ne olduğundan emin değilim, ancak typescript hatalarını bildiremedim. Saatlerce çalıştıktan sonra tsc-watch denedim ve bir cazibe gibi çalıştı!
Charles Naccio

@gilamran paketinizin belgelerinde bir yazım hatası var: "[...] similar to nodemon but for TypeCcript.":)
Massimiliano Kraus

13

Bu benim için çalışıyor:

nodemon src/index.ts

Görünüşe göre bu çekme talebinden beri teşekkürler: https://github.com/remy/nodemon/pull/1552


Bu benim için de işe yarıyor ama nasıl? Biraz büyülü görünüyor. Dizgiyi derleyen nedir? Ben sahip olmayan ts-nodeyüklenmiş.
d512

1
@ d512 İçinde olmadığından emin misin node_modules/? Benim için yoksa ben başarısız olur.
DLight

1
Bu gerçekten ts-nodekurulmasını gerektirir . Olmadan bu komutu çalıştırmak ts-nodebir sonuçlanacaktır failed to start process, "ts-node" exec not foundhata. Muhtemelen bunu artık bir eser olarak gördünüz node_modules. Bununla birlikte, ek yapılandırma gerektirmediği için bu çözüm çok daha güzel.
Brandon Clapp

12

Ekle "watch": "nodemon --exec ts-node -- ./src/index.ts"için scripts, aramalarınızdan bölümünde package.json.


7

Eğer kullanabilirsiniz ts-düğüm-dev

Gerekli dosyalardan herhangi biri değiştiğinde (standart düğüm-dev olarak) hedef düğüm işlemini yeniden başlatır, ancak yeniden başlatmalar arasında Typescript derleme işlemini paylaşır.

Yüklemek

yarn add ts-node-dev --dev

ve paketiniz.json böyle olabilir

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

Teşekkür ederim! Düğüm sunucumla otomatik yeniden yüklemeyi etkinleştirmek için bulduğum en kolay yol buydu.
Hisham Mübarek

7

ile yaptım

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

ve iplik başlıyor .. ts-düğüm 'ts-düğüm' gibi değil


1

Ben ts-node kullanmak ve her zaman dist klasöründen çalıştırmak tercih ederim.

Bunu yapmak için, package.json'unuzu varsayılan yapılandırma ile kurmanız yeterlidir:

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

ve nodemon.json yapılandırma dosyasını ekleyin :

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

Burada, "exec" kullanın : "npm restart"
böylece tüm ts dosyası js dosyasına yeniden derlemek ve sonra sunucuyu yeniden başlatın.

Geliştirme ortamında çalışırken,

npm run dev

Bu kurulumu kullanarak her zaman dağıtılmış dosyalardan çalışacağım ve ts-node'a gerek yok.


0

bunu package.json dosyanıza ekleyin

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

ve bu işi yapmak için ts-node'u dev-bağımlılığı olarak yüklemeniz gerekir

yarn add ts-node -D

yarn devdev sunucusunu başlatmak için çalıştır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.