Какова цель серверной задачи gruntjs?

Я учусь продвигать использование gruntjs. Я нашел серверную задачу, но не могу получить точка.

Могу ли я использовать серверную задачу, отображающую объединенные/минимизированные файлы, для тестирования моего приложения (использующего backbone.js) без перемещения или размещения исходных файлов в корневом каталоге веб-сервера? Без апача например.

Если нет, то каково предполагаемое использование серверной задачи?


person gremo    schedule 13.08.2012    source источник


Ответы (3)


Задача server используется для запуска статического сервера с путем base, установленным в качестве корня веб-сайта.

Пример: Подавайте ./web-root как http://localhost:8080/:

grunt.initConfig({
  server: {
    port: 8080,
    base: './web-root'
  }
});

Он будет работать аналогично серверу Apache, обслуживая статические файлы в зависимости от их пути, но использует модуль http://nodejs.org/api/http.html через connect для его настройки (источник).

Если вам нужно, чтобы он обслуживал не только статические файлы, вам следует рассмотреть определение пользовательской server задачи:

grunt.registerTask('server', 'Start a custom web server.', function() {
  grunt.log.writeln('Starting web server on port 1234.');
  require('./server.js').listen(1234);
});

И собственный экземпляр сервера:

// server.js
var http = require('http');
module.exports = http.createServer(function (req, res) {
    // ...
});

Могу ли я использовать сопоставление конкатенированных/минимизированных файлов серверной задачи, чтобы протестировать [...]

Конкатенация и минимизация имеют свои собственные задачи — concat и min -- но может использоваться вместе с задачей server выполнить все 3.


Редактировать

Если вы хотите, чтобы он некоторое время оставался на сервере (а также для grunt), вы можете определить задачу как асинхронную (с серверным 'close' событие):

grunt.registerTask('server', 'Start a custom web server.', function() {
  var done = this.async();
  grunt.log.writeln('Starting web server on port 1234.');
  require('./server.js').listen(1234).on('close', done);
});
person Jonathan Lonowski    schedule 13.08.2012
comment
Ну, что ж, спасибо. У меня уже есть задачи concat/min/lint, но когда я пытаюсь запустить сервер (команда grunt server), настроенный как http://localhost:8080 с файлами и папками, он вскоре завершает работу с сообщением о выполнении задачи. - person gremo; 14.08.2012
comment
@Gremo На самом деле это предназначено: После выполнения задач grunt веб-сервер останавливается. Он не предназначен для запуска сервера для бессрочного/производственного использования; просто за то, что он доступен для других задач, особенно для тестов, которые могут имитировать веб-клиент (http.request() или request). - person Jonathan Lonowski; 14.08.2012
comment
То есть я не могу использовать сервер только для запуска своего приложения, верно? - person gremo; 14.08.2012
comment
@ Гремо Обычно нет. Вы можете определить пользовательскую задачу как асинхронную, которая будет поддерживать работу grunt, пока сервер все еще работает. Смотрите мою правку. - person Jonathan Lonowski; 14.08.2012
comment
Сервер работает до тех пор, пока grunt занят задачами. Быстрый и грязный способ держать его открытым — grunt.registerTask(run, server watch);. Для отмены часы закроют браузер. - person widged; 28.08.2012
comment
реквизит, @widged! grunt.registerTask("run", "server watch") очень умен. Почему бы не сделать это отдельным ответом, чтобы он был более заметен? - person Chris Calo; 25.11.2012
comment
А теперь, как мне использовать инспектор узлов? У меня ошибка: connect ECONNREFUSED Работает ли узел с портом --debug 5858? ошибка - person Totty.js; 18.10.2013
comment
Живая перезагрузка больше не работает, и загружаются некоторые кешированные файлы. Не знаю почему, но это не последняя версия, которая у меня есть в папке моего приложения. - person Totty.js; 18.10.2013
comment
@ Тотти Извини. Но комментарии — не лучшее место для дальнейших вопросов и ответов. Вы разместили их как вопросы? - person Jonathan Lonowski; 18.10.2013
comment
Пока нет, но скоро буду. - person Totty.js; 18.10.2013

Задача server теперь называется задачей connect и включена в пакет grunt-contrib-connect.

Задача connect запускает веб-сервер подключения.

Установите этот плагин с помощью этой команды:

npm install grunt-contrib-connect --save-dev

Примечание. --save-dev включает пакет в devDependencies, см. https://npmjs.org/doc/install.html< /а>

После установки плагина его можно включить в вашем Gruntfile с помощью этой строки JavaScript:

grunt.loadNpmTasks('grunt-contrib-connect');

Запустите эту задачу с помощью команды grunt connect.

Обратите внимание, что этот сервер работает только до тех пор, пока работает grunt. После завершения задач grunt веб-сервер останавливается. Это поведение можно изменить с помощью параметра keepalive и включить отдельно. запустив задачу типа grunt connect:targetname:keepalive. targetname равно «серверу» в приведенном ниже примере кода.

В этом примере grunt connect (или, более подробно, grunt connect:server) запустит статический веб-сервер в http://localhost:9001/, с его базовым путем, установленным в каталог www-root относительно Gruntfile, и любые задачи, запущенные впоследствии, смогут получить к нему доступ.

// Project configuration.
grunt.initConfig({
  connect: {
    server: {
      options: {
        port: 9001,
        base: 'www-root'
      }
    }
  }
});
person Giovanni Cappellotto    schedule 08.08.2013
comment
Это очень полезное обновление. Работает отлично. Спасибо! - person dojosto; 20.12.2013

Суть серверной задачи в том, чтобы иметь быстрый и грязный доступ к статическим файлам для тестирования. сервер grunt НЕ ЯВЛЯЕТСЯ рабочей серверной средой. На самом деле его следует использовать только во время жизненного цикла grunt для передачи ресурсов статического тестирования в среду тестирования. Используйте полноценный сервер, возможно, управляемый сценариями жизненного цикла NPM, для производственных сред.

person David Souther    schedule 27.12.2012