Node.js 10.5.0 发布公告深度解析:scrypt 密码学、BigInt 文件系统与实验性 Worker Threads

发布时间:2026/9/17 20:37:20
Node.js 10.5.0 发布公告深度解析:scrypt 密码学、BigInt 文件系统与实验性 Worker Threads Node.js 10.5.0 发布公告深度解析scrypt 密码学、BigInt 文件系统与实验性 Worker Threads【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本篇文章以 nodejs.org 官网仓库中的 Node.js 10.5.0 (Current) 发布公告 为骨架结合仓库内发布工作流的源码实现系统讲解该版本引入的三大核心能力crypto.scrypt()密码哈希、fs模块的 BigInt 支持与 mode 参数修复、以及--experimental-worker标志下的worker_threads多线程初版。读完本文你将完整掌握 v10.5.0 的变更清单、如何校验官方发布物、以及这类发布公告在 nodejs.org 网站中是如何被自动化生成并呈现的。版本总览2018 年 6 月的 Current 版本根据公告的 frontmatter 元数据v10.5.0.md本次发布的关键信息如下元数据项值发布日期2018-06-20T18:48:28.677Z分类categoryrelease标题Node.js 10.5.0 (Current)布局layoutblog-post作者Michaël Zasso其中category: release决定了该文章会出现在网站的博客发布分类中。仓库中的博客数据生成逻辑apps/site/scripts/blog-data/generate.mjs会读取每篇博文的 frontmatter并自动为其挂上release、year-2018与all三类标签slug 则推导为/blog/release/v10.5.0。也就是说v10.5.0 这类发布公告与普通社区文章一样会被收录进站点的博客聚合页同时按年份与分类进行归档。说明v10.5.0 属于 10.x 主线Current 分支而非 LTS 版本同样的结构在后续如 v10.6.0、v10.16.0 (LTS) 的公告中一脉相承直到 10.x 进入 LTS 后标题才从 (Current) 变为 (LTS)。Notable Changes本次发布的核心变更v10.5.0 的亮点集中在三个模块crypto、fs与全新的 Worker Threads 实验特性。crypto新增crypto.scrypt()与scryptSync()本次发布为crypto模块引入了 scrypt 密码哈希支持对应 PR #20816。从提交列表可以看到这是一组成体系的改动crypto: add scrypt() and scryptSync() methods—— 新增异步与同步两个 APIcrypto: refactor pbkdf2() and pbkdf2Sync() methods—— 对已有的 PBKDF2 实现进行重构为新增算法统一参数校验路径crypto: refactor randomBytes()—— 随机数生成逻辑重构crypto: drop Math.pow(), use static exponentation与crypto: DRY type checking—— 内部实现层面的清理build: expose openssl scrypt functions to addons—— 同时把 OpenSSL 的 scrypt 函数暴露给原生插件addon使用。这一批 commit 意味着从 v10.5.0 起开发者可以在服务端直接使用crypto.scrypt()/crypto.scryptSync()对用户口令做加盐慢哈希而无需再依赖第三方库const crypto require(crypto); // 异步版本推荐在服务端使用避免阻塞事件循环 crypto.scrypt(用户口令, 盐值, 64, (err, derivedKey) { if (err) throw err; console.log(derivedKey.toString(hex)); }); // 同步版本适合脚本或启动期一次性计算 const key crypto.scryptSync(用户口令, 盐值, 64);scrypt 是一种内存硬化的 KDF密钥派生函数相比早期的 MD5/SHA 明文哈希能显著提高暴力破解成本此后它成为 Node.js 生态中口令存储的标准选项之一。同批次的lib: replace checkUint() with validateInt32()等提交表明新 API 沿用了当时正在统一的validateInt32()参数校验体系对键长、盐值等入参做严格范围检查。fsBigInt 统计信息与 mode 参数放宽fs模块的改动是本次发布的第二大看点对应 PR #20220、#20636、#20975 与 #20985BigInt 支持fs.stat、fs.watchFile以及fs.Stats类型新增 BigInt 支持SEMVER-MINOR。fs.Stats由此可以提供bigint: true选项使文件大小、时间戳等字段以BigInt返回从而正确表达超过Number.MAX_SAFE_INTEGER的文件尺寸。同批次的tools: add BigInt64Array and BigUint64Array to globals、tools: add BigInt to globals说明当时构建工具链也已同步适配 BigInt 类型。mode 参数不再抛错所有接收mode参数的 API 不再对大于0o777的数值抛异常而是先按0o777做掩码处理。对应的实现提交为lib: unmask mode_t values with 0o777#20975与lib: mask mode_t type of arguments with 0o777#20636修复了 issue #20498。修复关闭后 watcher 崩溃fs修复了在已关闭的文件事件监听器上继续操作导致的崩溃问题#20985修复 issue #20297实现提交为fs: do not crash when using a closed fs event watcher配套的lib,src: make StatWatcher a HandleWrap把StatWatcher重构为HandleWrap从生命周期管理层面根治问题。同模块还有若干健壮性改进fs: refactor fs module#20764、fs: improve fchmod{Sync} validation#20588、fs: drop duplicate API in promises mode#20559、fs: dont limit ftruncate() length to 32 bits#20851、fs: add length validation to fs.truncate()#20851。这些改动共同提升了fs在参数校验、32 位平台与 Promise 模式下的行为一致性。Worker Threads--experimental-worker下的多线程初版本次发布最具历史意义的变更是worker_threads模块以实验特性身份首次亮相PR #20876。公告明确提示Support for multi-threading has been added behind the--experimental-workerflag in theworker_threadsmodule. This feature isexperimentaland may receive breaking changes at any time.也就是说在 v10.5.0 中启用多线程需要显式传入命令行标志node --experimental-worker worker.jsworker_threads允许在同一个进程内创建多个独立线程每个 Worker 拥有独立的 V8 隔离环境与事件循环并可通过消息传递进行通信。从提交列表可以还原初版的能力边界worker: initial implementation、worker: rename to worker_threads—— 模块初建与命名worker: implement MessagePort and MessageChannel、worker: support MessagePort passing in messages、worker: add SharedArrayBuffer sharing—— 线程间通信基础设施包括MessagePort传递与SharedArrayBuffer共享内存worker: enable stdio、worker: improve error (de)serialization、worker: restrict supported extensions—— 标准输入输出、错误序列化与扩展名限制benchmark: port cluster/echo to worker、test: add workerdata-sharedarraybuffer test、test,tools: enable running tests under workers、test: add test against unsupported worker features—— 配套的基准测试与测试基础设施doc: explain Worker semantics in async_hooks.md、doc: fix reference to workerData in worker_threads—— 文档同步明确async_hooks中 Worker 的语义边界。实验状态也体现在提交历史中紧随其后的 v10.6.0 公告v10.6.0.md就因Atomics.wake更名为Atomics.notify而为worker_threads用户添加了兼容别名——这正是experimental, may receive breaking changes at any time的注脚。从源码结构看worker_threads是 Node.js 走向原生多线程的起点其后续演进如workerData、线程间require、BroadcastChannel等都建立在这批基础设施之上。Commits 全景按模块梳理全部提交原公告完整罗列了本次发布的全部提交共 140 条全部带SEMVER-MINOR标注的属于向后兼容的新增能力。这里按模块归纳如下读者可据此快速定位自己关心的子系统模块主要变更哈希前缀async_hooks移除废弃示例a6986fe8b6文档补充 Worker 语义benchmark禁用特定 ESLint 规则4b9817bf1ecluster/echo移植到 workerecba1c57b1, SEMVER-MINORbuild暴露 OpenSSL scrypt 给 addon02adb2d62c, SEMVER-MINORTravis 集成、并行 addon 测试、gas_version检查、LC_ALLC 兼容等child_process吞掉内部通信错误ea4be72f22cryptowrap 模式修复9981220e2ascrypt/scryptSync新增c9b4592dbf, SEMVER-MINORpbkdf2/randomBytes 重构SEMVER-MINORdepsOpenSSL CVE-2018-0732 修复e4a7e0d28bnode-inspect 升级 1.11.5V8 补丁至 6.7.288.46dnssetServers()错误与性能改进65b9c427acdoc大量文档风格统一、废弃周期说明、N-API 文档修订、workerData 引用修正、BigInt 文档fe5d35123b, SEMVER-MINOResmCJS 顶层加载时确保require.maina75e44d135fsBigInt 支持04e8f0749e, SEMVER-MINORmode 掩码修复watcher 崩溃修复c09bfd81b7模块重构、truncate/fchmod 校验http清理过时注释6aade4a765http2罕见头内存泄漏修复bcaf59c739更安全的 Http2Session 析构inspector停止拖拽 platform 指针296fd57324lib / lib,src参数校验重构validateInt32 等mode_t 掩码StatWatcher改为HandleWrap移除 OpenSSL 特性条件编译loader移除 module_job 中未用的错误码653b20b26dmeta移除 CODEOWNERS5d3dfedca2n-apiCallbackBundle 字段命名、函数调用运行时性能优化、移除未用成员net连接前 socket 结束时触发close18c057ab26perf_hooks精简 bootstrap 标记a3fd1cd8ea、8fddf591c5process回迁 process/methods 文件fc2956d37asrcprintf 使用%zx、AsyncWrap 错误检查、node_encoding.cc 新增、beforeExit 清理、bootstrap 重构等test新增 worker、SharedArrayBuffer、Linux perf、statwatcher async_hooks 等测试多文件测试规范化toolsBigInt globals 支持、js2c.py 自定义模板、macOS CLI 工具链适配、doc 文件 lintv8deserialize 中以 FastBuffer 替换 Bufferd46446afc5worker / workersworker_threads重命名、MessagePort/MessageChannel、SharedArrayBuffer 共享、stdio 支持全部 SEMVER-MINORwin, buildvcbuild 支持文档构建917960e0a1值得注意的还有两条看似矛盾的提交workers,trace_events: set thread name for workersdfb5cf6963与其随后的Revert529d24e3e8——这在实验特性的早期迭代中很常见说明线程命名功能在合入后因稳定性考量被回滚直到条件成熟才重新引入。下载资源与完整性校验公告末尾附带了 v10.5.0 的完整官方分发物清单。与 2018 年当时的环境一致本次发布覆盖 Windows / macOS / Linuxx64、PPC LE、s390x/ AIX / SmartOS / ARMv6/7/8且全部提供.tar.gz/.tar.xz压缩包平台下载地址Windows 32 位安装包https://nodejs.org/dist/v10.5.0/node-v10.5.0-x86.msiWindows 64 位安装包https://nodejs.org/dist/v10.5.0/node-v10.5.0-x64.msiWindows 32 位二进制https://nodejs.org/dist/v10.5.0/win-x86/node.exeWindows 64 位二进制https://nodejs.org/dist/v10.5.0/win-x64/node.exemacOS 64 位安装包https://nodejs.org/dist/v10.5.0/node-v10.5.0.pkgmacOS 64 位二进制https://nodejs.org/dist/v10.5.0/node-v10.5.0-darwin-x64.tar.gzLinux 64 位二进制https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-x64.tar.xzLinux PPC LE 64 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-ppc64le.tar.xzLinux s390x 64 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-s390x.tar.xzAIX 64 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-aix-ppc64.tar.gzSmartOS 64 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-sunos-x64.tar.xzARMv6 32 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-armv6l.tar.xzARMv7 32 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-armv7l.tar.xzARMv8 64 位https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-arm64.tar.xz源码包https://nodejs.org/dist/v10.5.0/node-v10.5.0.tar.gz其余文件见 https://nodejs.org/dist/v10.5.0/API 文档见 https://nodejs.org/docs/v10.5.0/api/。下载清单的生成逻辑在仓库的 downloadsTable.mjs 中维护它定义了一张模板 URL表再按语义化版本号通过semver判断平台裁剪规则例如 16.0.0 时排除 Apple Silicon、 19.9.0 时排除 Windows ARM、 24.0.0 时排除 ARMv7 等最终把%version%占位符替换为实际版本号。SHASUMS 与 PGP 签名校验公告以-----BEGIN PGP SIGNED MESSAGE-----包裹的形式给出了全部产物的 SHA256 校验和这是官方发布物防篡改的关键一环。完整校验和清单原文如下-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 a4008530bf54dc760206e71d7548977137d488e83081e3153a2ffead9bd9549e node-v10.5.0-aix-ppc64.tar.gz a85bda6ab91da8595e71736944cbd77c61afe05092217defd0fb74d9f77109f0 node-v10.5.0-darwin-x64.tar.gz 10e7228ca2c2ef3f78262ba62f4a64c655a4fbe8f023e3fb544f6b1b45fdba9a node-v10.5.0-darwin-x64.tar.xz 21ac19364d1fb2c52e61190112cd10573afa896ec87f0352a708dbc0a25354d9 node-v10.5.0-headers.tar.gz b51795e77e8cef658ca967b995684bdeb9fafbeaf0d352da77019cf4be49e226 node-v10.5.0-headers.tar.xz 2708f77f12966cdf13046c7ac8513fc430be5cbeacc02711d242d65044580d91 node-v10.5.0-linux-arm64.tar.gz 28e6baa2a4ac5b0f0f5adf85489574038d0a4ca48efe76a4e5831b6b222652ba node-v10.5.0-linux-arm64.tar.xz 9178e7b45a1910619c80218e436e6a40cfda77b2292825322fc59c3df761d199 node-v10.5.0-linux-armv6l.tar.gz cf12d275e9a3034bf79dccb639382363e8596d92ef777a0580210ab9908bd271 node-v10.5.0-linux-armv6l.tar.xz aa615ba40a931c90faaf468a132a08cc662bc12f64608241ee8892407821f8ac node-v10.5.0-linux-armv7l.tar.gz 08107045cff33962cfeaf0fc18baab7675aa1328f1d56ef41a038f2a5a733424 node-v10.5.0-linux-armv7l.tar.xz 45c0aa657b0764564f79da8c8cab9a42b3f8e81d9f1c57f8cdb276a6f1d195b1 node-v10.5.0-linux-ppc64le.tar.gz febd42beb6f11ac3cc24f4339276c95e42a9b2ddd6a785e037e5dc8ee3efca29 node-v10.5.0-linux-ppc64le.tar.xz ca97bd536fdd88675bcf98daa0724622a7964f5da16bb444958284e37eeaaab6 node-v10.5.0-linux-s390x.tar.gz a9614bbba6a210253cb23cf7f64fa34de9c4c130a16e27ead3c26a69a6d18be1 node-v10.5.0-linux-s390x.tar.xz 5d77d2c68c06404028f063dca0947315570ff5e52e46f67f93ef9f6cdcb1b4a8 node-v10.5.0-linux-x64.tar.gz 8b12be967f5962a8173dca235e1a6f642ee29dcf5fc27697004af898ffeca187 node-v10.5.0-linux-x64.tar.xz 109acb4ada9d96a16f0f5c01acd6485b60e4d5fd865d0be7dff98822251a8314 node-v10.5.0-sunos-x64.tar.gz 7df25dc1a08c06eb3894b786a7a833198c3bf4ffb7d87d7dd20023a61041081d node-v10.5.0-sunos-x64.tar.xz 4c5b360a06d874ae3f7e20fb9aacfa8d2da651a1e27a617c29164e2107514313 node-v10.5.0-win-x64.7z ce2b1f9976de64bcc0a5ce877edee0d29c4db1ebab5a7fd713afffd661e99e08 node-v10.5.0-win-x64.zip a50a2853c1b882cdd8a545d5d735064d375725ab3766a8fff1a68c27f27998bd node-v10.5.0-win-x86.7z 25b074ff7af71ad36f21954f67b04ffcf6a78ea32ec8855afbab466f4bbc9a9d node-v10.5.0-win-x86.zip baee3a34ecbe9040c6da8f01eb61bde563a0458a94401a80dd87229fc938add4 node-v10.5.0-x64.msi 74762c180eacc460769055b6fcfd6cf6168de8e3ae5622b99cc1c1bf59b99c1f node-v10.5.0-x86.msi 6f3d061a0455a4e1b840bcfa0e2c0f5891d4c52bc42f304542e2ea0236b06a29 node-v10.5.0.pkg 2b61828fd32e79ed3e6cb4781dfa0d61d03739e30da2f68b3bab63d7f92a6d8d node-v10.5.0.tar.gz 7b54c543745b0df9ee159571fe989d5bbea58a903c51f7d5ccba4105336b33bc node-v10.5.0.tar.xz 7e9dff3948c2da1236610fca417416b68943c71a8acf7c88469a11cbc504fbe6 win-x64/node.exe 0e4a0c875401941aa47ceb4667684b70035517377d7258c2f1503630c36a9296 win-x64/node.lib 444c7c1c11856b9d7f8aa7d2b2442549b530489f441434896c26f0837b5bb483 win-x64/node_pdb.7z bebb68e0c4e4cf251e2e51c5dcd51802e5dc5852400a040a009aaf1a88d598ec win-x64/node_pdb.zip 254860635c1bece8ffaf469d446bed112cf78fb9976f3ea28d6335fe6920419a win-x86/node.exe 1839f1081dc6de135458607edcfbaeb98cec6bae553ae929c3e9a5dbdaf7cea1 win-x86/node.lib a1dfaa9a36e24e84e250d2aa5380ebb0ab25200b1f578b4c86c6fb217fc81a48 win-x86/node_pdb.7z 662e2e0e34fd2898f0dc1e195c4a3108f59bac43efc503a2eb3ac48b761b7d48 win-x86/node_pdb.zip -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJbKqDoAAoJEHcPeppa4VYA7mYP/jDTupIoRcNlYMU49xT4q7jf NvCK8nXPxFMX6Ve7X/crldwSgoOfTiDWdhIDUarvX3qxVsgDLFgGVyDqjCzbord QPS7lzhP827bn5Xc/pXkWLl7/u8JJXOxmheOK5/wRo/nAzy0lY80TLM9T3YLeQZ 4zINpUY5/yhZm8HQmzrAIIH81ztx/3MHMnxJwdknGwSG9dEEoSKM8kZvwRkyLIcY xXvxJUejFnBXNuKfhzaQynjdxAr3zULwJSbxTzHaKrqBgQxYsGbrVihfrnOYe9S9 xw0e/GKIA5CRi4Gp1BobZCmZKx2IT6mtBeSQnhBfXW7A8iacwsraICg1xsyl5ek KgYPR5FwMZHLBEq4vCWlVdiOTla1yE4WgEVXncPo3dlsQw90eeFZdye1wQt3C70D EsReqk51COJab21/fhV7lMTfOPurq2iQUl1UOQfLC503mu/rU0psQsbCal5hUsA RNC5DzSdGaq/NuMvMfUlxRgp8FLOS5tmBmhcLREW0hfNVfA8Gd86/tXwIswn8xr owiLmSBIyxP4V11jqx/uKqyKEHAMNNBaZSqCSHl/jMfcNTEhHQPw5sMr6GwlYjlD X977XRZl8ZUIglXTzN7VYsuV4YrtJKFjPjF9wsX9c7RtaNwSSl2THjned2WCyM1O P3XRAL17ghsJZ7FJqUZ D5A -----END PGP SIGNATURE-----校验方式建议如下# 1. 下载二进制与 SHASUMS 文件 curl -O https://nodejs.org/dist/v10.5.0/node-v10.5.0-linux-x64.tar.xz curl -O https://nodejs.org/dist/v10.5.0/SHASUMS256.txt.asc # 2. 比对 SHA256 校验和 grep node-v10.5.0-linux-x64.tar.xz SHASUMS256.txt.asc | sha256sum -c - # 3.可选用发布团队的 PGP 公钥验证签名 gpg --verify SHASUMS256.txt.ascPGP 签名位于校验和文件的内联块中即使有人篡改二进制或校验值只要签名公钥可信验证便会失败从而保证发布物的来源与完整性。从公告看 nodejs.org 的发布工作流v10.5.0 公告并非纯手工编写——仓库提供了自动生成脚本 release-post/index.mjs其流水线如下确定版本命令行传入版本号node index.mjs v10.5.0若不传则从官方 dist 索引自动抓取最新版本抓取 changelog 片段从 Node.js 主仓库的CHANGELOG_V10.md中按a id10.5.0锚点正则截取对应发布小节fetchChangelog并把*列表规范化为-fetchChangelogBody解析发布策略与作者通过正则从 changelog 头部提取 (Current)/(LTS) 策略与author再调用 GitHub 用户 API 补全作者姓名fetchAuthor、fetchVersionPolicy拉取 SHASUMS下载官方SHASUMS256.txt.asc原文fetchShasums失败时以[INSERT SHASUMS HERE]占位验证下载链接对 downloadsTable.mjs 生成的每一个下载地址做 HEAD 请求不存在则标记*Coming soon*verifyDownloads、urlOrComingSoon渲染与落盘由 Handlebars 模板 template.hbs 渲染出 frontmatter日期、分类、标题、作者 changelog 正文 下载清单 SHASUMS 的完整 Markdown经 Prettier 格式化后写入pages/en/blog/release/v{version}.mdrenderPost、formatPost、writeToFile重复生成时可用--force覆盖。也就是说v10.5.0.md 中我们看到的Notable Changes、Commits、下载链接、SHASUMS四段式结构正是模板中{{changelog}}、{{#files}}与{{shasums}}三个插槽渲染的结果。而文件在网站中的最终呈现则由 blog.ts 中的分类映射与分页逻辑负责release分类直接映射为发布类型并按每页固定数量切片生成博客列表页。小结Node.js 10.5.0 是 10.x 时代一个承上启下的版本crypto.scrypt()补齐了官方口令哈希方案fs的 BigInt 与 mode 掩码修复解决了大文件与权限位的长期痛点而worker_threads则首次把真正的多线程带进 Node.js 标准库尽管当时还带着--experimental-worker的实验帽子。对于希望研读历史版本公告的开发者而言v10.5.0.md 既是完整的变更档案也是理解 nodejs.org 发布流水线从 release-post 脚本 到 博客数据生成的最佳样例。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询