资讯详情

资讯详情

Node.js 12.0.0 发布全解读:V8 7.4 与 TLS 1.3 带来的里程碑式升级(Current 版)

Node.js 12.0.0 发布全解读V8 7.4 与 TLS 1.3 带来的里程碑式升级Current 版【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org2019 年 4 月 23 日Node.js 官方发布了 12.0.0Current 版本线的首个版本。作为 Node.js 历史上承前启后的重大版本它同时完成了 V8 7.4、OpenSSL 1.1.1b、ICU 63 等底层依赖的大规模升级默认启用 TLS 1.3、切换到全新的 llhttp HTTP 解析器并移除了大量长期废弃的 API。本文以 nodejs.org 仓库中收录的 v12.0.0 发布说明 为主体逐项拆解本次发布的 Notable Changes、Semver-Major 破坏性变更与新增能力并对照本仓库的发布数据生成与下载链接逻辑帮助读者完整理解这次升级的技术全貌与升级迁移要点。版本定位Current 线开启ABI 版本跃升至 72Node.js 12.0.0 属于Current当前发布线而非 LTS 线。按本仓库的发布数据处理逻辑一个主版本的状态由latest版本是否处于 LTS 以及 EOL 日期共同决定见 releaseData.mjs而 12.x 在发布之初走的是标准的「Current → 进入 LTS → 最终 EOL」生命周期。本次发布同步将NODE_MODULE_VERSIONABI 版本号更新为72见原文档 src 小节与 releaseData.mjs 中记录的modules.version字段。这意味着所有基于旧 ABI 编译的原生 C/C 插件Native Addon都必须针对 Node.js 12 重新编译否则将因模块版本不匹配而无法加载。依赖链全面升级V8 7.4 / OpenSSL 1.1.1b / ICU 63 / libuv 1.28 / npm 6.9本次发布的核心看点在于底层依赖的大规模同步原文档 deps 小节依赖版本说明V87.4.288.13后续 patch 到 7.4.288.21大幅提升 JS 执行性能并随带多项 V8 内部重构OpenSSL1.1.1b为默认启用 TLS 1.3 提供底层支持ICU最低版本提升到 63提供更完整的 Unicode/国际化能力libuv1.28.0事件循环与异步 I/O 层更新npm6.9.0随附包管理器版本升级nghttp21.38.0HTTP/2 依赖同步更新这些依赖的版本信息在 nodejs.org 网站的发布数据中均有结构化记录网站构建时会从外部数据源拉取每个主版本及其全部次版本整理出v8、npm、modules等字段见 releaseData.mjs并据此生成所有可下载版本列表见 releaseVersions.mjs。TLS 1.3 默认可用TLS 1.0/1.1 默认关闭tls模块是本次升级中影响面最大的安全相关变更原文档 tls 小节支持 TLSv1.3借助 OpenSSL 1.1.1btls模块获得完整的 TLS 1.3 支持PR #26209。默认禁用 TLS v1.0 和 v1.1tls.DEFAULT_MIN_VERSION/DEFAULT_MAX_VERSION的默认范围被收紧老旧的 TLS 1.0/1.1 协议默认不再可用PR #23814。如果你的服务仍需兼容非常老旧的客户端必须显式下调最小协议版本。getCipher()返回正确的协议版本信息PR #26625。新增ERR_TLS_INVALID_PROTOCOL_METHOD错误码PR #24729。当servername被设置为 IP 地址时发出警告PR #23329。NODE_EXTRA_CA_CERTS环境变量现在会在启动时被加载PR #23354自定义 CA 证书在进程早期即可生效。废弃Server.prototype.setOptions()PR #23820renegotiate()增加参数类型校验并返回 OpenSSL 错误信息。HTTP切换到 llhttp 解析器并新增 431 状态码http模块的底层实现发生了结构性变化原文档 http 小节默认解析器切换为 llhttp由 Anna Henningsen 主导PR #24870llhttp 作为新一代 HTTP 解析器在性能与安全性上全面替代旧解析器。返回 HTTP 431 状态码当触发HPE_HEADER_OVERFLOW请求头过大错误时服务端现在返回标准的431 Request Header Fields Too LargePR #25605而不是笼统的 4xx 错误。ClientRequest()增加 timeout 参数校验PR #26214。运行时废弃outgoingMessage._headers与outgoingMessage._headerNames内部属性PR #24167对应 DEP0066 转为运行时废弃。crypto 新能力RSA-PSS、sign/verify、EdDSA 与 x25519/x448crypto模块在本次发布中新增了多项实用能力原文档 Semver-Minor CommitsRSA-PSS 密钥支持generateKeyPair系列 API 可生成 RSA-PSS 密钥PR #26960。crypto.sign()与crypto.verify()新增高层签名/验签 API无需再手动管理哈希与签名缓冲PR #26611。EdDSA 密钥对生成支持 Ed25519/Ed448 椭圆曲线签名算法PR #26554。x25519 与 x448 KeyObject 支持Diffie-Hellman 类算法进入KeyObject体系PR #26774。KeyObject.asymmetricKeySize属性可读取非对称密钥的位长PR #26387。新增 OpenSSL 相关的错误属性opensslErrorStack、library、function、reason等PR #26868。同时 crypto 也清理了大量遗留内容移除Cipher.setAuthTag()/Decipher.getAuthTag()对应 DEP0113 进入 EOLPR #26249、移除废弃的crypto._toBuf()PR #25338、DEFAULT_ENCODING属性改为不可枚举PR #23222。ESM 第二阶段与新的 CLI 能力本次发布推进了 ES Module 的实现进程原文档 Semver-Minor CommitsESM 实现进入第二阶段PR #26745同时将--entry-type替换为--input-typePR #27184。queueMicrotask()转正为稳定 APIPR #25594无需再依赖process.nextTick或 Promise 技巧即可调度微任务。--unhandled-rejections命令行旗标PR #26599允许开发者显式指定未处理 Promise 拒绝时的行为如strict、throw、warn等模式。--heapsnapshot-signal旗标PR #27133进程收到指定信号时自动生成堆快照。--cpu-prof/--cpu-prof-dir/--cpu-prof-namePR #27147、PR #27306内置 CPU 性能剖析支持其中--cpu-prof-path被拆分为--cpu-prof-dir与--cpu-prof-name。诊断报告相关旗标统一为--report-*前缀PR #27312。bufferBigInt 读写方法与更严格的校验buffer模块原文档 buffer 小节与 Semver-Minor Commits新增{read|write}Big[U]Int64{BE|LE}系列方法PR #19691使Buffer可以直接以 BigInt 形式读写 64 位整数处理大数值时不再需要手工拆分高低 32 位。采用更严格的范围检查PR #27045与输入校验PR #26825。加固SlowBuffer创建与分配大小的校验PR #26272、PR #26162并修正 addon 方法中的错误传播PR #23939。module 系统错误信息增强与解析路径收紧module模块本次有多个破坏性调整原文档 module 小节MODULE_NOT_FOUND错误信息大幅改进并新增requireStack属性便于定位「模块找不到」的具体来源PR #25690。require(.)不再解析到当前目录之外PR #26973规避了意外加载上层目录文件的隐患。无效的package.jsonmain 条目直接抛错PR #26823而不是静默回退。移除对deps/目录的意外访问PR #25138、移除require.resolve.paths的搜索路径行为PR #23683并清理死代码PR #26983。util.inspect 与 util 模块的深度加固util模块是本次变更最密集的模块之一原文档 util 小节与 Semver-Major Commitsinspect()的compact与breakLength默认值调整输出更紧凑PR #27109。修复 inspect 对 Proxy、边缘对象、错误对象的处理PR #26241、PR #27109、PR #26984。防止篡改内部属性、防止内部属性泄漏、防止被 monkey-patch 的Object.prototype影响PR #26577、PR #24971、PR #25953。callbackify()生成的函数不再设置原型、函数名改为originalCallbackified且函数length正确PR #26893。util.format()现在可以格式化 bigint 与布尔值PR #25046并且%s使用最小化对象检查PR #26927。移除util.print()、util.puts()、util.debug()、util.error()PR #25377对应 DEP0026–DEP0029 进入 EOL。破坏性变更盘点被移除与废弃的 API除上述模块外本次 Semver-Major 还移除或废弃了以下内容详见原文档 Semver-Major Commitsasync_hooks移除废弃的emitBefore/emitAfterPR #26530移除 resource 上的 promise 对象PR #23443。child_process移除options.customFdsPR #25279DEP0006 EOL加固 fork 参数校验maxBuffer默认值改为非无限PR #23027、PR #27179。net移除Server.listenFD()PR #27127DEP0021 EOLDNS 错误对象不再附加.host/.portPR #26751「write after end」错误改为下一个 tick 发出PR #24457废弃未文档化的_setSimultaneousAccepts()PR #23760。osos.type()改用uv_os_uname()实现PR #25659移除os.getNetworkInterfaces()PR #25280DEP0023 EOL。processglobal.process、global.Buffer改为 getterPR #26882DEP0062node --debug进入 EOL解析选项后遇到--debug/--debug-brk直接退出PR #25828改进--redirect-warnings处理PR #24965。assert校验必需参数、调整 loose 断言、错误实例化性能优化PR #26641、PR #25008、PR #26738。fsSyncWriteStream使用正确的.destroy()PR #26690mode 校验改进PR #26575createWriteStream()的start选项校验加固PR #25579writeFile与readFile在 fd 处理上保持一致PR #23709。win, fs检测符号链接目标是否为目录PR #23724。zlibcallback 缺失时抛出TypeErrorPR #24929「bare」常量改为不可枚举PR #24824。console/readline/replTERMdumb环境下不再输出 ANSI 转义码PR #26261REPL 新增欢迎语、修正终端默认设置、废弃REPLServer.rliPR #25947、PR #26518、PR #26260。bootstrapBuffer与process变为不可枚举全局属性PR #24874DTRACE 探针移出全局作用域PR #26541。dgram新增对 UDP connected socket 的支持PR #26871。下载资源与校验方式v12.0.0 的官方发布包覆盖 Windowsx86/x64 的.msi安装器与.exe二进制、macOS.pkg安装器与darwin-x64tar 包、Linuxx64、PPC LE、s390x、ARMv7、ARMv8 的.tar.xz、AIX、SmartOS 等平台同时提供node-v12.0.0.tar.gz源码包与对应的 headers 包。发布说明中同时给出了完整的SHASUMS 校验清单该清单经 PGP 签名SHA256用于验证下载文件的完整性与来源可信性。校验思路如下下载对应平台的安装包后在本地对文件计算 SHA-256 摘要并与发布说明中列出的摘要比对同时用发布者的 PGP 公钥验证签名块确保摘要清单本身未被篡改。nodejs.org 网站当前版本本仓库正是通过 util/url.ts 中的getNodeDownloadUrl()动态生成这类下载链接——根据用户的操作系统、平台架构与产物类型installer/binary/source/shasum拼接出dist/下的具体文件路径命名规则如node-v12.0.0-linux-x64.tar.xz、node-v12.0.0-x64.msi与发布说明中的清单一一对应。本篇发布说明在 nodejs.org 中的呈现方式本仓库将每篇发布说明作为一篇 Markdown 博客收录文件位于 pages/en/blog/release/ 目录v12.0.0 即 v12.0.0.md。文件头部 frontmatter 中的date、categoryrelease、title、author等字段会被 blog-data/generate.mjs 解析发布日期被用于按年份归类slug 按/blog/{category}/{文件名}生成因此本文对应的 URL 为/blog/release/v12.0.0并与其他 release 类博客一同按时间倒序归档。整个发布博客体系与下载页面共享同一份版本数据源保证「发布说明中声明的版本」与「网站上可下载的版本」保持一致。小结Node.js 12.0.0 是一次典型的「大版本清洗 底层换代」发布V8 7.4 与 OpenSSL 1.1.1b 带来了性能与安全的双提升TLS 1.3 默认可用、llhttp 接管 HTTP 解析、ESM 进入第二阶段同时十余个模块的废弃 API 被一次性清除ABI 版本跃升至 72。对于开发者而言升级到 Node.js 12 需要重点关注三类事项原生模块的重新编译、TLS 1.0/1.1 客户端兼容性、以及被移除 APIutil.print、Server.listenFD、customFds等的代码迁移。本文所依据的完整提交清单与 SHASUMS 校验信息均可直接在仓库中的 v12.0.0.md 原文中查阅。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →