2013-11-21 20 views
3

當您使用咕嚕新的任務,即:Grunt.js:我如何自己標準化文件,Grunt的做法?

grunt.registerMultiTask('name', 'description', function() {...});

一個文件對象是任務函數內部提供的this.files。這是在grunt配置中查看傳遞到task.files的值並解析它的標準化結果,可以擴展任何通配符。

問題1:

第一個問題是,我有需要遞歸潛在幾次的任務。每一次,它都希望使用文件對象來獲取所有文件的最新列表,以匹配初始配置參數。例如:

grunt.registerMultiTask('sometask', 'description', function sometask() { 
    var files = this.files; 
    //do some stuff with files, then run this func again if needbe: 
    if(somecondition) sometask.call(this); 
}); 

這裏的問題是,該文件對象不更新,以反映我對文件結構所做的任何更改,所以在下一次函數被調用,文件列表可能過時。

我想什麼,能夠做的是一樣的東西:

grunt.registerMultiTask('sometask', 'description', function sometask(renormal) { 
    //update this.files if we need to: 
    if(renormal) { 
     this.files = renormalize(this.data.files); 
    } 
    var files = this.files; 
    //do some stuff with files, then run this func again if needbe: 
    if(somecondition_is_matched) sometask.call(this, renormal); 
}); 

問題2:

此外,也許我想打一個插件,需要兩批文件的映射,所以在繁重的配置,我可能有類似:

grunt.initConfig({ 
    ... 
    someplugin: { 
     filesOne: [{ 
      cwd: "hello" 
      src: ["something/**"], 
      dest: "another" 
     }], 
     filesTwo: { 
      "another2": ["soemthing2/*", "!something2/*.js"] 
     } 
    } 
    ... 
}); 

而且在插件中,我希望能夠正常化任何filesOnefilesTwo是,就像咕嚕規範化「文件」,以便用戶可以輸入所有常用格式的src-dest文件映射。

所以..

繁重的API似乎暴露功能拓展模式等,但似乎並沒有任何提供實現它的引擎蓋下不與文件對象正常化。

有什麼我失蹤/一些接受的方式來做到這一點?

回答

1

其實是有方法grunt.task.normalizeMultiTaskFiles

grunt.registerMultiTask('sometask', 'description', function() { 
    var filesOne = grunt.task.normalizeMultiTaskFiles(
     {files: this.data.filesOne}, this.target); 

    var filesTwo = grunt.task.normalizeMultiTaskFiles(
     {files: this.data.filesTwo}, this.target); 
}) 
相關問題