Javascript 如何编写一个简单的gulppipe函数?
我已经试着写了一天的两个管道函数,一个编译更少的文件,另一个连接这些文件。我想学习如何为更复杂的插件编写转换流/管道 所以我想知道如何从另一个管道读取数据,以及如何更改该数据并将其发送到下一个管道。这就是我到目前为止所做的:Javascript 如何编写一个简单的gulppipe函数?,javascript,node.js,gulp,Javascript,Node.js,Gulp,我已经试着写了一天的两个管道函数,一个编译更少的文件,另一个连接这些文件。我想学习如何为更复杂的插件编写转换流/管道 所以我想知道如何从另一个管道读取数据,以及如何更改该数据并将其发送到下一个管道。这就是我到目前为止所做的: gulp.src(sources) .pipe(through.obj(function (chunk, enc, cb) { var t = this; // console.log("chunk", chunk.path); fs
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();
}))
我无法为第二个管道中的每个文件获取
输出css
。我如何发送它?好吧,您不需要在这里使用fs
,您已经获得了文件流(这里是您的块
)
还有一点,您没有将文件发送回管道,所以我想这就是为什么在第二个管道上不调用任何内容的原因
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)
}))
2015年欧洲标准:
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)
})
}))
这仍然是非常基本的,我不检查错误,如果它不是流等等,但这应该会给你一些提示,说明你错过了什么。@vsync Simple in gulp,在不同的情况下可能更容易languages@vsync,您是否在使用其他内容而不是通过来执行此操作?如果是这样,请写一个更好的答案。这将使我们所有人受益:)@vsync我认为你越界了。问题是如何编写一个简单的管道函数。我已经提供了这个问题的答案,如果你想知道gulp是如何工作的,你应该去他们的存储库。Stackoverflow是“唯一”一个你知道的问答网站。是的,如果我记得正确的话,会有贯穿的2个npm包。在我的管道中的下一步,“结束”永远不会发生?可能会帮助一些人。