2013-02-08 46 views
9

我正在開發一個小型節點項目,並且使用coffeescript和更少的客戶端代碼。我正在嘗試使用grunt設置我的開發環境。我實現了自定義的咕嚕任務運行的服務器是這樣的:用咕嚕聲運行2個異步任務

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" 

我也想用咕嚕-的contrib手錶插件運行「監視」任務:

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

的問題是:如何使這兩個任務(監視和服務器)同時運行?我想讓服務器啓動並運行,並且不希望每次更改某些客戶端代碼時都重新加載它。在此先感謝

回答

6

前綴它到您的監視任務,並擺脫done = do @async內的服務器任務。

tasks: ['server', 'coffee']

你想在指定的服務器任務的步兵配置的選項是「長期運行」與否。然後,只有在需要長時間運行時才能撥打@async(沒有手錶任務)。

+1

這不起作用,因爲服務器任務不結束,因此從不將控制權重新轉移到監視任務上。 – Griffin

+0

是的,它結束了;正如我在我的回答中所解釋的那樣,刪除允許任務結束的async()調用,然後根據選項有條件地添加它。 – tbranyen

+3

我很困惑。他希望服務器始終長時間運行,並且他希望手錶能夠長時間運行,並且希望它們能夠在同一時間從一次咕嚕聲中運行。這是你在這裏實現的嗎?看起來不像它 –

0

我遇到了同樣的問題,無法從咕task任務中啓動watch和connect服務器。

爲了解決這個問題,我開始使用咕嚕-EXEC服務器作爲後臺進程在我Gruntfile

grunt connect:preview &結束的符號(&)是什麼啓動服務器作爲後臺進程。

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

,然後註冊繁重的任務,這樣

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

我們有了一個更好的辦法做到這一點,但到目前爲止,這是我能想到的最好的。

+0

我正在使用grunt-shell而不是grunt-exec,'&'似乎沒有效果。 –