serialize-javascript

中文文档
7.1.4发布于 2026/10/23BSD-3-ClauseCommonJS零依赖构建来源已验证近 30 天下载 1.8亿

将JavaScript序列化为包含正则表达式和函数的JSON的超集.

中文使用文档
文档目录7 节
  1. 概览
  2. 安装
  3. 使用量
  4. HTML 字符自动退出
  5. 选项
  6. 淡化
  7. 许可证

序列化 Java 脚本

将 JavaScript 序列化为 a 超级集 包括正则表达式、日期和函数.

npm Version Test

概览

此套件中的代码开始其作为一个内部模块的寿命到 表达式为了扩大其作用,它现在生活在 serialize-javascript —— npm上的独立软件包.

你也许在想: 怎么样 JSON.stringify()来啊? 我们发现有时我们需要序列化 JavaScript 函数, (中文(简体) ), 正则说明, (中文(简体) ), 日期, (中文(简体) ), 套装 或者说 地图一个伟大的例子是使用客户端 URL 路由的网络应用程序,其中路由定义为regexps,需要从服务器共享到客户端.

从此软件包的单导出函数返回的字符串是文字 JavaScript, 可以保存到一个 .js 文件,或者通过制作一个文件的内容被嵌入到 HTML 文档中 <script> 键.

HTML字符和JavaScript行终止符自动被逃脱.

请注意,ES6 Sets & Maps的序列化需要支持 Array.from (不见于IE或节点 < 0.12)或a Array.from 混合填充剂.

[尖叫声] 利用这个软件包将任意函数传递到 工人线程,因为你不能直接通过 postMessage()然而,在一般情况下,无法在工人线条之间传递功能。 此软件包允许您序列化 有点 函数,但它有局限性.

例如,如果一个函数引用了函数体外的东西,如果序列化和去序列化,它就不会正常运行. 这可包括: 关闭变量 或从其他包件进口。 序列化功能要正常运行,必须完全自成一体.

一般来说,不可能将任意的JavaScript发送到一个工人线程,并假装它运行的方式与在主线程上运行的方式相同. 这个包裹不会让你这么做的.

安装

使用 npm 安装 :

$ npm install serialize-javascript

使用量

var serialize = require('serialize-javascript');

serialize({
    str  : 'string',
    num  : 0,
    obj  : {foo: 'foo'},
    arr  : [1, 2, 3],
    bool : true,
    nil  : null,
    undef: undefined,
    inf  : Infinity,
    date : new Date("Thu, 28 Apr 2016 22:02:17 GMT"),
    map  : new Map([['hello', 'world']]),
    set  : new Set([123, 456]),
    fn   : function echo(arg) { return arg; },
    re   : /([^\s]+)/g,
    big  : BigInt(10),
    url  : new URL('https://example.com/'),
});

以上将产生以下字符串输出:

'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}'

注意: 要生成被美化的字符串, 您可以将可选的第二个参数传递给 serialize() 以定义缩进所用的空格数.

HTML 字符自动退出

此软件包的一个主要特点是将代码序列化为一串可嵌入 HTML 文档的文字 JavaScript, 将其添加为 HTML 文档的内容 <script> 键。 为了让这个安全,HTML字符和JavaScript行终止符自动被逃脱.

serialize({
    haxorXSS: '</script>'
});

上面将产生以下字符串, HTML 逃逸输出, 它可以安全地放入 HTML 文档, 因为它不会导致内置脚本元素终止 :

'{"haxorXSS":"\\u003C\\u002Fscript\\u003E"}'

你可以通过一个可选的 unsafe 参数到 serialize() 直接连载.

选项

这个 serialize() 函数接受一个 options 对象作为其第二个参数。 所有选项都默认为 undefined数字 :

options.space

此选项与 space 可转至 JSON.stringify。它可用于在序列化输出中添加白空间和缩进,使其更可读.

serialize(obj, {space: 2});

options.isJSON

此选项是给 serialize() 表示正在序列化的对象不包含任何函数或正则exps值。 这使得热通路可以使序列化速度快于3x. 如果你正在序列化很多数据,并且知道它的纯JSON,那么你就可以启用这个选项来加速.

说明: 当使用此选项时, 输出会仍然被逃脱以防范 XSS .

serialize(obj, {isJSON: true});

options.unsafe

此选项用于信号 serialize() 我们想要做一个直接的转换, 没有 XSS 的保护。 这一选项需要明确设定为: true。 HTML 字符和 JavaScript 线词终止符将不会被逃脱。 你必须自己滚.

serialize(obj, {unsafe: true});

options.ignoreFunction

此选项用于信号 serialize() 我们不想序列化 JavaScript 函数. 只要把功能像 JSON.stringify 做,但其他特性将如预期的那样发挥作用.

serialize(obj, {ignoreFunction: true});

淡化

对于某些用法来说,你可能需要将字符串去序列化。 这显然不是本单元的一部分。 不过,你可以轻松地自己写:

function deserialize(serializedJavascript){
  return eval('(' + serializedJavascript + ')');
}

说明: 别忘了连环画的括号 作为开口的括号 { 将被视为一个机构的开始.

许可证

这个软件可以在雅虎下自由使用! BSD许可证. 见 自由文件 许可证文本和版权信息.

版本与发布记录

serialize-javascript 共发布 39 个版本,首次发布于 2014/09/17;过去 12 个月发布了 12 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
7.1.4latest2026/10/2313 天前
7.1.32026/10/2314 天前
7.1.22026/09/231 个月前
7.1.12026/08/292 个月前
7.1.02026/08/082 个月前
7.0.72026/06/304 个月前

关于 serialize-javascript 的常见问题

serialize-javascript 是什么?

将JavaScript序列化为包含正则表达式和函数的JSON的超集.

如何安装 serialize-javascript?

在项目目录运行 npm install serialize-javascript,或使用 pnpm add / yarn add / bun add。

serialize-javascript 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/serialize-javascript 是否存在。

serialize-javascript 支持 ESM 还是 CommonJS?

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

serialize-javascript 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

serialize-javascript 可以商用吗?

serialize-javascript 使用 BSD-3-Clause 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括,不构成法律意见,请以许可原文为准。

serialize-javascript 的下载量有多少?

根据 npm 官方下载统计,serialize-javascript 在 2026/10/05 – 2026/11/03 这 30 天内被下载 184,692,398 次,日均约 6,156,413 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

serialize-javascript 还在维护吗?

最新版本 7.1.4 发布于 2026/10/23(13 天前);至今共发布 39 个版本,其中过去 12 个月发布了 12 个;首次发布于 2014/09/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。