2014-03-30 48 views
1

我通過grunt使用Compass編譯SASS文件。我的目錄結構是這樣的:當源文件夾包含子文件夾時,設置羅盤目標文件夾

project/ 
    Gruntfile.js 
    package.json 
    sass/ 
     part1/ 
      part1.sass 
    css/ 

而且我Gruntfile.js:

grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    compass: { 
     std: { 
      options: { 
       sassDir: 'sass', 
       cssDir: 'css', 
       specify: 'sass/part1/part1.sass', 
       raw: 'disable_warnings = true\n' 
      } 
     } 
    } 
}); 

當我跑我的gruntfile,羅盤輸出到project/css/part1/part1.css,但我希望它輸出到project/css/part1.css代替。我怎樣才能做到這一點?現在我正在使用on_stylesheet_saved鉤子移動文件,但它不是很優雅。

希望問題清楚,並提前致謝。

+0

如果沒有'Gruntfile.js',不知道是什麼原因導致錯誤,但是這樣的行爲只能由錯誤的配置引起。張貼在這裏,我會看看它。 :)(-1不是我的,順便說一句)... –

+0

@WallaceSidhrée我編輯的問題更清楚,幷包括一個特定的最低限度的例子。任何幫助你可以提供將非常感謝! –

+0

只是提出問題的標題與您試圖解決的問題更相關;) –

回答

1

我重新創建了你的環境。我可以簡化Gruntfile.js更:

module.exports = function(grunt) { 

    // Main project configuration 
    grunt.initConfig({ 
     // Read NPM package information 
     pkg: grunt.file.readJSON('package.json'), 
     // Compass 
     compass: { 
      std: { 
       options: { 
        cssDir: 'css', 
        sassDir: 'sass' 
       } 
      } 
     } 
    }); 

    // Load the grunt tasks 
    grunt.loadNpmTasks('grunt-contrib-compass'); 

    // Compile production files 
    grunt.registerTask('std', [ 
     'compass:std' 
    ]); 

    // Default task(s) 
    grunt.registerTask('default', 'std'); 

}; 

你所得到的是預期的指南針行爲。

讀通過grunt-contrib-compass的自述了一下,我看到:

羅盤上的文件夾級別運行。因此,您不指定任何src/dest,而是定義sassDircssDir選項。

這意味着您無法更改您的CSS編譯到的路徑,只能確定將所有編譯文件寫入的根文件夾路徑。

雖然它可能很煩人,但compass只是假設保持編譯真實的目錄結構應該是你想做的事情 - 這是有點自以爲是。

你仍然可以做你想做的,由:

  1. 重組的文件,以便他們在哪裏compass希望它們是符合你的意圖。即刪除part1目錄並將part1.sass置於sass文件夾下。
  2. 編譯您CSS文件到臨時文件夾一樣tmp,使用像copygrunt-contrib-copy)另一項任務都CSS文件複製到css文件夾,然後用一個任務一樣cleangrunt-contrib-clean)清空tmp文件。您將按照該順序加載任務,以便按正確的順序運行。
相關問題