gpt4 book ai didi

javascript - 如何编写一个简单的 gulp 管道函数?

转载 作者:IT老高 更新时间:2023-10-28 21:52:58 28 4
gpt4 key购买 nike

我已经尝试了一天来编写两个管道函数,一个编译更少的文件,另一个连接这些文件。我想学习如何为更复杂的插件编写转换流/管道。

所以我想知道如何从另一个管道读取数据,以及如何更改该数据并将其发送到下一个管道。这是我目前所拥有的:

 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)
})
}))

这仍然很基本,我不检查错误,如果它不是流等等,但这应该会给你一些关于你错过了什么的提示。

关于javascript - 如何编写一个简单的 gulp 管道函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923523/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com