@effectful/serialization

中文文档
2.0.12发布于 2026/05/23MITTypeScriptCommonJS近 30 天下载 1.3万

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

中文使用文档
文档目录10 节
  1. 使用量
  2. 写入 JavaScript 值
  3. 读取函数
  4. 延长
  5. 不透明值
  6. 基于原型的继承
  7. 函数序列化
  8. DOM 序列化
  9. 东都:
  10. 自由主义

@ 无效/ 序列化

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

使用量

从 npm 安装 :

$ npm install --save @effectful/serialization

在代码中 :

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 文件。 。 。 .

不透明值

有些值不能被序列化,例如:. 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 如果 函数是某个对象的方法.

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

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

DOM 序列化

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

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

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

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

东都:

  • 验证
  • 数据版本

自由主义

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

版本与发布记录

@effectful/serialization 共发布 39 个版本,首次发布于 2018/05/21;过去 12 个月发布了 5 个版本。

版本发布日期距今
2.0.12latest2026/05/235 个月前
2.0.112026/04/176 个月前
2.0.92026/04/127 个月前
2.0.82025/11/2711 个月前
2.0.72025/11/2711 个月前
2.0.62025/06/051.4 年前

关于 @effectful/serialization 的常见问题

@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 和提交记录判断。