# @effectful/serialization 中文文档

规范地址：https://npmcn.com/package/%40effectful/serialization/

版本：2\.0\.12
npm 元数据更新时间：2026-05-23T15:13:34.420Z
中文译文更新时间：2026-11-13T08:38:52.784Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40effectful/serialization
原文对照：https://npmcn.com/package/%40effectful/serialization/?lang=original
项目主页：https://github.com/awto/effectfuljs#readme
源码仓库：https://github.com/awto/effectfuljs

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

- 包体积（解压后）：216 kB，9 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2018-05-20T16:28:30.790Z
- 最新版本发布：2026-05-23T15:13:34.317Z
- 近 30 天下载量：12860（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：39（近 12 个月 5 个）

## 中文简介

参考-认识到JS价值序列化图书馆

## 安装

```sh
npm install @effectful/serialization
```

也可以使用：`pnpm add @effectful/serialization`、`yarn add @effectful/serialization`、`bun add @effectful/serialization`

## README

# @ 无效/ 序列化

可扩展,可参考,可知,无计划 JavaScript 值序列化.

## 使用量

从 npm 安装 :

```
$ npm install --save @effectful/serialization
```

在代码中 :

```javascript
import * as S from "@effectful/serialization"

const json = S.stringify(value)

// ....

const value = S.parse(str)

```

## 写入 JavaScript 值

函数 `S.write` 带 JS 对象并返回编码为 `JSON.stringify` 可序列值。 它可以处理多处提到相同价值, 包括递归性参考.

根值必须始终是普通对象. 其属性值可能具有 如果已登记格式描述,则输入.

库中包含用于矩阵/Set/Map/Symbol类型的描述符,并且可以是 如果可以序列化,扩展为支持任何其他类型.

图书馆 `S.stringify` 函数为 a `write` 接下来是 `JSON.stringify`。 。 。 .

## 读取函数

反方向由 `S.read` 函数。 它需要一个可序列的物体 返回时间 `write` 并返回其原始值.

函数 `S.parse` 实值 `JSON.parse` 接下来是 `S.read`。 。 。 .

## 延长

有一种描述结构用于指定如何写出和读取值.

写作时, 描述符会被放在上面 `[S.descriptorSymbol]` 数值 属性或图书馆内部地图。 写作程序对 输出类型名称的字符串 `"#type"` 输出对象的属性。 没错 用于查找相应的阅读描述符.

描述符使用 `S.regDescriptor` 函数.

库将根据描述符中的名称属性生成独有名称 如果有碰撞发生。 这意味着发送方和接收方必须呼叫 如果出现名称相撞的可能性,注册会以相同的顺序运行.

更多信息见 [API 文件](https://npmcn.com/package/%40effectful/serialization/api.md)。 。 。 .

## 不透明值

有些值不能被序列化,例如:. `Promise`, (中文(简体) ), `Function`, (中文(简体) ), `WeakMap` 包括:. 它们可能登记为不透明值。 如果提到 序列值中的这种不透明值 库输出参考名称 而不是价值。 如果注册的相同( 对应) 对象有效 发送方和接收方同名。 通常它们是模块的 具有函数或类声明的顶级变量.

要注册不透明的值调用 `S.regOpaqueObject` 或者说 `S.regOpaquePrim`与 他们的第一个论点是价值,第二个论点是它的名称。 名称 可省略 `S.regOpaqueObject` 图书馆会试着猜测 如果是 是函数声明,它将使用它的名称,例如.

第三个论点规定了其他选项(见 `DescriptorOpts` 类型 在API中).

默认输出将包含对象中的属性设置或更改 `S.regOpaqueObject` 电话 通过设置可以禁用 `{props:false}` 内 第三个禁用属性输出的参数。 或者说 `{propsSnapshot:false}` 以禁用存储原始值快照( 因此所有属性都将是) (产出)。 读取已注册对象的变异 .

通话 `S.regOpaqueObject` 将设置 `[S.descriptorSymbol]` 属性 对象时 `S.regOpaquePrim` 将会将值存储在图书馆的内部地图中.

## 基于原型的继承

使用 `S.regConstructor` 制作带有JS原型遗产的物品 连环性。 它获得构造函数作为其第一个参数和可选 名称作为第二个。 如果名称被使用, 将使用构建器函数的名称 未指定参数.

它会将构造器的原型登记为不透明的物体. 这边走 所有方法都只以原型参考,所有数据均以原型参考 对象是可序列的.

## 函数序列化

函数在JS中的源代码简单可以写入字符串(与 `toString` 方法)和简单读取(使用 `Function` 不过,有两种 重大问题.

通过调用取消序列化函数 `new Function(...)` 显然非常 危险 开发者必须绝对确定绝对没有数据 从外部收到。 很难保证.

即使安全不关项目的事 这种方式 读取/写函数将丢失所捕捉的关机信息 变量。 甚至不可能将结果序列化 `Function.prototype.bind`。这样,函数也可以获得状态数据 从全局变量(显然不是一个选项)或使用 `this` 如果 函数是某个对象的方法.

如果这些限制太重,那么 (单位:千美元) [关闭转换](https://github.com/awto/effectfuljs/blob/master/packages/transducers/src/samples/closConvPass.js) 通过。 这个 将关闭转换为对象 `call` 方法。 这可能解决所有 限制。 不需要存储函数的文本 。 一些独特的 识别码,说SHA1就够了 之后没有关闭 转换对象的翻译效果会很好.

变身在概念的证明 国家名称,但将移动到 分开的图书馆很快.

## DOM 序列化

包中包含Concept DOM序列化. 没错 默认禁用。 使:

```javascript
import * as SDOM "@effectful/serialization/dom"
SDOM.track()
```

这只猴子会修补一些 DOM 功能以获取访问权限 javaScript 无法访问的内部平台状态 否则.

它目前非常有限,需要更深入地包装。 它会 存储/存储元素、事件和 `document` 与所有的孩子, dOM 值的属性。 活动 将仅保留带有计算属性的初始化选项 (例如: `target`未初始化.

## 东都:

-   验证
-   数据版本

## 自由主义

根据麻省理工学院(麻省理工学院)许可证的规定分发.

## 常见问题

### @effectful/serialization 是什么？

参考-认识到JS价值序列化图书馆

### 如何安装 @effectful/serialization？

在项目目录运行 npm install @effectful/serialization，或使用 pnpm add / yarn add / bun add。

### @effectful/serialization 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @effectful/serialization 支持 ESM 还是 CommonJS？

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

### @effectful/serialization 可以商用吗？

@effectful/serialization 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @effectful/serialization 的下载量有多少？

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

### @effectful/serialization 还在维护吗？

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

