2013-07-23 16 views
5

Mam kilka plików o nazwie:grunt-contrib-kawa jeden-do-jednego kompilacji

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

i wszystkie są wkompilowane w jeden plik jquery.js w moim katalogu wyjściowym.

Chociaż wydaje mi się, że to zachowanie może być miłe w niektórych przypadkach, chciałbym je skompilować do różnych plików, takich jak jquery.a.b.js, jquery.a.c.js i tak dalej. Jak mogę to powiedzieć? Contrib-coffeescript?

My Gruntfile.js wygląda następująco:

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'); 

}; 

dzięki za pomoc!

Odpowiedz

10

Problem polega na nazwach zawierających wiele punktów.
Jeśli był to jquery-a-b.coffee, jquery-a-c.coffee itp., Widziałbyś oczekiwany wynik.

Jest to znana nazwa issue (rozszerzenie dotyczy tylko ostatniego okresu) i programiści dokonali tego celowo.
Oto cytat z jednego z nich:

Są dwa sposoby ext może pracować; może rozważyć wszystko po pierwszej kropce rozszerzenia lub po ostatniej kropce rozszerzenie . Wybraliśmy ten pierwszy, ponieważ przypadek użycia jest bardziej powszechny (my napotykamy pliki .min.js przez cały czas). Mówiąc to, możesz użyć opcji zmiany nazwy, aby określić funkcję, która będzie używała dowolnej niestandardowej logiki nazewnictwa, którą potrzebujesz.

Więc jedynym obejściem tego problemu jest usunięcie ext i używać rename takiego:

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'); 
     } 
    }] 
    } 
} 

Aktualizacja dzień Grunt 0,4.3:
Możesz teraz użyć extDot option wraz z ext

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

Dlaczego konieczne jest "spłaszczenie: prawdziwe"? –

+2

@KrisKhaira Wierzę, że opcja 'flatten' nie jest konieczna w tym przypadku, więc usunąłem ją z mojej odpowiedzi. Dziękuję za uwagę. – mutil

3

To działa, więc nie trzeba dodawać pliki ręcznie w gruntFile:

coffee: { 
    glob_to_multiple: { 
    expand: true, 
    flatten: true, 
    cwd: 'app/webroot/coffee/', 
    src: ['*.coffee'], 
    dest: 'app/webroot/', 
    ext: '.js' 
    } 
}, 
  1. CWD: folder, w którym pliki są
  2. src: dopasowanie wzór dla twoich plików, używając glob
  3. dest: Folder, w którym przechodzą twoje pliki.

Zobacz https://github.com/gruntjs/grunt-contrib-coffee#usage-examples dla niektórych próbek zwyczajów

+0

Czy nie ma innych opcji, że byłoby o wiele plików wspomnieć –

+1

Mam edytowany moja odpowiedź – edi9999

+0

Dobra, to rozwiązanie nie kompilować wszystko. –

Powiązane problemy