2013-07-23 69 views
5

我點名幾個文件:咕嚕-的contrib咖啡一到一個編譯

  • jquery.abcoffee
  • jquery.accoffee
  • jquery.adcoffee

並且它們都被編譯到我的輸出目錄中的一個jquery.js文件中。

雖然我認爲這種行爲在某些情況下可能不錯,但我想讓它們編譯成不同的文件,如jquery.a.b.jsjquery.a.c.js等。我怎麼能告訴grunt-contrib-coffeescript這麼做?

我Gruntfile.js看起來是這樣的:

module.exports = function (grunt) { 
    grunt.initConfig({ 
     coffee: { 
      dist: { 
      files: [{ 
       expand: true, 
       flatten: true, 
       cwd: 'app/webroot/coffee', 
       src: ['{,*/}*.coffee'], 
       dest: 'app/webroot/js', 
       ext: '.js' 
      }] 
      } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-coffee'); 

}; 

感謝您的幫助!

回答

10

問題出在具有多個點的文件名。
如果它是jquery-a-b.coffee,jquery-a-c.coffee等,你會看到預期的輸出。

這是一個已知的issue(擴展只在上一段時間後)和咕嚕聲開發者故意這樣做。
以下是其中之一的報價:

有兩種方式可以工作;它可以考慮 第一個點擴展名後的所有內容,或者最後一個點後面的所有內容點 擴展名。我們選擇前者是因爲用例更爲常見(我們 一直都會遇到.min.js文件)。也就是說,您可以使用 重命名選項來指定一個函數,該函數將使用您需要的任何自定義命名邏輯。

所以,現在唯一的解決方法是刪除ext和使用rename這樣的:

coffee: { 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: 'app/webroot/coffee', 
     src: ['{,*/}*.coffee'], 
     dest: 'app/webroot/js', 
     rename: function(dest, src) { 
     return dest + '/' + src.replace(/\.coffee$/, '.js'); 
     } 
    }] 
    } 
} 

更新爲0.4咕嚕的。3:
您現在可以使用extDot option隨着ext

ext: '.js', 
extDot: 'last' 
+0

爲什麼'flatten:true'是必要的? –

+2

@KrisKhaira我相信'flatten'選項在這種情況下不是必需的,所以我將它從我的答案中刪除。感謝您的注意。 – mutil

3

這工作,所以你不必用手在gruntFile添加的文件:

coffee: { 
    glob_to_multiple: { 
    expand: true, 
    flatten: true, 
    cwd: 'app/webroot/coffee/', 
    src: ['*.coffee'], 
    dest: 'app/webroot/', 
    ext: '.js' 
    } 
}, 
  1. CWD:在您的文件
  2. SRC的文件夾:匹配模式爲您的文件,使用glob
  3. dest:您的文件所在的文件夾。

https://github.com/gruntjs/grunt-contrib-coffee#usage-examples一些用法示例

+0

難道就沒有其他的選擇,這將是一個很大的文件提 –

+1

我已經編輯我的答案 – edi9999

+0

好吧,這個解決方案並不編譯任何東西 –