2013-06-09 9 views
17

Ich habe ein Projekt mit mehreren Unterordnern, die JavaScript-Dateien enthalten, die ich verketten möchte. Was wäre der richtige Weg, sie zu konfigurieren?Dynamische Zuordnung für Ziele in grunt.js

z.

Quelle: /modules/$modulename/js/*.js (mehrere Dateien) dest: /modules/$modulename/js/compiled.js

Also, was ich tun möchte, zu kompilieren ist JS- Dateien einer unbekannten/nicht konfigurierten Anzahl von Unterordnern ($ modulename) in eine Datei pro Unterordner.

Ist das möglich?


die folgende Funktion (gebaut nach Anweisungen des hereandnow78) hat den Zweck erfüllt:

grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand('./modules/*').forEach(function(dir){ 

     // get the current concat config 
     var concat = grunt.config.get('concat') || {}; 

     // set the config for this modulename-directory 
     concat[dir] = { 
      src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'], 
      dest: dir + '/js/compiled.js' 
     }; 

     // save the new concat config 
     grunt.config.set('concat', concat); 

    }); 

}); 

danach i preparemodulejs vor dem concat Job in meiner Standardkonfiguration setzen.

Antwort

32

müssen Sie wahrscheinlich Ihre eigene Aufgabe codieren, wo Sie über Ihre Unterordner iterieren und dynamisch an Ihre concat-Konfiguration anhängen.

grunt.registerTask("your-task-name", "your description", function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand("./modules/*").forEach(function (dir) { 

    // get the current concat config 
    var concat = grunt.config.get('concat') || {}; 

    // set the config for this modulename-directory 
    concat[dir] = { 
    src: ['/modules/' + dir + '/js/*.js', '!/modules/' + dir + '/js/compiled.js'], 
    dest: '/modules/' + dir + '/js/compiled.js' 
    }; 

    // save the new concat configuration 
    grunt.config.set('concat', concat); 
    }); 
    // when finished run the concatinations 
    grunt.task.run('concat'); 
}); 

laufen diese mit:

$ grunt your-task-name 

dieser Code ist nicht getestet, aber ich denke, es ist Ihre Aufgabe, tun sollten.

TIPP: Sie können diesen Code in eine externe Datei einfügen und in Ihre Gruntdatei aufnehmen, wenn Sie Ihre Gruntdatei klein halten möchten, z. setzen diese in eine Datei in einem Aufgaben-Verzeichnis:

module.exports = function(grunt) { 
    grunt.registerTask("your-task-name", "your description", function() { 
    ... 
    }); 
}; 

und lädt in Ihrer gruntfile:

grunt.loadTasks("./tasks"); 
+0

@ hereannow78 dieser Ansatz ist sehr gut, ich habe ganz vergessen, dass ich in der Dateistruktur lesen kann. Ich werde ein Update in die Frage stellen, welche Funktion funktioniert. – Patrick

+0

+1 für das Vorschlagen des Verzeichnisses 'tasks'. Zu viele aufgeblähte Gruntfiles da draußen. – ZenMaster

+0

Dies ist ziemlich alt, gibt es eine Möglichkeit, Ordner aus dem übergeordneten Verzeichnis auszuschließen? – pcnate

Verwandte Themen