Wygląda na to, że lokalny serwer został uruchomiony z "heroku local web" nie obserwuje zmian plików i restartuje się. Jak mogę to zrobić?Zrestartować Heroku lokalnego na zmianę pliku?
Odpowiedz
Myślę, że heroku local
będzie watch
dla zmian zasobów statycznych (kod po stronie klienta). Jednak nie jest to idealne rozwiązanie do ręcznego restartowania serwera przy każdej zmianie kodu źródłowego wprowadzanego na serwerze WWW (kod po stronie serwera).
Jeśli tworzysz aplikację NodeJS, moja sugestia polega na wypróbowaniu polecenia watch
, które zapewnia Gulp. Jednak wymaga to również (a) zainstalowania Gulp i (b) napisania skryptu Gulp. Znowu to rozwiązanie będzie działać tylko dla NodeJS, a te kroki nie będą potrzebne, jeśli heroku local
obejrzy pliki dla ciebie.
- Install NodeJS
Install Gulp
npm install gulp --save-dev
Dodaj skrypt haustem (gdzie Procfile mieszka)
UWAGA: Nie byłem w stanie uzyskać następujący kod do
watch
działa z powodzeniem, ale może stanowić szablon dla innych, aby stworzyć działające rozwiązanie.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']); });
Uruchom skrypt Gulp (z katalogu, w którym Procfile mieszka)
gulp heroku-local:watch
heroku local
prostu wykorzystuje node-foreman
(https://www.npmjs.com/package/heroku-local), więc jest łatwiejsza w użyciu, które bezpośrednio do oglądania.
Najpierw należy zainstalować foreman
i nodemon
:
npm i --save-dev foreman nodemon
Teraz trzeba skonfigurować dwa skrypty w package.json
:
{
...
"scripts": {
"start": "nf start",
"watch": "nodemon --watch directory-to-watch"
},
...
}
Teraz można uruchomić aplikację, podczas gdy on ogląda ten katalog i ładuje się po zmianach za pomocą
Najprostszym sposobem na to jest uruchomienie nodemon z heroku local
jako plik wykonywalny - tj. nodemon --exec "heroku local"
.
Jednakże, heroku local
wychodzi z niezerowym kodem wyjścia dla domyślnego sygnału wyłączenia nodemon (SIGUSR2), więc musisz dodać dodatkową flagę do nodemon, aby ustawić sygnał przerwania na SIGTERM.
nodemon --exec "heroku local" --signal SIGTERM
(testowane [email protected], [email protected], [email protected])
Działa zgodnie z życzeniem - restartując' heroku local' z dowolnymi zmianami. –
Działa świetnie! Dzięki! – ohjeeez
Dzięki. Ale nie mógł sprawić, żeby działało ... – IsmailS
Czy próbowałeś metody "odradzania"? https://nodejs.org/api/child_process.html # child_process_child_process_spawn_command_args_options To może zadziałać ... – tfmontague
Używam obserwatora łyka, aby zakończyć proces węzła, odwiedzając specjalną trasę, którą utworzyłem, '/ killme', a następnie uruchamiając ją ponownie. Oczywiście ten URL nie powinien istnieć na stronie internetowej na żywo, ale jest przydatny lokalnie. w gulpfile: 'exec ("curl http: // localhost: 5000/KillMe; Heroku lokalny");' w moich node.js/express aplikacja: '' 'router.get ('/ KillMe ', function (req, res) { \t process.exit (1); }); '' ' – Lucas