• destination {stream.Writable} 数据写入的目标。
    • options {Object} 管道选项。
      • end {boolean} 当读取器结束时终止写入器。默认值: true
    • 返回: {stream.Writable} 目标可写流,如果是 [Duplex] 流或 [Transform] 流则可以形成管道链。

    readable.pipe() 方法绑定可写流到可读流,将可读流自动切换到流动模式,并将可读流的所有数据推送到绑定的可写流。 数据流会被自动管理,所以即使可读流更快,目标可写流也不会超负荷。

    例子,将可读流的所有数据通过管道推送到 file.txt 文件:

    1. const readable = getReadableStreamSomehow();
    2. const writable = fs.createWriteStream('file.txt');
    3. // readable 的所有数据都推送到 'file.txt'。
    4. readable.pipe(writable);

    可以在单个可读流上绑定多个可写流。

    readable.pipe() 会返回目标流的引用,这样就可以对流进行链式地管道操作:

    1. const fs = require('fs');
    2. const r = fs.createReadStream('file.txt');
    3. const z = zlib.createGzip();
    4. const w = fs.createWriteStream('file.txt.gz');
    5. r.pipe(z).pipe(w);

    默认情况下,当来源可读流触发 ['end'] 事件时,目标可写流也会调用 [stream.end()][stream-end] 结束写入。 若要禁用这种默认行为,end 选项应设为 false,这样目标流就会保持打开:

    1. reader.pipe(writer, { end: false });
    2. reader.on('end', () => {
    3. writer.end('结束');
    4. });

    如果可读流在处理期间发送错误,则可写流目标不会自动关闭。 如果发生错误,则需要手动关闭每个流以防止内存泄漏。

    [process.stderr] 和 [process.stdout] 可写流在 Node.js 进程退出之前永远不会关闭,无论指定的选项如何。