如何编写一个简单的gulp pipe函数?

我一直在努力写两个管道函数,一个可以编译较少的文件,另一个可以合并这些文件。我想学习如何为更复杂的插件编写转换流/管道。

因此,我想知道如何从另一个管道读取数据,以及如何更改该数据并将其发送到下一个管道。这是我到目前为止的内容:

 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();

}))

我无法outputCSS在第二个管道中获得每个文件的。如何发送?

回答:

嗯,您不需要在fs这里使用,您已经获得了文件流(在此处chunk)。

还有一点,您没有将文件发送回管道,所以我想这就是为什么第二个文件不调用的原因。

const through = require('through2')

gulp.src(sources)

.pipe(through.obj((chunk, enc, cb) => {

console.log('chunk', chunk.path) // this should log now

cb(null, chunk)

}))

在ES2015中:

import through from 'through2'

gulp.src(sources)

.pipe(through.obj((chunk, enc, cb) => cb(null, chunk)))

对于您的特定示例:

.pipe(through.obj((file, enc, cb) => {

less.render(file.contents, { filename: file.path, ... }) // add other options

.then((res) => {

file.contents = new Buffer(res.css)

cb(null, file)

})

}))

这仍然是非常基本的,如果不是流,我不会检查错误,依此类推,但这应该给您一些有关您错过的内容的提示。

以上是 如何编写一个简单的gulp pipe函数? 的全部内容, 来源链接: utcz.com/qa/412564.html

回到顶部