2013-07-23 4 views
5

kompilieren Ich habe mehrere Dateien mit dem Namen:Grunzen-contrib-Kaffee one-to-one

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

und sie sind alle in eine jquery.js Datei in meinem Ausgabeverzeichnis kompiliert.

Obwohl ich denke, dass dieses Verhalten in einigen Fällen nett sein könnte, möchte ich sie in verschiedene Dateien wie jquery.a.b.js, jquery.a.c.js und so weiter zu kompilieren haben. Wie kann ich grunt-contrib-coffeScript dazu sagen?

Mein Gruntfile.js sieht wie folgt aus:

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

}; 

Vielen Dank für Ihre Hilfe!

Antwort

10

Das Problem auf den Dateinamen mit mehreren Punkten liegt Nutzungen.
Wenn es war jquery-a-b.coffee, jquery-a.coffee usw., hätten Sie die erwartete Ausgabe gesehen.

Es ist eine bekannte issue (Erweiterung ist nur nach der letzten Periode) und Grunt-Entwickler haben dies absichtlich gemacht.
Hier ist ein Zitat aus einem von ihnen:

Es gibt zwei Möglichkeiten, ext arbeiten könnte; es könnte alles nach der erste Punkt die Erweiterung oder alles nach dem letzten Punkt die Erweiterung betrachten. Wir wählten die erste, weil der Anwendungsfall häufiger ist (wir begegnen .min.js Dateien die ganze Zeit). Davon abgesehen können Sie die Umbenennungsoption verwenden, um eine Funktion anzugeben, die die benutzerdefinierte Benennungslogik verwendet, die Sie benötigen.

So ist die einzige Lösung für jetzt ist ext zu entfernen und rename wie folgt verwenden:

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

-Update ab Grunt 0,4.3:
Sie können nun die extDot option zusammen verwenden mit ext

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

Warum ist "flatten: wahr" notwendig? –

+2

@KrisKhaira Ich glaube, die "flatten" -Option ist in diesem Fall nicht notwendig, also habe ich sie aus meiner Antwort entfernt. Danke, dass du es bemerkst. – mutil

3

Das funktioniert so müssen Sie die Dateien nicht von Hand in Ihrem gruntFile hinzufügen:

coffee: { 
    glob_to_multiple: { 
    expand: true, 
    flatten: true, 
    cwd: 'app/webroot/coffee/', 
    src: ['*.coffee'], 
    dest: 'app/webroot/', 
    ext: '.js' 
    } 
}, 
  1. cwd: den Ordner, in dem Sie Ihre Dateien
  2. src sind: die passende Muster für Ihre Dateien, mit glob
  3. dest: Der Ordner, in dem Ihre Dateien gehen.

Siehe https://github.com/gruntjs/grunt-contrib-coffee#usage-examples für einige Probe

+0

, habe ich meine Antwort –

+1

es nicht andere Optionen sind, diese Lösung nicht alles zusammenstellen. – edi9999

+0

Okay, bearbeitet das wäre eine Menge von Dateien zu erwähnen –