我正在尝试将grunt-contrib-watch与grunt-express-server一起使用,以便在我更改javascript文件时重新加载我的快速服务器和浏览器页面。我遇到的问题是页面在服务器准备好之前重新加载,所以我得到一个“无法在localhost: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);
});
我发现这个类似question,但是那里提出的解决方案不适用于我的情况,因为我在服务器启动时记录了一些输出,但无论如何都会出现竞争条件。
更新 如果我从watch:express config中删除'spawn:false',一切正常,但表示启动时记录错误:
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
奇怪的是,尽管错误,服务器和页面正确重新加载。
这是我的code(真正的Grunt文件更大,但我删除了与watch或express无关的部分以使问题更具可读性。)
答案 0 :(得分:0)
我认为您应该能够使用debounceDelay
option和livereload
等待一段时间,直到您的服务器准备就绪:
watch: {
express: {
files: ['gui-resources/scripts/js/**/*.js'],
tasks: ['express:dev'],
options: {
livereload: true,
spawn: false,
debounceDelay: 1000 // in milliseconds
}
}
}