492 votes

Comment surveiller et recharger ts-node lorsque les fichiers TypeScript sont modifiés

J'essaie de faire fonctionner un serveur de développement avec TypeScript et une application Angular sans transpiler les fichiers ts à chaque fois. J'ai découvert que je peux faire fonctionner le serveur avec ts-node mais je veux aussi regarder .ts et recharger l'application/serveur comme je le ferais avec quelque chose comme gulp watch.

1014voto

HeberLZ Points 631

EDIT : Mis à jour pour la dernière version de nodemon !

Je me battais avec la même chose pour mon environnement de développement jusqu'à ce que je remarque que nodemon L'API de l'entreprise nous permet de modifier son comportement par défaut afin d'exécuter une commande personnalisée.

Par exemple, pour la version la plus récente de nodemon :

nodemon --watch "src/**" --ext "ts,json" --ignore "src/**/*.spec.ts" --exec "ts-node src/index.ts"

Ou créer un nodemon.json avec le contenu suivant :

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

et ensuite exécuter nodemon sans aucun argument.

En faisant cela, vous serez en mesure de recharger en direct une ts-node sans avoir à se soucier de l'implémentation sous-jacente.

A la vôtre !


Et avec les anciennes versions de nodemon :

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

Ou encore mieux : externaliser la configuration de nodemon dans un fichier nodemon.json avec le contenu suivant, puis exécutez simplement nodemon comme l'a suggéré Sandokan :

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

2 votes

Si index.ts est une instance express, comment puis-je la tuer et la redémarrer ?

0 votes

@elaijuh en théorie cette même commande devrait faire l'affaire, lorsque nodemon est configuré pour exécuter une commande personnalisée (dans ce cas ts-node) au lieu de la commande node par défaut, il arrêtera le processus et en lancera un nouveau chaque fois qu'il trouvera un changement sur l'expression watch moins l'expression ignore :)

32 votes

Vous pouvez également créer un fichier nodemon.json contenant toutes les options mentionnées, comme ceci : { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" } et tapez simplement nodemon

297voto

Mikael Couzic Points 402

J'ai jeté nodemon et ts-node en faveur d'une bien meilleure alternative, ts-node-dev https://github.com/whitecolor/ts-node-dev

Il suffit de courir ts-node-dev src/index.ts

27 votes

Et pourquoi est-ce mieux ?

64 votes

Il est plus rapide et détecte automatiquement les fichiers qui doivent être surveillés, sans configuration.

8 votes

C'est la meilleure (sinon la seule) option pour ts-node, surtout pour les grands projets. Il ne recompile pas tous les fichiers à partir de zéro, mais fait une compilation incrémentale, comme le fait tsc --watch .

78voto

im.pankratov Points 614

Voici une alternative aux HeberLZ's réponse en utilisant des scripts npm.

Mon package.json :

  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
  • -e Le drapeau définit les extensions à rechercher,
  • -w définit le répertoire surveillé,
  • -x exécute le script.

--inspect dans le watch:serve script est en fait un drapeau node.js, il active juste le protocole de débogage.

2 votes

Veillez également à ce que Typescript soit installé localement pour le projet. Sinon, l'erreur que vous pourriez obtenir n'est pas très claire.

0 votes

Je pense que ça devrait être ts-node --inspect -- src/index.ts maintenant en raison de ce .

2 votes

Cette approche semble générer un nombre considérable de sorties superflues.

20voto

gilamran Points 332

Spécifiquement pour ce problème, j'ai créé l'interface suivante tsc-watch Vous pouvez le trouver sur npm .

Un cas d'utilisation évident serait :

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

1 votes

Comment cela fonctionnerait-il dans le cas d'un serveur express ou koa puisque cela ne tue pas réellement l'instance du nœud précédent ?

0 votes

Tsc-watch' tue et redémarre le processus pour vous.

0 votes

C'est exactement ce que je cherchais. Je ne suis pas sûr de l'utilité de ts-node-dev, mais je n'arrivais pas à lui faire signaler les erreurs de typecript. Après avoir passé des heures à essayer de le faire fonctionner, j'ai essayé tsc-watch, et ça a marché comme un charme !

13voto

Takao Shibamoto Points 387

Ajouter "watch": "nodemon --exec ts-node -- ./src/index.ts" à scripts de votre package.json .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X