Запуск 2 асинхронных задач с grunt

Я работаю над небольшим проектом узла, и я использую coffeescript и меньше для кода на стороне клиента. Я пытаюсь настроить свою среду разработки с помощью grunt. Я реализовал пользовательскую задачу grunt для запуска сервера следующим образом:

start = require './start' #just a function to start express.js application
grunt.registerTask 'server', 'Starting server', ->
    grunt.log.write 'Preparing server to start'
    done = do @async
    start (err) ->
        grunt.log.write "server running at localhost:4000"

Я также хочу запустить задачу «смотреть» с помощью плагина grunt-contrib-watch:

grunt.initConfig
    watch:
        coffee:
            files: ['public/coffee/**/*.coffee']
            tasks: ['coffee']
        jade:
            files: ['public/jade/**/*.jade']
            tasks: ['jade']
        less:
            files: ['public/less/**/*.less']
            tasks: ['less']

Вопрос: как заставить эти две задачи (часы и сервер) работать одновременно? Я хочу, чтобы сервер работал и не хотел перезагружать его каждый раз, когда изменяется код на стороне клиента. заранее спасибо


person Community    schedule 08.02.2013    source источник


Ответы (3)


Прикрепите его к своим задачам просмотра и избавьтесь от done = do @async внутри задачи сервера.

tasks: ['server', 'coffee']

Вы хотите указать параметр в конфигурации Grunt, чтобы задача сервера была «длительной» или нет. Затем вы можете вызывать @async только в том случае, если вам нужно, чтобы он работал долго (без задачи наблюдения).

person tbranyen    schedule 09.02.2013
comment
Это не работает, потому что серверная задача не завершается, таким образом никогда не возвращая контроль задаче наблюдения. - person Griffin; 05.11.2013
comment
Да, это заканчивается; как я объясняю в своем ответе, вы удаляете вызов async(), который позволяет завершить задачу, а затем условно добавляете его обратно на основе параметра. - person tbranyen; 06.11.2013
comment
Я запутался. Он хочет, чтобы сервер всегда долго работал, и он хочет, чтобы часы работали долго, и он хочет, чтобы они оба работали одновременно с одного вызова ворчания. Это то, чего вы здесь добиваетесь? Не похоже - person Joe Zim; 30.07.2014

Вы можете запускать две или более задач одновременно, используя любой из этих двух пакетов:

  1. параллельный хрюканье
  2. grunt-concurrent
person az7ar    schedule 23.10.2013

У меня была такая же проблема, когда я не мог запустить сервер просмотра и подключения из задачи ворчания.

Чтобы решить эту проблему, я запустил сервер как фоновый процесс, используя grunt-exec в моем Gruntfile.

Амперсанд (&) в конце grunt connect:preview & запускает сервер как фоновый процесс.

,exec: {
  start_server: {
    command: 'grunt connect:preview &'
  }
}

А затем зарегистрируйте задачу ворчания, как это

grunt.registerTask('preview', ['clean:preview', 'template', 'exec', 'watch' ]);

Должен быть лучший способ сделать это, но пока это лучшее, что я мог придумать.

person Shae Kuronen    schedule 17.03.2013
comment
Я использую grunt-shell вместо grunt-exec, и &, похоже, не имеет никакого эффекта. - person Petr Peller; 22.04.2014