2014-07-22 43 views
3

我想在我的Gruntfile.js中定義一個shell命令樹,使用grunt-exec編寫shell命令。如何註冊多個grunt-exec任務?

我可以爲單個命令執行此操作,但我無法弄清寫入多組命令的語法,並且可以逐個或按組地調用它們。

請問有人可以提供一個完整的例子Gruntfile.js與以下任務結構?

test: `npm test` 
lint: 
    jshint: `jshint .` 
    csslint: `csslint .` 

我從make世界的到來,所以我真的希望這個工作流程推到我的Node.js的項目,該死的節點社區公約。

我想grunt默認爲npm test

我想grunt lint同時執行jshint .csslint .

我想grunt jshint僅執行jshint .

回答

5

咕嚕多任務支持多個目標,但它們不能嵌套。但是你可以註冊執行其他任務的任務。

Gruntfile.js:

module.exports = function(grunt) { 
    grunt.initConfig({ 
     exec: { 
      test: "npm test", 
      jshint: "jshint .", 
      csslint: "csslint ." 
     } 
    }); 

    grunt.loadNpmTasks("grunt-exec"); 

    grunt.registerTask("default", ["exec:test"]); 
    grunt.registerTask("test", ["exec:test"]); 
    grunt.registerTask("lint", ["exec:jshint", "exec:csslint"]); 
}; 

注意,已經有很多可用的咕嚕任務,如grunt-contrib-jshint,這使事情變得更簡單。

+0

訣竅是列出每個子任務(grunt/grunt-exec似乎不允許寫入它們嵌套)。然後將它們重新註冊到層次結構中。 – mcandre

1

咕嚕讓你註冊的名字任務,並且任務任務。通過字符串字面任務名稱的陣列很容易做到,例如:

grunt.registerTask('default', ['test']); 
grunt.registerTask('lint', ['jshint', 'csslint']); 

jshint如果你將它定義爲jshintgrunt.initConfig裏面應該已經被註冊。請記住,對於節點程序而言,一切都非常同步。任務將按照您提供的順序運行。

編輯:如果您稍後需要它,您還可以registerTask函數而不是任務名稱數組。這就是你如何編寫一個可以執行異步工作的任務,或者你有非常嚴格的可能使用控制流邏輯的排序要求。儘可能堅持只根據任務名稱進行註冊。