【发布时间】:2014-08-04 18:02:55
【问题描述】:
每当某些文件发生更改时,我正在尝试使用模块 grunt-contrib-watch 重新启动我的 node.js 服务器。我已经使用 grunt 来运行服务器、jshint 和模板编译器,并且我知道这些函数可以工作。下面是启动服务器的任务:
grunt.registerTask('runServer', 'Starts the server.', function(){
grunt.log.writeln('Starting server...');
var done = this.async();
var child = grunt.util.spawn({
cmd: process.argv[0],
args: ['server.js'],
}, function(){
grunt.log.writeln('Server stopped!');
done(true);
});
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
});
这是监视任务的配置:
watch: {
all: {
files: ['some/files/*.js'],
tasks: ['default'],
options: {
spawn: true,
interrupt: true,
reload: true,
}
}
}
当任务重新启动时,服务器由于“EADDRINUSE”异常而失败,我的意思是因为之前的子进程没有释放它正在使用的端口,这很奇怪 - 我确实看到了“服务器停止了!”信息。我已经尝试了这三个选项的所有组合,我查看了 grunt-contrib-watch 的 github 页面,但没有显示任何内容。如何让中断的 node.js 进程在下一个尝试启动之前关闭其所有资源?
【问题讨论】:
标签: node.js gruntjs grunt-contrib-watch