2016-07-08 26 views
7

Sto cercando un modo per utilizzare gli script npm per eseguire tsc --watch && nodemon --watch allo stesso tempo. Posso eseguire questi comandi in modo indipendente, ma quando voglio eseguirli entrambi, viene eseguito solo il primo. es. se ho questo script:C'è un modo per usare gli script npm per eseguire tsc -watch e& nodemon --watch?

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

tsc --watch viene eseguito ma nodemon non è mai chiamato, e viceversa.

risposta

6

provare ad aggiungere questo alla tua package.json:

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

e anche aggiungere questi pacchetti NPM (in concomitanza, nodemon, dattiloscritto) al vostro package.json:

"devDependencies": { 
    "concurrently": "^2.2.0", 
    "typescript": "^1.8.10", 
    "nodemon": "^1.9.2", 
} 
+0

Funziona benissimo, grazie! –

+2

L'unico problema è che 'nodemon' inizia prima che il dattiloscritto finisca il suo lavoro, una soluzione di hack può impostare un ritardo su nodemon come' nodemon --delay x', che dà alcuni momenti a 'tsc'. –

+0

@NicolasDominguez, vedere la mia risposta per un modo che garantisce le modifiche di tsc prima di eseguire l'app. – AlterX

31

Penso che quello che vuoi qualcosa di simile a questo (la mia attuale configurazione):

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

Ho creato due script "compile" e "dev". Per iniziare lo sviluppo è sufficiente eseguire npm run dev che avvia nodemon e fa in modo che guardi i file .ts (utilizzando il flag -e). Quindi, ogni volta che un file .ts cambia, nodemon eseguirà l'attività di compilazione che consiste essenzialmente nella compilazione ed esecuzione dell'app nodo.

Mentre l'uso simultaneo è una buona opzione, la mia configurazione garantisce che il lavoro di tsc sia eseguito prima di tentare di eseguire i file .js risultanti.

+0

Assicurati di impostare "" watch ": false' nel tuo file' tsconfig.json'. Altrimenti 'node app.js' non verrà mai eseguito. – Matt

+0

Sì, ma tsc non guarderà i file a meno che tu non dica di farlo usando '-w' /' --watch' o, come hai detto '" watch ": true' nel' tsconfig.json' quindi dovrebbe essere proprio bene usare questa tecnica – AlterX

+0

molto pulita, grazie! –

2

Ho usato la soluzione di AlterX per un po 'di tempo e ha funzionato perfettamente, ma ho trovato che fosse piuttosto lento. Invece, ora sto usando tsc-watch. Rende utilizza la compilazione incrementale simile al flag -w, rendendo il riavvio dell'applicazione molto più veloce.

E 'facile come mettere qualcosa di simile a questo nel tuo package.json:

"scripts": { 
    "start": "tsc-watch --onSuccess \"node .\"" 
} 
+1

Questa è un'ottima soluzione! Sono stato in grado di concatenare più comandi nel callback in questo modo: '--onSuccess" sh -c 'babel && uglifyjs' "' –