web-dev-qa-db-fra.com

Existe-t-il un moyen d'utiliser des scripts npm pour exécuter tsc -watch && nodemon --watch?

Je cherche un moyen d'utiliser des scripts npm pour exécuter tsc --watch && nodemon --watch en même temps. Je peux exécuter ces commandes indépendamment, mais lorsque je veux les exécuter toutes les deux, seule la première est exécutée. par exemple. si j'ai ce script:

"scripts": {    
    "runDeb": "set NODE_ENV=development&& tsc --watch && nodemon --watch"
  }

tsc --watch est exécuté mais nodemon n'est jamais appelé, et vice versa.

29
Nicolas Dominguez

Je pense que ce que vous voulez est quelque chose comme ça (ma configuration actuelle):

"scripts": {
    "compile": "tsc && node app.js",
    "dev": "./node_modules/nodemon/bin/nodemon.js -e ts  --exec \"npm run compile\""
}

J'ai créé deux scripts "compile" et "dev". Pour commencer à développer, exécutez simplement npm run dev qui démarre nodemon et lui fait regarder les fichiers .ts (en utilisant le -e drapeau). Ensuite, chaque fois qu'un fichier .ts change, nodemon exec la tâche de compilation qui compile et exécute essentiellement l'application de nœud.

Bien que l'utilisation simultanée soit une bonne option, ma configuration garantit que le travail de tsc est terminé avant d'essayer d'exécuter les fichiers .js résultants.

72
AlterX

J'utilise la solution d'AlterX depuis un certain temps maintenant et cela a parfaitement fonctionné, mais je l'ai trouvée assez lente. Au lieu de cela, j'utilise maintenant tsc-watch . Il fait utiliser à tsc une compilation incrémentielle similaire à -w flag, ce qui accélère le redémarrage de l'application.

C'est aussi simple que de mettre quelque chose de similaire à ceci dans votre package.json:

"scripts": {
  "start": "./node_modules/.bin/tsc-watch --onSuccess \"node .\""
}
27
Borre Mosch

Essayez d'ajouter ceci à votre package.json:

"scripts": {
  "start": "concurrently --kill-others \"tsc -w\" \"nodemon dist/app.js\"",
}

Et ajoutez également ces packages npm (simultanément, nodemon, TypeScript) à votre package.json:

"devDependencies": {
  "concurrently": "^2.2.0",
  "TypeScript": "^1.8.10",
  "nodemon": "^1.9.2",
}
20
Alexander Sergeev

Ma solution en octobre 2018 en utilisant les dernières versions de nodemon.

d'abord:
installez nodemon (npm install nodemon --save-dev) et ts-node (npm install ts-node --save-dev)

seconde:
créer un nodemon.json. J'aime garder ma configuration nodemon dans un seperat nodemon.json pour rendre les scripts npm un peu plus faciles à lire. Alors créez nodemon.json à la racine du projet avec le contenu suivant:

{
    "ignore": ["**/*.test.ts", "**/*.spec.ts", ".git", "node_modules"],
    "watch": ["src"], // your .ts src folder
    "exec": "npm start", // your npm script created in package.json
    "ext": "ts"
}

puis créez votre npm start script par exemple comme ceci:

"scripts": {
    ...
    "start": "ts-node src/server.ts",
    "dev:ts": "nodemon",
    ...
  }

Exécutez ensuite npm run dev:ts ou yarn dev:ts devrait s'exécuter et surveiller votre code serveur TypeScript.

Pour plus de configurations comme Jest tests unitaires etc ... vous pouvez jeter un oeil à l'article this

3
billyjov

Le TypeScript-Node-Starter est rapide

https://github.com/Microsoft/TypeScript-Node-Starter/blob/master/package.json

"dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch-ts\" \"nodemon ./dist/app.js\"",
"watch-ts": "tsc -w"

Ici, nous donnons npm run watch-ts le nom TypeScript (en utilisant concurrently -n) et en ajoutant la couleur yellow.bold en utilisant le concurrently -c.

Ainsi, je peux reconnaître assez facilement les messages pour chaque processus.

1
Coyolero

Que se passe-t-il

Le problème est qu'il y a deux observateurs ici sur tous les fichiers. L'un est tsc -w et l'un est nodemon.

Lorsqu'un changement vers un .ts le fichier est créé, tsc le détecte, le compile et crée le .js version dans votre dossier de destination.

Du point de vue du Nodemon, il détecte deux changements (au moins) - un pour .ts et un pour .js. Au premier changement, il redémarre lui-même, mais au deuxième changement, il ne sait pas qu'un autre "démarrage" est déjà en cours, il essaie donc de redémarrer à nouveau et il échoue. Pour moi, c'est un bug nodemon - voir https://github.com/remy/nodemon/issues/76 .

Solutions

1) Utilisez tsc-watch --onSuccess

tsc-watch a --onSuccess que vous pouvez mettre node dessus. De cette façon, vous aurez seulement un observateur.

2) Nodémon de retard

Vous pouvez facilement retarder le redémarrage de nodemon (Voir - delay ). Il nécessite le moins de changement de configuration.

3) Avoir nodemon ne surveille que le dossier de destination du TSC

Je n'ai pas pu le configurer, mais de cette façon nodemon ne détectera qu'un seul changement, espérons-le. Cela pourrait causer des problèmes à l'avenir ou lorsque tsc génère plusieurs fichiers.

0
Aidin