Я пытаюсь использовать grunt-contrib-watch вместе с grunt-express-server, чтобы перезагружать мой экспресс-сервер и страницу браузера всякий раз, когда я вносил изменения в файлы javascript. Проблема, с которой я сталкиваюсь, заключается в том, что страница перезагружается до того, как сервер будет готов, поэтому я получаю сообщение «не удается установить соединение с сервером на локальном хосте: 3000».
Вот мой Gruntfile.js:
module.exports = function(grunt) {
'use strict';
grunt.initConfig({
express: {
dev: {
options: {
script: 'gui-resources/scripts/js/server.js'
}
}
},
watch: {
express: {
files: ['gui-resources/scripts/js/**/*.js'],
tasks: ['express:dev'],
options: {
livereload: true,
spawn: false
}
}
}
});
// Load all grunt tasks declared in package.json
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', ['express:dev', 'watch'])
};
В моем файле server.js я запускаю сервер с помощью:
var port = 3000;
app.listen(port, function() {
console.log('Listening on port %d', port);
});
Я нашел этот похожий вопрос, но предложенное там решение не применимо к мой случай, так как я записываю некоторый вывод при запуске сервера, но состояние гонки все равно появляется.
Обновление: если я удалю spawn: false из конфигурации watch:express, все будет работать, но при запуске express регистрирует ошибку:
Error: listen EADDRINUSE
at errnoException (net.js:878:11)
at Server._listen2 (net.js:1016:14)
at listen (net.js:1038:10)
at Server.listen (net.js:1104:5)
at Function.app.listen (/Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/node_modules/express/lib/application.js:533:24)
at /Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/gui-resources/scripts/js/server.js:86:13
at Object.context.execCb (/Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/node_modules/requirejs/bin/r.js:1890:33)
at Object.Module.check (/Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/node_modules/requirejs/bin/r.js:1106:51)
at Object.<anonymous> (/Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/node_modules/requirejs/bin/r.js:1353:34)
at /Users/pat/projects/sourcefabric/plugin-liveblog-embed-server/node_modules/requirejs/bin/r.js:372:23
Как ни странно, несмотря на ошибку, сервер и страница перезагружаются корректно.
Вот мой код (настоящий Gruntfile больше, но Я удалил части, не относящиеся к просмотру или экспрессу, чтобы сделать вопрос более читабельным).