让grunt-express重新启动更改

时间:2014-02-26 03:24:18

标签: javascript node.js express gruntjs 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);
};

当我在控制台中键入grunt服务器时,我得到:

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

服务器启动正常,我可以转到localhost:8000查看我的页面。监视任务似乎没有启动,当我对app.js进行更改时,它不会重新启动。我基本上想要类型grunt服务器,然后当app.js发生任何变化时,我希望服务器重新启动。我已经尝试过使用serverreload选项,但我似乎也无法使用它。我还尝试在watch:express任务中使用express-restart(代替express:livereload),但它说

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

1 个答案:

答案 0 :(得分:7)

经过一些游戏,我能够让它运转起来,带来一个恼人的问题。这是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']);
};

然而似乎有一个issue where a different port is used every other save。如果其他服务器重新加载选项正常工作,我会暂时坚持使用它。

作为旁注,看来这个grunt插件也在监听端口,这意味着启动app.js应该返回module.exports = app;而不是默认快递http.createServer。只要指定了不同的端口,它们就会同时运行。