2013-07-25 25 views
3

我的Gruntfile出現了一些意想不到的行爲。我註冊了一個如下所示的任務:grunt.registerTask('dev', ['jekyll:server', 'watch:jekyll'])希望它能夠順序啓動一個jekyll服務器,然後觀察我的項目以瞭解特定的文件更改(使用grunt-contrib-watch插件)。一旦它檢測到這些變化,它將自動重新運行jekyll:servergrunt:watch命令在registerTask方法中包含其他任務時永不運行

我遇到的問題是,當我運行grunt dev時,它將啓動Jekyll服務器,但它不會運行watch命令。但是,如果我從grunt dev刪除服務器任務,它將按預期運行watch命令。

下面是我的Gruntfile的內容。任何人都可以幫助我理解發生了什麼?

module.exports = function(grunt) { 

    // Project configuration. 
    grunt.initConfig({ 

    jekyll: { 
     server : { 
     server: true, 
     server_port: 4000, 
     exclude: ['node_modules'] 
     }, 
     prod: { 
     dest: './_site-release' 
     } 
    }, 

    watch: { 
     jekyll: { 
     files: ['_posts/**/*.md', '_layout/*.html', '_includes/*.html', 'index.html'], 
     tasks: ['jekyll:server'] 
     } 
    } 
    }); 

    grunt.loadNpmTasks('grunt-jekyll'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 

    grunt.registerTask('default', 'jekyll:server'); 
    grunt.registerTask('dev', ['jekyll:server', 'watch:jekyll']); 
    grunt.registerTask('release', 'jekyll:prod'); 
}; 

回答

5

server選項使得任務塊成爲持久的。您可以使用任務watch option或類似grunt-concurrent運行jekyllwatch同時:

grunt.initConfig({ 
    concurrent: { 
     target: { 
      tasks: ['jekyll:server', 'watch'], 
      options: { 
       logConcurrentOutput: true 
      } 
     } 
    } 
}); 

grunt.loadNpmTasks('grunt-concurrent'); 
grunt.registerTask('default', ['concurrent:target']); 
+0

完美,謝謝! – Jon

相關問題