# @budibase/pouchdb-replication-stream 中文文档

规范地址：https://npmcn.com/package/%40budibase/pouchdb-replication-stream/

版本：1\.2\.11
npm 元数据更新时间：2026-08-17T10:37:35.347Z
中文译文更新时间：2026-11-08T18:18:17.868Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40budibase/pouchdb-replication-stream
原文对照：https://npmcn.com/package/%40budibase/pouchdb-replication-stream/?lang=original
源码仓库：https://github.com/nolanlawson/pouchdb-replication-stream

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：418 kB，26 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：5 个
- 首次发布：2023-02-06T16:05:27.186Z
- 最新版本发布：2024-06-05T14:31:53.815Z
- 近 30 天下载量：38766（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 0 个）

## 中文简介

PouchDB/ CouchDB 作为流复制

## 安装

```sh
npm install @budibase/pouchdb-replication-stream
```

也可以使用：`pnpm add @budibase/pouchdb-replication-stream`、`yarn add @budibase/pouchdb-replication-stream`、`bun add @budibase/pouchdb-replication-stream`

## README

# PouchDB 复制流

[![Build Status](https://travis-ci.org/nolanlawson/pouchdb-replication-stream.svg)](https://travis-ci.org/nolanlawson/pouchdb-replication-stream)

`ReadableStream`s 和 `WritableStream`s 用于PouchDB/CouchDB复制.

基本上,你可以复制两个数据库, 只需把溪流连接起来.

这有许多用途:

1.  将数据库丢入文件,然后将同一文件加载到另一个数据库.
2.  通过将 CouchDB 的内容倾倒到 HTTP 端点来快速地进行初始复制,然后在浏览器中被装入 PouchDB .
3.  在网络套接字上复制吗 ? 蓝牙? 为了NFC? 为什么不呢? 由于复制流只是JSON平版文字,你可以通过任何传输机制发送.
4.  定期备份您的数据库.

## 工具套装

-   [邮袋db-dump-cli](https://github.com/nolanlawson/pouchdb-dump-cli)
-   [邮袋装入量](https://github.com/nolanlawson/pouchdb-load)
-   [特快邮袋-复制-流](https://github.com/conor-mac-aoidh/express-pouchdb-replication-stream)

## 实例

你用得着 `pouchdb-replication-stream` 将:

-   [向字符串倾斜](https://npmcn.com/package/%40budibase/pouchdb-replication-stream/#readme-dumping-to-a-string)
-   [用内流复制](https://github.com/nolanlawson/pouchdb-replication-stream#stream-directly-without-the-dump-file)
-   做你能做的溪流:)

## 使用量

我们假设你有两个数据库 不论他们是偏僻的还是本地的:

```js
var db1 = new PouchDB('mydb');
var db2 = new PouchDB('http://localhost:5984/mydb');
```

让我们将 db1 的全部内容丢弃到一个使用 `dump()`数字 :

```js
var ws = fs.createWriteStream('output.txt');

db1.dump(ws).then(function (res) {
  // res should be {ok: true}
});
```

现在,让我们把文件读到另一个数据库,使用 `load()`数字 :

```js
var rs = fs.createReadStream('output.txt');

db2.load(rs).then(function (res) {
  // res should be {ok: true}
});
```

恭喜,你的数据库正在同步 和以前一样

```js
db1.replicate.to(db2);
```

## API 密码

### db.dump( 流 \[, 选择 )

丢弃 `db` 改为 `stream` 用给定的 `opts`返回承诺.

这个 `opts` 直接传递给 `replicate()` API 密码 [如本文所述](http://pouchdb.com/api.html#replication)。特别是,您可能想要设定:

-   `batch_size` - 每个输出块中要堆放多少文件。 默认为50.
-   `since` - 那个 `seq` 从那里开始读取变化.

允许您通过的选择有: `batch_size`, (中文(简体) ), `batches_limit`, (中文(简体) ), `filter`, (中文(简体) ), `doc_ids`, (中文(简体) ), `query_params`, (中文(简体) ), `since`,以及 `view`。 。 。 .

### db. 负荷( 流)

从给定的装入更改 `stream` 输入 `db`返回承诺.

这是一种"同能"操作,所以可以多次调用,不会改变结果.

#### 使用时警告 `pouchdb-load`

这个 [邮袋装入量](https://github.com/nolanlawson/pouchdb-load) 插件有自己的 `db.load()` 函数,与此函数不相容。 如果您想要在同一时间使用两个插件 时间,那么你需要做:

```js
var PouchDB = require('pouchdb');
var load = require('pouchdb-load');
PouchDB.plugin({
  loadIt: load.load
});
// Then load `pouchdb-replication-stream` normally
```

这样你就可以用 `pouchdb-load` 通过 `db.loadIt()`,不会打出 `db.load()` 从此插件。 (您必须使用浏览/ Webpack, 因为没有预建) `loadIt()` 版本. )

## 设计

复制流是这样的:

```js
{"version":"0.1.0","db_type":"leveldb","start_time":"2014-09-07T21:31:01.527Z","db_info":{"doc_count":3,"update_seq":3,"db_name":"testdb"}}
{"docs":[{"_id":"doc1","_rev":"1-x","_revisions":{"start":1,"ids":["x"]},"foo":"bar"}]}
{"docs":[{"_id":"doc2","_rev":"1-y","_revisions":{"start":1,"ids":["y"]},"foo":"baz"}]}
{"docs":[{"_id":"doc3","_rev":"1-z","_revisions":{"start":1,"ids":["z"]},"foo":"quux"}]}
{"seq":3}
```

只是NDJ - Newline Delimited JSON(英语:Newline Delimited JSON). 每行都是要装入目标数据库(使用 `bulkDocs()` 与 `{new_edits: false}`) (中文(简体) ).

第一行是包含一些基本信息的头条,比如数据库中的文档数量和复制流协议版本. 这些信息对显示进程栏很有用 `load()` 进程,或用于处理后期版本,以防协议发生变化.

此复制流是 _专有_,意思是,你可以将它加载到目标数据库中 任何次数,它会像你只做过一次一样.

在结尾 `load()` 目标数据库将完全按照从源数据库复制的方式运作。 修订散列、冲突、附件和文件内容均忠实地运输.

一些行可能包含 `seq`s;这些用作检查站。 这个 `seq` 直行表示,“当您已经装入所有前列文件时,您现在正在更新 seq `seq`""("史记")

目前,附件只是作为基数64编码字符串,ala CouchDB的 `_all_docs` 与 `attachments=true` 财务报告和审定财务报表 `Accept: application/json`。 。 。 .

## 安装

要使用此插件, 请从 `dist` 文件夹并包含在 `pouchdb.js` 在 HTML 页面中:

```html
<script src="pouchdb.js"></script>
<script src="pouchdb.replication-stream.js"></script>
```

您也可以使用 Bower :

```
bower install pouchdb-replication-stream
```

或者在Node.js中使用,只是npm安装:

```
npm install pouchdb-replication-stream
```

在Node.js,你可以把它附在 `PouchDB` 对象使用下列代码:

```js
var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);
```

## 没有垃圾文件直接流出

在节点.js或与 [`Browserify`](http://browserify.org/),你可以使用一个 [`MemoryStream`](https://github.com/JSBizon/node-memorystream) 直接流出而不向文件倾斜。 举个例子:

```js
var Promise = require('bluebird');
var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');
var MemoryStream = require('memorystream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);
var stream = new MemoryStream();

var source = new PouchDB('http://localhost:5984/source_db');
var dest = new PouchDB('local_destination');

Promise.all([
  source.dump(stream),
  dest.load(stream)
]).then(function () {
  console.log('Hooray the stream replication is complete!');
}).catch(function (err) {
  console.log('oh no an error', err);
});
```

如果您正在使用此程序, 此程序也会在浏览器中工作 [浏览器](http://browserify.org/)。 。 。 .

如果你不使用浏览器, 你可以下载 `MemoryStream` 从 [https://wzrd.in/standone/memorystream@latest 互联网档案馆的存檔,存档日期2013-12-21](https://wzrd.in/standalone/memorystream@latest) 并将作为 `window.memorystream`。 。 。 .

示例

```html
<script src="lib/pouchdb/dist/pouchdb.js"></script>
<script src="lib/pouchdb-replication-stream/dist/pouchdb.replication-stream.js"></script>
<script src="lib/memorystream/memorystream.js"></script>
```

```js
var localDB = new PouchDB('foo');
var remoteDB = new PouchDB('bar');

var source = new PouchDB('http://localhost:5984/source_db');
var dest = new PouchDB('local_destination');

Promise.all([
  source.dump(stream),
  dest.load(stream)
]).then(function () {
  console.log('Hooray the stream replication is complete!');
}).catch(function (err) {
  console.log('oh no an error', err);
});
```

## 倾倒到字符串

你用得着 [`MemoryStream`](https://github.com/JSBizon/node-memorystream) 全文 流并倾倒到字符串上.

示例

```js
var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');
var MemoryStream = require('memorystream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);

var dumpedString = '';
var stream = new MemoryStream();
stream.on('data', function(chunk) {
  dumpedString += chunk.toString();
});

var db = new PouchDB('my_db');

db.dump(stream).then(function () {
  console.log('Yay, I have a dumpedString: ' + dumpedString);
}).catch(function (err) {
  console.log('oh no an error', err);
});
```

这将在浏览器通过 [浏览器](http://browserify.org/)。 。 。 .

如果你不使用浏览器, 你可以下载 `MemoryStream` 从 [https://wzrd.in/standone/memorystream@latest 互联网档案馆的存檔,存档日期2013-12-21](https://wzrd.in/standalone/memorystream@latest) 并将作为 `window.memorystream`。 。 。 .

示例

```html
<script src="lib/pouchdb/dist/pouchdb.js"></script>
<script src="lib/pouchdb-replication-stream/dist/pouchdb.replication-stream.js"></script>
<script src="lib/memorystream/memorystream.js"></script>
```

```js
var db = new PouchDB('my_db');

var MemoryStream = window.MemoryStream;

var dumpedString = '';
stream.on('data', function(chunk) {
  dumpedString += chunk.toString();
});

db.dump(stream).then(function () {
  console.log('Yay, I have a dumpedString: ' + dumpedString);
}).catch(function (err) {
  console.log('oh no an error', err);
});
```

## 已知的陷阱

### 读取错误 400 EconnRESET

基本上这意味着您的 CouchDB 无法处理所有同时发生的请求 。 最可能的原因是 您的一份文件上有200+附件 .

绕过这个错误的一个简单方法就是限制全球代理 maxSockets , 该程序管理协议 http 请求的最大数量 .

```js
require('http').globalAgent.maxSockets = 25;
```

### 试图加速PouchDB复制?

如果您在浏览器中使用了这个库,那么它不会加速复制. 整点是将 HTTP 请求的数量缩入一个流中,然后向客户端发送一个大块。 如果您在客户端使用它,那么它仍然会向服务器提出许多小请求,这很慢.

您可能想要的是使用这个库服务器侧, 在一个节点. js 进程中 。 一个很好的例子,见快递包装: [特快邮袋-复制-流](https://github.com/conor-mac-aoidh/express-pouchdb-replication-stream)。 。 。 .

## 大楼

```
npm install
npm run build
```

您的插件现在位于 `dist/pouchdb.mypluginname.js` 财务报告和审定财务报表 `dist/pouchdb.mypluginname.min.js` 并准备分发.

## 测试

### 在节点

这将使用 LevelDB 运行节点测试 :

```
npm test
```

您也可以使用 :

```
npm run coverage
```

如果您不喜欢覆盖结果, 将值从 100 更改为其它 `package.json`,或添加 `/*istanbul ignore */` 评论.

如果你在全球安装了Mocha,可以使用:

```
TEST_DB=local mocha --reporter spec --grep search_phrase
```

这个 `TEST_DB` 环境变量指定 PouchDB 应使用的数据库(见 `package.json`) (中文(简体) ).

### 在浏览器中

运行 `npm run dev` 然后指向您最喜欢的浏览器 [http://127.0.0.1:8001/test/index.html (中文(简体) )](http://127.0.0.1:8001/test/index.html)。 。 。 .

查询参数 `?grep=mysearch` 将搜索匹配的测试 `mysearch`。 。 。 .

### 自动浏览器测试

你可以运行例如.

```
CLIENT=selenium:firefox npm test
CLIENT=selenium:phantomjs npm test
```

这将自动运行测试,完成后进程会以0或1退出. Firefox使用索引DB,而PhantomJS使用WebSQL.

## 常见问题

### @budibase/pouchdb-replication-stream 是什么？

PouchDB/ CouchDB 作为流复制

### 如何安装 @budibase/pouchdb-replication-stream？

在项目目录运行 npm install @budibase/pouchdb-replication-stream，或使用 pnpm add / yarn add / bun add。

### @budibase/pouchdb-replication-stream 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/budibase\_\_pouchdb-replication-stream 是否存在。

### @budibase/pouchdb-replication-stream 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @budibase/pouchdb-replication-stream 可以商用吗？

@budibase/pouchdb-replication-stream 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @budibase/pouchdb-replication-stream 的下载量有多少？

根据 npm 官方下载统计，@budibase/pouchdb-replication-stream 在 2026/10/09 – 2026/11/07 这 30 天内被下载 38,766 次，日均约 1,292 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @budibase/pouchdb-replication-stream 还在维护吗？

最新版本 1\.2\.11 发布于 2024/06/05（2 年前）；至今共发布 2 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/02/07。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

