2014-04-19 8 views
6

Ich bin auf der Suche nach einer Möglichkeit, den Dateinamen als Kommentar zu jeder Datei im Stream einzufügen. Sie haben also eine Kommentarzeile mit dem Dateipfad in der verketteten Zieldatei.Gulpjs Verkettung und Dateinamen

Was es jetzt tut:

pseudocode: concat(file1, file2) 
# output: 
# contents of file 1 
# contents of file 2 

Was ich erreichen möchte:

pseudocode: concat(add_comments(file1, file2)) 
# output: 
# // file1 
# contents of file 1 
# // file2 
# contents of file 2 

Antwort

9

Sie können the gulp-wrap plugin verwenden Sie den Dateinamen vorangestellt wird, bevor verketten:

var wrap = require('gulp-wrap'); 

// in your task... 
    return gulp.src('src/**/*.js') 
     .pipe(wrap('//<%= file.path %>\n<%= contents %>')) 
     .pipe(concat('output.js')) 
     .pipe(gulp.dest('build')) 

Das Wrap-Plugin ermöglicht das Umbrechen den Inhalt eines Elements im Stream mit einer lodash- (oder Unterstrich-) Vorlage. Es bietet contents und file.* Eigenschaften automatisch.

Die Vorlage I erstellt ist sehr einfach: es gibt zwei Schrägstriche für den Kommentar, der die Datei path, ein Newline und gibt dann den gleichen Inhalt wie in vergangen

+0

Genau das, was ich gesucht habe! Vielen Dank! –

+1

Danke! Nun, wie kann ich den Dateinamen und nicht den vollständigen Pfad erhalten? "file.name" hat nicht funktioniert. Wie könnte man herausfinden, was alle Eigenschaften im FILE-Objekt sind? – getsetbro

+1

@brOlite - 'Datei' scheint ein Vinyl-Objekt zu sein, siehe https://www.npmjs.com/package/vinyl. Die Verwendung von 'file.relative' hat für mich funktioniert. – Chris

2

ich tat es mit gulp-insert.. Es hat eine "Transform" -Funktion, wo Sie den Dateiinhalt und das Vinyl-Dateiobjekt erhalten und Sie den neuen Inhalt zurückgeben. So können Sie das tun:

.pipe(insert.transform(function(contents, file){ 
    return '// ' + file.path + '\n' + contents; 
})); 
+0

Um nicht zu sagen, die akzeptierte Antwort ist keine Lösung, aber ich fand Schluck-Einsatz viel flexibler für meinen Anwendungsfall. –