2016-03-06 56 views
3

這也可能會被重複的問題,但我無法找出一個解決方案,我的要求咕嚕動態DEST位置青菜

我想創建一個SASS咕嚕的任務,可以在動態位置生成CSS文件。這裏是我的結構

 
/components 
--> xyz 
    --> scss 
    --> xyz.a.scss 
    --> xyz.b.scss 
--> abc 
    --> scss 
    --> abc.a.scss 
    --> abc.b.scss 

繁重的任務可以即

 
/components 
--> xyz 
    --> scss 
    --> xyz.a.scss 
    --> xyz.b.scss 
    --> css 
    --> xyz.a.css 
    --> xyz.b.css 
--> abc 
    --> scss 
    --> abc.a.scss 
    --> abc.b.scss 
    --> css 
    --> abc.a.css 
    --> abc.b.css 

我現在SASS任務創建一個新的相對於它的組件文件夾,生成SCSS

sass: { 
    dist: { 
      files: [{ 
      expand: true, 
      cwd: '<%= yeoman.client %>/components/', 
      src: ['**/*.scss'], 
      dest: '<%= yeoman.client %>/components/', 
      extDot: 'last', 
      ext: '.css' 
      }] 
    } 
}, 
的同一文件夾中的CSS文件

我知道我們可以通過在dest中提供組件文件夾名稱來實現此目的,例如對於xyz組件我可以使用dest作爲<%= yeoman.client%>/components/xyz/CSS。但是我將不得不爲每個組件編寫單獨的任務。有沒有一種方法可以將dest保存在同一個父文件夾中,而無需真正指定文件夾的名稱?即src:['**/scss/*.scss']和dest是:['**/css/']有沒有辦法做到這一點?

+0

只是爲了澄清,[編輯]你有一個SASS文件,並且你希望每個項目都能被處理到不同的地方?你運行一次,它輸出的CSS到哪裏?所有項目一次?我不明白你想要完成的任務背後的原因。 – suzumakes

+0

對不起,如果我的問題不夠清楚。忽略項目的事情,我編輯了這個問題。希望它是有道理的。 –

+0

我認爲你的樣式(組件>文件夾> css | scss>文件)有一個四級分層結構,就我所能說的最好。您想知道Grunt是否可以命名第二級容器文件夾並通過所有組件遞歸?似乎你有一個項目架構問題。如果每個組件只有一個scss文件,則根本不需要這個二級文件夾。只需將所有scss組件放在一個文件夾中,然後將它們輸出到CSS文件夾。也許我失去了一些東西...... – staypuftman

回答

1

您可以使用動態參數的任務傳遞:

例如:

grunt sass:xyz 

比代碼,你可以使用這樣的事情:

sass: { 
dist: { 
     files: [{ 
     expand: true, 
     cwd: '<%= yeoman.client %>/components/', 
     src: ['**/<%= grunt.task.current.args[0] %>/sass/*.scss'], 
     dest: '<%= yeoman.client %>/components/<%= grunt.task.current.args[0] %>/css', 
     extDot: 'last', 
     ext: '.css' 
     }] 
} 
}, 

的唯一的東西您必須設置一個通用任務,例如對所有組件執行它:

grunt.registerTask('sassAll', [ 'sass:xyz', 'sass:abc' ]); 

甚至可以產生一個陣列和循環它:

grunt.registerTask('sassAll', function() { 
    gruntUtils.sassTasks.forEach(function(param){ 
     grunt.task.run('sass:' + param); 
    }); 
}); 

var gruntUtils = { 
    sassTasks : [ 'xyz', 'abc' ] 
}; 

可以使用用於設定甚至更多參數DEST和來源:

grunt sass:xyz/sass:xyz/css 

和參照第二參數:

<%= grunt.task.current.args[1] %> 

我找到了一個方法以檢索目錄(未子目錄)的基座一個內:

var templates = grunt.file.expand({ 
       filter: "isDirectory", 
       cwd: "(your base dir path in relation to the gruntfile.js)/components" 
       },["*"]); 

var dirs = templates.map(function (t) { 
    return t; 
}); 

比你有一個數組(dirs),而不是使用[ 'xyz', 'abc' ]

+0

感謝您的支持。我想它是關閉的,但我們仍然需要提供組件文件夾名稱。整個目的是爲了避免使用組件文件夾名稱 –

+0

解釋了一種以自治方式採用目錄的方法,但我不知道是否有可能在不編輯插件代碼的情況下做你想做的事情。無論如何,您不必自己寫文件夾名稱,只需要一項任務! –

+0

我想我得到了我需要的東西。 –