2013-09-05 4 views
15

Ich habe eine Funktion geschrieben, die ich als eine Grunt-Aufgabe verwenden möchte. Ich kann dies tun, indem diese zur Ergänzung der Gruntfile:Registrierung Grunt Aufgaben, deren Code in externen JavaScript-Dateien befindet

grunt.registerTask('foo', function() { 
    // code here 
}); 

Allerdings macht es mehr Sinn, den Funktionscode in einer separaten Datei zu halten. Ich plane, eine Menge dieser benutzerdefinierten Aufgaben zu definieren, und ich möchte die Gruntfile nicht aufblähen.

Ich bin mir nicht sicher, was die bevorzugte Art der Registrierung solcher Aufgaben ist. Ich habe dies zur Arbeit gefunden:

grunt.registerTask('foo', function() { 
    require('./path/to/foo.js')(grunt); 
}); 

Also, ich bin wie im Faust Beispiel die Inline-Funktion, aber dieses Mal, ich bin eine externe Datei geladen und sofort aufgerufen wird. In dieser externen Datei muss ich natürlich schreiben:

module.exports = function (grunt) { 
    // code here 
} 

Das funktioniert, aber es fühlt sich hackish. Gibt es einen geeigneteren Weg, dies zu tun?

Antwort

22

Kurze Antwort: die Alternative zu diesem

grunt.registerTask('foo', function() { 
    require('./path/to/foo.js')(grunt); 
}); 

ist http://gruntjs.com/api/grunt#grunt.loadtasks

Lange Antwort:

Normalerweise, wenn Sie Aufgaben in externen Dateien dort haben werden als andere NodeJS Module serviert. Wenn Sie das also in mehreren Projekten verwenden möchten, sollten Sie es in der Registrierung registrieren. Später in Ihrem Gruntfile.js haben Sie:

grunt.loadNpmTasks('yout-module-here'); 

Die Dokumentation des Grunzen sagt:

Load tasks from the specified Grunt plugin. This plugin must be installed locally via npm, and must be relative to the Gruntfile 

Wenn Sie jedoch nichts an der Registrierung hochladen möchten, sollten Sie verwenden loadTasks

grunt.loadTasks('path/to/your/task/directory'); 

Also, sobald die Aufgabe geladen ist, können Sie es in Ihrer Konfiguration verwenden.

Hier ist eine einfache Grunzen Aufgabe in externer Datei abgelegt:

'use strict'; 

module.exports = function(grunt) { 

    grunt.registerMultiTask('nameoftask', 'description', function() { 

     var self = this; 

     // this.data here contains your configuration 

    }); 
}; 

Und später in Gruntfile.js

grunt.initConfig({ 
    nameoftask: { 
     task: { 
      // parameters here 
     } 
    } 
}); 
+0

Und wie kann ich neu schreiben meine Funktion als Aufgabe? Was wäre die einfachste Einrichtung? Ich habe nur eine Funktion, die ich an einen Namen binden möchte, so dass ich es mit 'grunt name' in der Befehlszeile aufrufen kann. –

+0

Ich habe gerade meine Antwort bearbeitet. – Krasimir

+0

Ich habe dieses Muster ausprobiert. Es funktioniert nicht. Ich bekomme 'Warnung: Aufgabe 'foo" nicht gefunden. "In der Befehlszeile. Ich habe versucht, den Pfad mit einem führenden '. /', Einem führenden '/' und ohne diese anzugeben. –

0

Ich hatte ein ähnliches Problem.

Ich wollte meine grunt Config und benutzerdefinierte Aufgaben nach Funktionen (große UX/UI-Blöcke) und nicht durch technische Features modularisieren. UND ich wollte die Config-Dateien neben Aufgaben-Dateien behalten ... (besser bei der Arbeit an einer großen Legacy-Codebase mit einem abwechslungsreichen Team - 5 Personen mit variierenden JS-Kenntnissen)

Also habe ich meine Aufgaben wie Krasimir externalisiert.

Im gruntfile, schrieb ich:

//power of globbing for loading tasks 
var tasksLocations = ['./grunt-config/default_tasks.js', './grunt-config/**/tasks.js']; 

var taskFiles = grunt.file.expand({ 
    filter: "isFile" 
    }, tasksLocations); 

taskFiles.forEach(function(path) { 
    grunt.log.writeln("=> loading & registering : " + path); 
    require(path)(grunt); 
}); 

Sie den ganzen Text gruntfile hier (externer config und Aufgaben Laden) finden:https://gist.github.com/0gust1/7683132

+0

bekommen Fehler 'Registrierung" Aufgaben "Aufgaben. Initialisierung der Konfiguration ... OK Laden der Tasks "scp.js" ... OK >> Es wurden keine Tasks registriert oder nicht registriert. " ' Laden von "Gruntfile.js" Tasks ... ERROR' – shab

Verwandte Themen