Sembra che il server locale avviato con "heroku local web" non controlli le modifiche ai file e si riavvii da solo. Come posso farlo fare questo?Restart Heroku local in caso di cambio di file?
risposta
Penso che heroku local
sarà watch
per le modifiche alle risorse statiche (codice lato client). Ma chiaramente non è l'ideale per riavviare manualmente il server con ogni modifica del codice sorgente effettuata al server Web (codice lato server).
Se si sta creando un'applicazione NodeJS, il mio suggerimento è di provare il comando watch
fornito da Gulp. Tuttavia, ciò richiede anche di (a) installare Gulp e (b) scrivere lo script Gulp. Ancora una volta questa soluzione funzionerebbe solo con NodeJS, e questi passaggi non sarebbero necessari se heroku local
guardasse i file per te.
- Installare NodeJS
Installare Gulp
npm install gulp --save-dev
aggiungere lo script Gulp (dove vive Procfile)
NOTA: Non sono stati in grado di ottenere il
watch
seguente codice di lavoro con successo, ma potrebbe fornire un modello per gli altri per creare una soluzione di lavoro.var gulp = require('gulp'); var exec = require('child_process').exec; gulp.task('heroku-local', function() { exec("heroku local"); }); gulp.task('heroku-local:watch', function() { gulp.watch([ 'file-to-watch', 'folder-to-watch/**/*' ], ['heroku-local']); });
Eseguire lo script Gulp (dalla directory in cui vive Procfile)
gulp heroku-local:watch
heroku local
utilizza solo node-foreman
(https://www.npmjs.com/package/heroku-local), così è più facile da usare che direttamente per la visione.
In primo luogo, installare foreman
e nodemon
:
npm i --save-dev foreman nodemon
Ora, è necessario impostare due script nella vostra package.json
:
{
...
"scripts": {
"start": "nf start",
"watch": "nodemon --watch directory-to-watch"
},
...
}
È ora possibile eseguire l'applicazione mentre si guarda quella directory e ricarica sulle modifiche con
npm run watch
Il modo più semplice per eseguire questa operazione è eseguire nodemon con heroku local
come eseguibile, ad esempio nodemon --exec "heroku local"
.
Tuttavia, heroku local
esce con un codice di uscita diverso da zero per il segnale di spegnimento del nodemon predefinito (SIGUSR2), quindi è necessario aggiungere un ulteriore flag a nodemon per impostare il segnale di interruzione su SIGTERM.
nodemon --exec "heroku local" --signal SIGTERM
(testato con [email protected], [email protected], [email protected])
Questo funziona come desiderato - riavvio di' heroku local' con eventuali modifiche. –
Funziona alla grande! Grazie! – ohjeeez
Grazie. Ma non è stato possibile farlo funzionare ... – IsmailS
Hai provato il metodo 'spawn'? https://nodejs.org/api/child_process.html # child_process_child_process_spawn_command_args_options Questo potrebbe funzionare ... – tfmontague
Sto usando il gulp watcher per terminare il processo del nodo visitando un percorso speciale che ho creato, '/ killme', e quindi riavviandolo. Ovviamente questo URL non dovrebbe esistere sul sito web live, ma è utile localmente. nel gulpfile: 'exec ("ricciolo http: // localhost: 5000/killme; Heroku locale");' nei miei node.js/app espresso: '' 'router.get ('/ killme ', function (req, res) { \t process.exit (1); }); '' ' – Lucas