Сервер grunt не может быть подключен <gruntjs>

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 ответа

В grunt 0.4 в сочетании с https://github.com/gruntjs/grunt-contrib-connect вы можете запустить долго работающий сервер, используя keepalive аргумент: grunt connect:target:keepalive или определите это как параметр в вашей конфигурации:

grunt.initConfig({
  connect: {
        target:{
            options: {
                port: 9001,
                keepalive: true
            }
        }
    }
});

Не используйте ворчание, чтобы служить вашему проекту. 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 - менеджер жизненного цикла пакета, а не инструмент сборки. Экспресс это серверная библиотека. Используйте каждый на своем месте.

Продолжение (2013-08-15)

Исключением из этого правила является ситуация, когда вам нужно предоставить свой проект другим инструментам тестирования в вашем стеке сборки. grunt-contrib-connect Плагин разработан специально для этого случая использования и имеет keepalive настройки конфигурации, которые оставят grunt открытым при обслуживании статических файлов. Это обычно используется в сочетании с watch задача, которая запускает набор тестов при изменении тестов или кода.

server задание выполняется только столько времени, сколько необходимо, но вы можете не допустить его выхода. Из комментария widged на другой вопрос: в вашем grunt.js файл определяет задачу с именем run который запускает задачи server а также watch,

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

По умолчанию Grunt запускает сервер только для тестирования (или любой другой задачи, которая была задана) и, как только он это делает, завершает работу....

Но, к счастью, я нашел решение, которое, добавив это к вашему grunt.js Файл позволит вам (необязательно) остановить выход сервера.

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); }
});

Затем в командной строке назовите это: grunt server wait тогда вы сможете увидеть его в браузере..

Убедитесь, что вы добавили его внутрь module.exports = function(grunt){...}

Другие вопросы по тегам