2013-05-19 43 views
4

我開始爲我的一個項目使用GruntJS。 我已經輕鬆完成了使用簡單的別名編寫簡單的構建腳本。GruntJS,多任務和grunt.option

但是,我的腳本包含許多基本相同的任務,唯一的區別是一些參數,如源文件夾和目標文件夾。

例如:

sass: { 
     options:{ 
      trace: true, 
      debugInfo: true, 
      style: 'compressed' 
     }, 
     html: { 
      files: { 
       'build/html/css/main.css': 'sass/html.sass' 
      } 
     }, 
     html2: { 
      files: { 
       'build/html2/css/main.css': 'sass/html2.sass' 
      } 
     }, 
     html3: { 
      files: { 
       'build/html3/css/main.css': 'sass/html3.sass' 
      } 
     } 
    } 

我想實現的是隻有一個任務,然後傳遞參數(DEST,SRC)這項任務。

我試圖實現這種多任務使用:

grunt.registerTask('sass2', 'Run all Sass compilation tasks.', function() { 
    var projects = ['html','html2','html3']; 

    projects.forEach(function(proj){ 
     grunt.config.set('sass.files.dest', 'build/' + proj + '/css/main.css'); 
     grunt.config.set('sass.files.src', 'sass/' + proj + '.sass'); 
     grunt.log.writeln(grunt.config.get('sass.files.dest')); 
     grunt.log.writeln(grunt.config.get('sass.files.src')); 
     grunt.task.run('sass'); 

    }); 
}); 

咕嚕日誌輸出正確的價值觀爲參數,可以然而只有HTML3薩斯被編譯。

我不明白爲什麼只有其中一個項目被編譯,我該如何解決這個問題。

也許有另一種方法來解決這個問題。更好的方法。也許使用模板?

任何形式的幫助或提示,將不勝感激。

謝謝!

回答

6

只使用最後一個配置,因爲grunt.task.run將它們排隊以在當前任務完成後運行。從API

排隊一個或多個任務。

  • 設置配置1
  • 設置配置2
  • 設置配置3:在任務列表每一個指定的任務將立即當前任務完成後,在指定

    的順序,你所擁有的是運行

  • 使用當前活動的配置文件(#3)運行三個任務。

相反,你可以做這樣的事情,以動態地創建大量配置部分,然後運行這些任務:

grunt.config.set('sass.' + proj + '.files', [{ 
    src: 'sass/' + proj + '.sass', 
    dest: 'build/' + proj + '/css/main.css' 
}]); 

,然後調用runtask與新創建的部分:

grunt.task.run('sass:' + proj); 
+0

謝謝你的提示!你幾乎得到它。 你的代碼不起作用。經過一些嘗試,這是工作代碼: grunt.config.set('sass。'+ proj +'.files', [src:'sass /'+ proj +'.sass',dest:' build /'+ proj +'/css/main.css'}]); 然後只需調用grunt.task.run('sass:'+ proj); – Mike

+0

@Mike謝謝,更新了上面的第一個代碼片段,以便稍後找到答案的任何人都可以更輕鬆地使用它。您也可以考慮將此標記爲接受的答案。 – explunit