一天来,我一直在try 编写两个管道函数,一个编译更少的文件,另一个连接这些文件.我想学习如何为更复杂的插件编写转换流/管道.

所以我想知道如何从另一个管道读取数据,以及如何修改该数据并将其发送到下一个管道.这就是我目前的情况:

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

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

这仍然是非常基本的,我不判断错误,如果它不是流等等,但这应该给你一些提示,说明你错过了什么.

Node.js相关问答推荐

在导入时未找到Pupeteer-PAGE-Proxy包

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

Node.js PNG缓冲区获取未知图像格式错误

为什么这个verifyToken函数从未被调用过?

类扩展值[object object]不是构造函数或null

Nestjs swc 错误:找不到模块项目路径/src/app.module

当 Got 包因错误 JSON 崩溃时如何获取响应文本?

MongoDB - mongoose :如何查询这个? 填充()不起作用.它显示空

将文件传递到 AWS lambdas(nodejs) + API 网关后重新上传文件

为什么要加密 CSRF 令牌?

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

如何刷新 youtube-data-api v3 的访问令牌

我可以通过 JNI 从 Node.js 调用 Java 吗?如何?

NodeJS为exec设置环境变量

使用 Socket.io 将客户端连接到服务器

Node.js, require.main === 模块

npm package.json 操作系统特定脚本

chart.js 无法创建图表:无法从给定项目获取上下文

使用 node 的内置调试器判断变量?

在 Node.js 中获取终端的宽度