13
module.exports = function(grunt) {

  // Project configuration.
    grunt.initConfig({
      server: {
        port: 8888,
        base: '.'
      }
    });

};

C:\Program Files\nodejs\test\grunt>
C:\Program Files\nodejs\test\grunt>grunt server
Running "server" task
Starting static web server on port 8888.

完成,没有错误。

但无法通过输入连接[http://127.0.0.1:8888][1] in browsers ! jiong~

如何在 windows 或 unix 中解决这个问题?

4

4 回答 4

26

在结合grunt-contrib-connect 的grunt 0.4 中,您可以使用参数运行长时间运行的服务器keepalivegrunt connect:target:keepalive或将其定义为配置中的选项:

grunt.initConfig({
  connect: {
        target:{
            options: {
                port: 9001,
                keepalive: true
            }
        }
    }
});
于 2012-12-03T03:26:29.797 回答
5

不要使用 grunt 为您的项目服务。Grunt 是一个构建工具。相反,使用 npm 生命周期脚本。

server.js

var express = require("express"),
    app = express();
app.use('/', express.static(__dirname));
app.listen(8888);

package.json

{
    "name": "my-project",
    "scripts": {
        "start": "node server.js"
    },
    "dependencies": {
        "express": "3"
    }
}

现在你可以跑步了npm start,生活会很棒。Grunt 是一个构建工具,而不是一个服务器。npm 是包生命周期管理器,而不是构建工具。Express 是一个服务器库。在正确的位置使用每个。

跟进 (2013-08-15)

此规则的例外情况是当您需要将项目提供给构建堆栈中的其他测试工具时。该grunt-contrib-connect插件是专门为这个用例而设计的,并且有一个keepalive配置设置,可以在提供静态文件时让 grunt 保持打开状态。这通常与watch在测试或代码更改时运行测试套件的任务结合使用。

于 2012-12-27T02:30:31.217 回答
4

server任务仅在需要时运行,但您可以阻止它退出。从小部件对另一个问题的评论中:在您的文件中定义一个名为的任务,它运行任务和.grunt.jsrunserverwatch

grunt.registerTask("run", "server watch");

任务无限期地运行,因此watch它阻止server任务结束。只要确保您也有该watch任务的配置。这一切都在您的grunt.js文件中:

module.exports = function (grunt) {
  // …
  grunt.initConfig({
    // …
    watch: {
      files: "<config:lint.files>",
      tasks: "lint qunit",
    },
    // …
  });

  grunt.registerTask("run", "server watch");
};

从命令行只需键入:

$ grunt run

服务器将保持正常运行。

或者,正如@NateBarr 指出的那样,您可以从命令行运行:

$ grunt server watch
于 2012-11-25T01:51:06.513 回答
0

By default Grunt starts up the server just for testing (or any other task asked..) and as soon as it's done it exits....

But fortunately I found a solution which by adding this to your grunt.js file will let you (optionally) halt the server from exiting.

grunt.registerTask('wait', 'Wait for a set amount of time.', function(delay) {
   var d = delay ? delay + ' second' + (delay === '1' ? '' : 's') : 'forever';
   grunt.log.write('Waiting ' + d + '...');
   // Make this task asynchronous. Grunt will not continue processing
   // subsequent tasks until done() is called.
   var done = this.async();
  // If a delay was specified, call done() after that many seconds.
   if (delay) { setTimeout(done, delay * 1000); }
});

Then in your command line call it: grunt server wait then you should be able to see it in the browser..

Make sure you add it inside module.exports = function(grunt){...}

于 2012-11-19T15:59:22.127 回答