TypeScript 파일이 변경 될 때 TS 노드를보고 다시로드하는 방법


답변:


404

nodemon의 API로 사용자 정의 명령을 실행하기 위해 기본 동작을 변경할 수 있음을 알 때까지 개발 환경에서 똑같은 문제로 고심하고있었습니다 . 예를 들면 다음과 같습니다.

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

또는 더 나은 방법 : nodemon의 구성을 nodemon.json다음 내용 이 포함 된 파일로 외부화 한 다음 nodemonSandokan이 제안한대로 실행하십시오 .

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

이를 ts-node통해 기본 구현에 대해 걱정할 필요없이 프로세스 를 실시간으로 다시로드 할 수 있습니다 .

건배!

최신 버전의 nodemon을 위해 업데이트되었습니다.

nodemon.json다음 내용 으로 파일을 작성하십시오 .

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

경우 index.tsExpress 인스턴스이며, 어떻게하면 다시 시작 죽일 수
hjl

@elaijuh 이론상 동일한 명령이 트릭을 수행해야합니다. nodemon이 기본 노드 명령 대신 사용자 정의 명령 (이 경우 ts-node)을 실행하도록 구성되면 프로세스가 종료되고 매번 새 프로세스가 시작됩니다 시계 식에서 무시 식을 뺀 변화를 찾습니다 :)
HeberLZ

15
: 당신은 또한 nodemon.json의이 같은 그것의 모든 언급 한 옵션을 사용하여 파일을 만들 수 있습니다 { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" }및 단지 형nodemon
Sandokan 엘 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
Adrian Moisa

2
extconfig 파일에서도 설정을 변경해야하므로 ts 변경 사항을 찾아야 한다고 언급하고 싶습니다 . 내 설정 파일은 다음과 같습니다 :{ "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

나는 덤프 한 nodemon하고 ts-node, 더 나은 대안에 찬성ts-node-dev https://github.com/whitecolor/ts-node-dev

그냥 뛰어 ts-node-dev src/index.ts


6
그리고 왜 이것이 더 낫습니까?
Deilan

22
더 빠르며 구성이 필요없는 감시해야 할 파일을 자동으로 감지합니다.
Mikael Couzic

4
이는 특히 대규모 프로젝트의 경우 ts-node에 가장 적합한 (유일하지는 않지만) 옵션입니다. 모든 파일을 처음부터 다시 컴파일하지는 않지만와 같이 증분 컴파일을 수행합니다 tsc --watch.
Angelos Pikoulas

3
내 경우,이 문자 그대로 10 배보다 더 빨리 nodemonts-node. 감사합니다!
플로리안

3
그래서 나는 문자 그대로 있습니다 "start": "ts-node-dev src". babel, nodemon 또는 이와 함께 제공되는 구성이 필요하지 않습니다. 모든 것이 당신을 위해 처리됩니다.
JMadelaine

53

다음은 npm 스크립트를 사용하여 HeberLZ의 답변에 대한 대안 입니다.

package.json:

  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
  • -e flag는 찾을 확장을 설정합니다.
  • -w 감시 디렉토리를 설정하고
  • -x 스크립트를 실행합니다.

--inspectwatch:serve스크립트가 실제로는 Node.js를 플래그, 그것은 단지 프로토콜을 디버깅 할 수 있습니다.


2
또한 프로젝트에 대해 타이프 스크립트를 로컬로 설치해야합니다. 그렇지 않으면 발생할 수있는 오류가 명확하지 않습니다.
Aranir

나는 그것이해야한다고 생각 ts-node --inspect -- src/index.ts때문에 지금 .
bluenote10

1
이 접근법은 상당한 불필요한 출력을 생성하는 것으로 보입니다.
Freewalker 2016 년

-e ts -w ./src나를 위해 속임수-이것은 loopback4 CLI 생성 프로젝트와 함께 작동
Jonathan Cardoz

16

이 문제를 위해 특별히 tsc-watch라이브러리를 만들었습니다 . npm에서 찾을 수 있습니다 .

명백한 유스 케이스는 다음과 같습니다.

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


Express 또는 koa 서버의 경우 이전 노드 인스턴스를 실제로 종료하지 않기 때문에 어떻게 작동합니까?
brianestey

'tsc-watch'는 프로세스를 종료하고 다시 시작합니다.
gilamran

이것이 바로 내가 찾던 것입니다. ts-node-dev의 목적이 무엇인지 확실하지 않지만 typescript 오류를보고하지 못했습니다. 그것을 작동 시키려고 몇 시간을 보낸 후, 나는 tsc-watch를 시도했고 그것은 매력처럼 일했습니다!
Charles Naccio

@gilamran 패키지 문서에 오타가 있습니다 : "[...] similar to nodemon but for TypeCcript.":)
Massimiliano Kraus

13

이것은 나를 위해 작동합니다 :

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. 즉,이 솔루션은 추가 구성이 필요하지 않기 때문에 훨씬 좋습니다.
Brandon Clapp

12

추가 "watch": "nodemon --exec ts-node -- ./src/index.ts"scripts당신의 섹션 package.json.


7

당신은 ts-node-dev를 사용할 수 있습니다

필요한 파일이 변경되면 (표준 node-dev로) 대상 노드 프로세스를 다시 시작하지만 재시작간에 Typescript 컴파일 프로세스를 공유합니다.

설치

yarn add ts-node-dev --dev

그리고 package.json은 다음과 같을 수 있습니다

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

감사합니다! 이것이 노드 서버에서 자동 재로드를 활성화하는 가장 쉬운 방법이었습니다.
Hisham Mubarak

7

나는 ~했다

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

그리고 실 시작. 'ts-node'와는 다른 ts-node


1

ts-node를 사용하지 않고 항상 dist 폴더에서 실행하는 것을 선호합니다.

그렇게하려면 기본 설정으로 package.json을 설정하십시오.

....
"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 restart"
하므로 모든 ts 파일이 js 파일로 다시 컴파일 된 다음 서버를 다시 시작합니다.

개발 환경에서 실행하려면

npm run dev

이 설정을 사용하면 항상 분산 파일에서 실행되며 ts-node가 필요하지 않습니다.


0

이것을 package.json 파일에 추가하십시오

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

이 작업을 수행하려면 ts-node를 dev-dependency로 설치해야합니다

yarn add ts-node -D

yarn devdev 서버를 시작하기 위해 실행

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.