2014-05-25 9 views
5

Ich muss eine Build-Aufgabe für bestimmte Dateien anwenden. Um sie zu finden, verwende ich die typische Vorlage. Aber ich kann nicht verstehen, wie man die Argumente (Dateipfad) von gulp.src übergibt.Wie man Gulp Task mit Params starten?

Erwünschte Lösung.

gulp.task('bundles', function() { 
    gulp.src('bundles/**/*.js'). 
    pipe(gulp.start('build', file.path)); 
}); 

gulp.task('build', function (path) { 
    // use here 
}); 

Antwort

1

Frage ist ein wenig abgestanden, und ich bin nicht sicher, ob ich völlig verstehen, was Sie versuchen, hier zu erreichen, aber ich denke, was Sie suchen ist lazypipe

, Sie möchten die Frage klären, ob das ist, nicht das, was Sie suchen

Verwendungsbeispiel:

var lazypipe = require('lazypipe'), 
g = require('gulp-load-plugins')({lazy: true}), 

jsTransformPipe = lazypipe() 
    .pipe(g.jshint) // <-- Notice the notation: g.jshint, not g.jshint() 
    .pipe(g.concat, 'bundle.js'), // <-- Notice how the param is passed to g.concat, as a second param to .pipe() 

jsSourcePipe = lazypipe() 
    .pipe(gulp.src, './**/*.js'); 

gulp.task('bundle', function() { 
    jsSourcePipe() 
     .pipe(jsTransformPipe()) // <-- You execute the lazypipe by calling it as a function 
     .pipe(gulp.dest('../build/'); 
}); 

Mit lazypipe Sie im Grunde ein Rohr für die zukünftige Verwendung schaffen; hoffe, diese Hilfe

1

(Kann nicht wegen rep Kommentar, sorry)

Ich gehe davon aus, dass Ihr Beispielcode nicht mit allem gefüllt ist, aber warum Sie diese Aufgaben nicht fusionieren und nutzen Sie Ihre gulp.src() in Ihrer Build-Task, anstatt eine andere Task aufzurufen.

Vielleicht ist es für Sie nützlich, aber mit dem, was Sie zeigen, kann ich keine Erklärung finden, warum Sie dies tun, anstatt einfach mit etwas los wie:

gulp.task('build', function (path) { 
    gulp.src('bundles/**/*.js) 
    //Your code for this task 
}); 

Natürlich, entfernt es das Bündel Aufgabe, aber es ist nicht so nützlich, wie es ist. Zögern Sie nicht zu kommentieren, wenn ich falsch liege und ich werde versuchen, Ihnen so viel wie möglich zu helfen.

0

Zunächst einmal gulp.task('build', function (path) wird nie funktionieren. Das einzige gültige Argument für Schlucktasks ist ein Rückruf, um die Beendigung der asynchronen Task zu signalisieren. Wenn Sie versuchen würden, obiges auszuführen, würde Schluck erwarten, dass path eine Funktion ist, und die Aufgabe würde niemals abgeschlossen werden, wenn diese Funktion nicht aufgerufen würde. In diesem Beispiel sollte die Task 'build' eine reguläre Funktion sein, die von der Pipes 'bundles' aufgerufen wird, keine Task.

Die bessere Frage wäre: Wie führe ich eine benutzerdefinierte Funktion in einem Schluckrohr? Plugins wie gulp-tap bringen Sie vielleicht in die Nähe, aber es ist nicht schwierig, ein Inline-Gulp-Plugin zu erstellen, das Ihre Funktion aufruft.

Gulp-Pipes empfangen einen through2 Objektstrom, der eine vinyl file object, eine Codierung und einen Rückruf enthält. Hier ist ein Grundgerüst jede beliebige Funktion gegen die Dateien in einem Zuge Rohr für den Aufruf:

var gulp = require('gulp'); 
var through = require('through2'); 

gulp.task('stack', function() { 
    return gulp.src('./src/*.js') 
    .pipe(through.obj(function(file, enc, cb) { 
     // file.path is the full path to the file 
     myBuildFunction(file.path); 
     cb(null, file); 
    })) 
    .pipe(gulp.dest('./build/')); 
}) 

Dies kann unglaublich mächtig sein. Um den Inhalt der Datei zu ändern, ändern Sie einfach den file.contents Puffer. Um die Datei umzubenennen oder zu verschieben, ändern Sie file.path. Alles kann in den natürlichen Pfeifen des Schluckes getan werden.