十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Node.js 15.12.0 发布解读:crypto 回调与 JWK 密钥支持、AbortSignal.abort()、worker 环境数据 API 及 OpenSSL QUIC 切换

Node.js 15.12.0 发布解读:crypto 回调与 JWK 密钥支持、AbortSignal.abort()、worker 环境数据 API 及 OpenSSL QUIC 切换 Node.js 15.12.0 发布解读crypto 回调与 JWK 密钥支持、AbortSignal.abort()、worker 环境数据 API 及 OpenSSL QUIC 切换【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本篇技术指南以 nodejs.org 仓库中的官方发布说明 v15.12.0.md 为核心逐项拆解 Node.js 15.12.0Current的 8 个 Notable Changes、关键提交、各平台安装包与 SHASUMS 校验流程并结合 nodejs.org 网站仓库的博客渲染与发布数据机制说明这类发布说明在官网中的组织方式。读完你将掌握该版本每个新 API 的用法、性能优化的来龙去脉以及如何在官方站点中追溯与校验任意历史版本发布信息。发布概览一份发布说明承载了什么该发布说明于 2021 年 3 月 17 日发布见文件头 frontmatter 中的date: 2021-03-17T22:31:55.878Z作者为 Danielle Adamscategory为releaselayout为blog-post。Node.js 15 属于 Current 发布线因此该版本不是 LTS而是面向新特性验证的常规更新。从文件结构看发布说明由四部分组成frontmatter 元数据日期、分类、标题、布局、作者供网站生成列表与页面元信息Notable Changes本版本最重要的 API 与依赖变更清单Commits按模块归类的完整提交记录含 commit hash、作者与 PR 编号下载链接与 SHASUMS全平台安装包清单与 PGP 签名校验和。这类文档在 nodejs.org 中如何被渲染nodejs.org 仓库将博客发布说明存放在apps/site/pages/en/blog/release/目录下每个版本一个 Markdown 文件。博客动态路由由 apps/site/app/[locale]/blog/[...path]/page.tsx 处理它把路径解析为blog/${pathname}通过getMarkdownContext读取对应 Markdown 并解析为 React 组件渲染且对每个页面启用 300 秒的增量静态再验证revalidate 300。博客列表数据由 apps/site/scripts/blog-data/generate.mjs 生成它遍历pages/en/blog下所有文章只读取 frontmatter 部分用gray-matter解析得到title、author、date、category后生成slug格式为/blog/${category}/${filename}并附加year-${publishYear}与all两类归档分类。发布说明的类型定义见 apps/site/types/blog.ts 中的BlogPost与BlogData。因此本文件中的date、author、category等字段直接决定了它在博客时间线、年度归档与分类页中的位置。此外下载页的 Read Blog Post 链接通过 apps/site/components/Downloads/Release/BlogPostLink.tsx 拼出/blog/release/${version}路径与这里的release分类和v15.12.0文件名一一对应——这正是本文件 URL 结构/blog/release/v15.12.0的由来。Notable Changes 逐项解读本版本共 8 项重点变更分布在 crypto、deps、fs、lib、node-api、worker 六个模块其中 6 项为 SEMVER-MINOR向后兼容的新特性2 项为内部性能与依赖升级。1. crypto为 crypto.sign / crypto.verify 增加可选回调PR #37500SEMVER-MINOR。crypto.sign与crypto.verify在原有同步签名/验签行为之外新增可选的回调参数当传入回调时操作以异步方式执行避免大密钥或频繁操作时阻塞事件循环。const crypto require(crypto); // 同步方式原有行为 const signature crypto.sign(sha256, data, privateKey); // 异步方式新增 crypto.sign(sha256, data, privateKey, (err, sig) { if (err) throw err; console.log(sig.toString(hex)); });该提交commit922f2f0eb2同时伴随内部错误码重构PR #37650 为 crypto 引入统一内部错误码与新增的INVALID_KEY_TYPE独立错误PR #37555使密钥类型错误更易诊断。2. cryptocreate*Key 系列支持 JWK 对象PR #37254SEMVER-MINOR。crypto.createPrivateKey、crypto.createPublicKey等密钥工厂函数现在可直接接收符合 [RFC 7517] JSON Web KeyJWK格式的对象作为输入const { createPublicKey } require(crypto); const jwk { kty: EC, crv: P-256, x: …, y: …, }; // 将 JWK 转换为 KeyObject const publicKey createPublicKey({ key: jwk, format: jwk });这让 Node.js 与浏览器 WebCrypto 体系、OIDC/JWT 生态之间共享密钥变得更加直接是互操作性的重要补充。同一周期内 WebCrypto 测试覆盖PR #37571与randomUUID性能改进PR #37243也一并合入。3. depsOpenSSL 切换到 quictls/openssl 分支PR #37601SEMVER-MINOR。这是本版本最具影响力的底层变更Node.js 15.12.0 将依赖的 OpenSSL 从主线分支切换到quictls/opensslOpenSSL 1.1.1 QUIC 补丁集并同步更新了各架构的 archs 文件与维护 OpenSSL 的协作指南文档。动机在于Node.js 15.0.0 起已实验性引入 QUIC 协议支持见 v15.0.0.md 中的 QUIC 章节而 QUIC 所需的 TLS 1.3 扩展接口需要携带补丁的 OpenSSL 分支。切换到 quictls 分支为后续实验性netQUIC 实现扫清了底层依赖障碍。该提交还附带为测试适配 quic OpenSSL 版本的改动并支持了动态链接 OpenSSL 3.0PR #37669。4. deps升级 cjs-module-lexer 至 1.1.0PR #37712SEMVER-MINOR。CommonJS 模块词法分析器cjs-module-lexer从 1.0.x 升级到 1.1.0。该库用于 ESM 加载器在导入 CommonJS 模块时静态分析其具名导出named exports因此这一升级直接影响import语句对 CJS 模块导出名检测的准确性与性能。5. fsfsPromises writeFile / readFile 性能优化两个连续提交优化了fs/promises中最常用的两个 APIwriteFile 性能改进PR #37610commitba91ef2d08减少不必要的缓冲拷贝与中间分配readFile 性能改进PR #37608commitb277776845优化读入路径同样减少了重复内存操作。两个 PR 均同步新增/调整了基准测试fsPromises.writeFile基准与 promisified readFile 基准说明优化效果是经过 benchmark 量化验证的。对大量使用await fs.promises.readFile/writeFile的应用如构建工具、配置加载器是免费的提速。6. lib实现 AbortSignal.abort()PR #37693SEMVER-MINOR。AbortSignal家族新增静态工厂方法AbortSignal.abort()用于直接创建一个已被触发aborted的信号对象// 立即得到已中止的信号 const signal AbortSignal.abort(); // 任何依赖 signal 的 API 都会立即以 AbortError 失败 const response await fetch(url, { signal });相比new AbortController()后手动调用controller.abort()一步创建已中止信号适合默认取消或条件性短路场景。同期提交还让内部错误统一使用AbortErrorPR #37715并在文档中建议先检查abortSignal.aborted再处理回调PR #37714。这与 Node.js 15.0.0 中 AbortController 的正式启用一脉相承——15.x 已将 AbortController/AbortSignal 从实验性标记中解除见 v15.0.0.md 的 unflag AbortController 提交本版本继续完善其静态能力。7. node-api定义 N-API 版本 8PR #37652SEMVER-MINOR。N-APINode-API稳定 ABI 层版本号推进到8意味着基于 N-API v8 编译的原生插件拥有新的 ABI 版本标识可在后续保持 ABI 兼容的 Node.js 版本间复用无需重新编译。对于维护 C/C 原生模块的开发者这是重要的兼容性信号。8. worker新增 setEnvironmentData / getEnvironmentDataPR #37486SEMVER-MINOR。worker_threads 模块新增一对用于在主线程与 Worker 之间传递初始化环境数据的 APIconst { Worker, setEnvironmentData, getEnvironmentData } require(worker_threads); // 主线程在创建 Worker 前写入环境数据 setEnvironmentData(config, { retries: 3 }); // Worker 线程读取 const config getEnvironmentData(config);该机制在 worker 启动时即可访问不需要通过postMessage的异步握手适合传递只读配置。同版本 worker 相关提交还包括MessageEvents增加ports属性PR #37538与receiveMessageOnPort支持BroadcastChannelPR #37535三者共同强化了 worker 消息模型。Commits 提交清单重点解析完整提交列表共 90 余条按模块分布在crypto含内部错误码、INVALID_KEY_TYPE、randomUUID性能、WebCrypto 测试、depsnpm 升级至 7.6.1 再至 7.6.3、V8 cherry-pick、glob-parent 安全更新、doc大量文档修正与 ESM 示例补充、toolsESLint 升级至 7.21.0、新增 no-array-destructuring 规则、changelog 版本校验、testWeb Platform Tests 更新、多个 FLAKY 状态清理等。值得关注的几类依赖升级节奏npm 在 7.6.1 与 7.6.3 之间连续两次升级说明 15.x 发布线在积极跟进 npm 7 系列的缺陷修复稳定性工程多个测试从 FLAKY 标记中移除如 test-async-hooks-http-parser-destroy、test-http2-pipe并修复了 test-crypto-x509 与 test-timers 的偶发失败代码风格统一引入no-array-destructuringESLint 规则后http、tls、module 等多个模块同步重构了不安全的数组迭代写法PR #37654/#37655/#37656调试体验--enable-source-maps移除实验性标记PR #37743错误堆栈可直接映射回源码位置。各平台安装包与 SHASUMS 校验发布说明尾部完整列出了 v15.12.0 的全平台产物涵盖类别产物Windows32/64 位 Installer.msi、32/64 位 Binarynode.exe、.7z 与 .zip 压缩包macOS64 位 Installer.pkg、64 位 Binarydarwin-x64 .tar.gzLinuxx64、PPC LE 64、s390x 64 的 .tar.gz/.tar.xz其他架构AIX ppc64、ARMv7 32 位、ARMv8 64 位arm64源码node-v15.12.0.tar.gz / .tar.xz以及编译头文件 headers 包使用 SHASUMS 验证下载完整性每个产物对应一个 SHA-256 校验和例如 Linux x64 二进制为3892b4058cf12823c6cf39e4a3e9ce6da3f908cbfd211ddfc0a9df73eecd8bdcnode-v15.12.0-linux-x64.tar.xzWindows 64 位安装器为238cc9aa94527ab2fbcef4a9bcf81bb01667fb4864dfe490aead1ae474d5584cnode-v15.12.0-x64.msi。校验方法# 下载后在本机核对 shasum -a 256 node-v15.12.0-linux-x64.tar.xz # 与发布说明中的哈希值逐字节比对关于 PGP 签名SHASUMS 块采用PGP 签名消息-----BEGIN PGP SIGNED MESSAGE-----/-----END PGP SIGNATURE-----包裹签名哈希算法为 SHA-256密钥指纹特征为…06iWE2Q7YgE发布说明中签名字段所示。这意味着校验和清单本身可被验证未被篡改验证流程为导入 Node.js 发布团队的官方公钥对SHASUMS256.txt对应本说明中的哈希清单执行gpg --verify再用清单中的 SHA-256 校验各安装包。两步验证共同保证下载的文件 官方构建的文件。需要说明的是本文档展示的是 15.12.0 时代的产物形态nodejs.org 网站仓库中的 下载页 与 下载归档页 目前会自动生成当前版本与历史版本的下载按钮与校验入口各平台的下载片段模板存放在 apps/site/snippets/en/download/ 目录。升级与使用建议Node.js 15 属于 Current 发布线适合尝鲜新特性而非生产长期依赖。基于本版本变更建议关注crypto 异步回调签名/验签高频场景可切换回调形式缓解阻塞但注意回调风格与 Promise 的互转JWK 密钥与 JWT/OIDC 生态互操作时可直接用 JWK 构造 KeyObjectAbortSignal.abort()在超时默认取消、条件短路等场景替代手动 abortworker 环境数据创建 Worker 前用setEnvironmentData注入只读配置减少初始化消息往返底层依赖quictls OpenSSL 与 cjs-module-lexer 1.1.0 均为后续实验性特性QUIC、ESM 互操作铺路升级后请回归测试涉及 TLS 与 ESM 导入的链路。如需查看更多版本的发布说明可在 apps/site/pages/en/blog/release/ 目录中按版本号检索该目录累计收录了 800 余份发布记录全部经由上文所述的博客数据管线生成官网内容。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表