获取grunt-express重新启动更改

我正在尝试使用grunt-express和grunt-watch。 我想服务器重新加载,我改变我的服务器文件。

这是我得到的。

Gruntfile.js

var path = require('path'); module.exports = function(grunt) { grunt.initConfig({ express: { options: { port: 8000 }, load: { server: path.resolve('./app') } }, watch: { express: { files: ['app.js'], tasks: ['express:load'] } } }); grunt.loadNpmTasks('grunt-karma'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-express'); grunt.registerTask('server', ['express:load', 'express-keepalive', 'watch']); }; 

app.js

 var express = require('express'); var app = express(); var server = require('http').createServer(app); app.get('/', function(req, res) { res.sendfile(__dirname + '/public/index.html'); }); exports = module.exports = server; exports.use = function() { app.use.apply(app, arguments); }; 

当我在控制台inputgrunt服务器时,我得到:

 Running "express:load" (express) task Running "express-server:load" (express-server) task Web server started on port:8000, no hostname specified [pid: 21115] Running "express-keepalive" task 

服务器启动正常,我可以去本地主机:8000来查看我的网页。 watch任务似乎没有开始,当我对app.js进行更改时,它不会重新启动。 我基本上想要typesgrunt服务器,然后当app.js发生任何更改,我想服务器重新启动。 我试过使用serverreload选项,但我似乎无法得到这个工作。 我也尝试过使用快速重启(代替快速:livereload)在手表:快速任务,但它说

 Warning: path must be a string Use --force to continue. 

在玩了一段时间之后,我能够得到它的工作,一个恼人的问题。 这是Gruntfile的核心:

 var path = require('path'); module.exports = function (grunt) { grunt.initConfig({ express: { options: { port: 8000, hostname: '*' }, livereload: { options: { server: path.resolve('./app.js'), livereload: true, serverreload: true, bases: [path.resolve('./public')] } } } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-express'); grunt.registerTask('default', ['express', 'express-keepalive']); }; 

然而,似乎有一个问题,其他端口被隔离使用 。 如果其他服务器重新加载选项正在工作,我会暂时坚持。

作为一个侧面说明,看起来这个咕噜插件也监听端口,这意味着开始app.js应该返回自己与module.exports = app; 而不是默认的快递http.createServer 。 只要指定了不同的端口,它们就会同时运行。