Próbuję poprawić doświadczenie DEV w moim węźle. W tym celu chcę:
a) zresetować mój serwer po zmianie kodu po stronie serwera
b) odświeżyć przeglądarkę po zmianie kodu po stronie klienta.
Aby to osiągnąć, rozpocząłem integrację nodemon i browserSync w moim tekście gulp.Node.js - Auto Refresh In Dev
W moim scenariuszu haustem, Mam następujące zadanie:
gulp.task('startDevEnv', function(done) {
// Begin watching for server-side file changes
nodemon(
{ script: input.server, ignore:[input.views] })
.on('start', function() {
browserSync.init({
proxy: "http://localhost:3002"
});
})
;
// Begin watching client-side file changes
gulp.watch([ input.css, input.js, input.html ], function() { browserSync.reload(); });
done();
});
Gdy powyższe zadanie jest uruchamiane, moja przeglądarka otwiera się http://localhost:3000/. Moja aplikacja jest widoczna zgodnie z oczekiwaniami. Jednak w oknie konsoli zauważam:
Error: listen EADDRINUSE :::3002
Rozumiem do pewnego stopnia. Mam app.set('port', process.env.PORT || 3002);
w moim pliku server.js. Jednak myślałem, że to było celem ustawienia wartości proxy. Mimo to, ilekroć dokonać zmiany kodu, widzę następujące informacje dotyczące błędu w moim oknie konsoli:
[07:08:19] [nodemon] restarting due to changes...
[07:08:19] [nodemon] starting `node ./dist/server.js`
events.js:142
throw er; // Unhandled 'error' event
^
TypeError: args.cb is not a function
at Object.init (/Users/me/Website/Develop/node_modules/browser-sync/lib/public/init.js:25:25)
at null.<anonymous> (/Users/me/Website/Develop/gulpfile.js:142:25)
at emitNone (events.js:73:20)
at emit (events.js:167:7)
at Object.run (/Users/me/Website/Develop/node_modules/nodemon/lib/monitor/run.js:97:7)
at Function.run.kill (/Users/me/Website/Develop/node_modules/nodemon/lib/monitor/run.js:221:7)
at null.<anonymous> (/Users/me/Website/Develop/node_modules/nodemon/lib/monitor/run.js:333:7)
at emitOne (events.js:83:20)
at emit (events.js:170:7)
at restartBus (/Users/me/Website/Develop/node_modules/nodemon/lib/monitor/watch.js:162:7)
Me-MBP:Develop me$ events.js:142
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::3002
at Object.exports._errnoException (util.js:856:11)
at exports._exceptionWithHostPort (util.js:879:20)
at Server._listen2 (net.js:1238:14)
at listen (net.js:1274:10)
at Server.listen (net.js:1370:5)
at Object.<anonymous> (/Users/me/Website/Develop/dist/server.js:70:8)
at Module._compile (module.js:399:26)
at Object.Module._extensions..js (module.js:406:10)
at Module.load (module.js:345:32)
at Function.Module._load (module.js:302:12)
W tym momencie moje zmiany w kodzie nie pojawiają się w mojej przeglądarce. Nie rozumiem, co robię źle. Podejrzewam, że moje porty są źle skonfigurowane. Ale nie jestem pewien, jak powinny być skonfigurowane.
Domyślnie BrowserSync używa portu 3000. BrowserSync używa również portu 3001 dla interfejsu użytkownika BrowserSync. Z tych dwóch powodów myślałem, że ustawię port na 3002 w moim pliku server.js i utworzę serwer proxy pokazany powyżej. Co ja robię źle?
'nodemon' http://stackoverflow.com/questions/24750395/reload-express-js-routes-changes-without- restarting-server –
Zapytałeś o coś podobnego tutaj http://stackoverflow.com/questions/35576663/using-browser-sync-with-node-js-app/35740475#35740475 – Satyajeet
Czy to jest aplikacja ExpressJS? – Trevor