Comment puis-je écrire une simple fonction de tuyau Gulp?

J’ai essayé pendant un jour d’écrire deux fonctions de pipe, une qui comstack moins de fichiers et une autre qui concuse ces fichiers. Je veux apprendre à écrire des stream / pipes de transformation pour des plugins plus complexes.

Je veux donc savoir comment lire les données d’un autre canal et comment modifier ces données et les envoyer au canal suivant. C’est ce que j’ai jusqu’à présent:

gulp.src(sources) .pipe(through.obj(function (chunk, enc, cb) { var t = this; // console.log("chunk", chunk.path); fs.readFile(chunk.path, enc, function (err,data) { if (err) { cb(err); } less.render(data, { filename : chunk.path, sourceMap : { sourceMapRootpath : true } }) .then(function (outputCss) { // console.log("less result",outputCss); t.push(chunk);// or this.push(outputCss) same result cb(); }); }); })) .pipe(through.obj(function (chunk, enc, cb) { console.log("chunk", chunk.path); // not event getting called. cb(); })) 

Je ne parviens pas à obtenir le résultat de CSS pour chaque fichier du deuxième canal. Comment puis-je l’envoyer?

Eh bien, vous n’avez pas besoin d’utiliser fs ici, vous avez déjà le stream de fichiers (ici votre chunk ).

Un autre point, vous ne renvoyez pas les fichiers sur la pipe, donc je suppose que c’est la raison pour laquelle rien n’est appelé sur votre deuxième.

 var through = require('through2') gulp.src(sources) .pipe(through.obj(function (chunk, enc, cb) { console.log('chunk', chunk.path) // this should log now cb(null, chunk) })) 

Dans ES2015:

 import through from 'through2' gulp.src(sources) .pipe(through.obj((chunk, enc, cb) => cb(null, chunk))) 

Et pour votre exemple spécifique:

 .pipe(through.obj(function (file, enc, cb) { less.render(file.contents, { filename: file.path, ... }) // add other options .then(function (res) { file.contents = new Buffer(res.css) cb(null, file) }) })) 

C’est encore assez basique, je ne vérifie pas les erreurs, si ce n’est pas un stream, etc., mais cela devrait vous donner une idée de ce que vous avez manqué.