Сервер 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?
Ответы
Ответ 1
В grunt 0,4 в сочетании с grunt-contrib-connect вы можете запустить длинный сервер с помощью аргумента keepalive
: grunt connect:target:keepalive
или define это как вариант в вашей конфигурации:
grunt.initConfig({
connect: {
target:{
options: {
port: 9001,
keepalive: true
}
}
}
});
Ответ 2
Не используйте 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
, который оставит открытым во время работы с вашими статическими файлами. Обычно это используется в сочетании с задачей watch
, которая запускает набор тестов, когда либо тесты, либо код меняются.
Ответ 3
Задача server
выполняется только до тех пор, пока она необходима, но вы можете оставить ее в стороне. Из комментария от виджета по другому вопросу: в вашем файле 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
Ответ 4
По умолчанию 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){...}