免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Node.js 10.1.0(Current)发布解读:fs.promises 迁移、HTTP aborted 属性与 N-API 符号初始化

Node.js 10.1.0(Current)发布解读:fs.promises 迁移、HTTP aborted 属性与 N-API 符号初始化 Node.js 10.1.0Current发布解读fs.promises 迁移、HTTP aborted 属性与 N-API 符号初始化【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.orgNode.js 10.1.0 是 Node.js 10Current 分支的首个维护性小版本发布于 2018 年 5 月 9 日由 Myles Borins 发布。本文基于 nodejs.org 网站仓库中归档的官方发布公告逐项解读本版本的 5 项 Notable Changes、按模块归类的完整提交清单、全平台下载产物与 PGP 签名的 SHASUMS 校验清单并借助仓库内的发布脚本与博客渲染逻辑说明这类发布公告是如何被生成并呈现在 nodejs.org 官网上的。读完本文你将清楚了解 Node.js 10.1.0 的关键 API 变化及其使用方式、如何校验官方安装包完整性以及 nodejs.org 网站发布公告类内容的生产链路。版本定位与背景Node.js 10.0.0 于 2018 年 4 月 24 日发布是 Node.js 基金会成立以来的第七个主版本并将于 2018 年 10 月进入 Active LTS 阶段。v10.1.0 作为其后的第一个次版本SEMVER-MINOR没有引入破坏性变更而是在 console、fs、http、n-api 与 src 五个领域落地了一批新能力与内部重构同时把 V8 补丁升级到 6.6.346.27。本版本共有 5 项 Notable Changes其中 4 项被标记为 SEMVER-MINORconsole、http、n-api、src意味着它们在语义化版本中属于向后兼容的新增功能级别模块变更内容作者PRconsoleconsole.table()改用带颜色的 inspect 输出TSUYUSATO Kitsune#20510fs将fs/promises移动为fs.promisescjihrig#20504http为 request 增加aborted属性Robert Nagy#20094n-api支持通过特殊符号special symbol初始化模块Gabriel Schulhof#20161src新增公开 API 以暴露主 V8 PlatformAllen Yonghuang Wang#20447Notable Changes 逐项解读consoleconsole.table()输出改为彩色从本版本起console.table()在终端中渲染表格时使用带颜色的util.inspect输出使表格中的字符串、数字等不同类型数据以不同颜色呈现提升可读性。同一提交还修复了console.table()的一个显示边界情况#20323 对应的修复记录在 Commits 清单中。配套的文档改动移除了此前关于console.table()依赖 inspector 的错误说明。// Node.js 10.1.0 起控制台表格将以彩色 inspect 风格渲染 console.table([ { name: node, type: runtime }, { name: npm, type: package manager }, ]);fsfs/promises迁移为fs.promises这是本版本最值得关注的结构性变化此前以require(fs/promises)形式提供的 Promise 版文件系统 API被正式移动为fs.promises属性即// 旧方式Node.js 10.0.x const fsp require(fs/promises); // 新方式Node.js 10.1.0 起 const fsp require(fs).promises; // 或者直接解构使用 const { promises: fsp } require(fs);配套提交还修复了 Promise 版 API 的两处实现问题promises/lchown中fchmod误写为fchown的缺陷以及promises/write中的损坏代码均出自 #20407同时新增了fs/promises的 filehandle stat 测试#20492与覆盖fs/promisesAPI 的测试#20219。fs.promises中诸如fs.promises.readFile()、fs.promises.stat()等方法的返回对象为FileHandle相关文档在本版本中也得到了澄清#20450。httprequest 新增aborted属性http.ClientRequest实例在本版本新增了aborted布尔属性用于标识请求是否已被中止。该属性为只读当请求被客户端主动request.abort()中止时为true这为服务端与客户端代码判断请求生命周期提供了更直接的依据const http require(http); const req http.request(http://example.com, res { res.on(data, chunk process.stdout.write(chunk)); }); req.on(error, () { // 请求被中止时可通过 aborted 判断原因 if (req.aborted) { console.log(request was aborted); } }); // 超时后中止请求 setTimeout(() req.abort(), 1000);本版本同时对 HTTP 出站头处理逻辑做了重构#20250并为https模块的构造器补上了maxHeadersCount定义#20359。n-api通过特殊符号初始化模块N-API 是 Node.js 提供的稳定原生插件native addon接口本版本为其引入了一种新的模块初始化方式可以导出一个名为node_api_module_get_api_version_v1之类的特殊符号使运行时通过该符号识别并初始化模块从而与既有NODE_MODULE宏的注册机制共存。配套的文档、测试与 CLI 文档同步更新#20301、#20428、#20426、#20425、#20299、#20292、#20243、#20433、#20427、#20390、#20395并新增了napi_throw()传入原始类型primitive的测试与文档#20428。这一改动为需要同时面向 N-API 与旧式 V8 API 的插件作者提供了更灵活的模块入口声明方式其细节以本版本 N-API 文档doc/api/n-api.md为准。src新增公开 API 暴露主 V8 Platform本版本在原生层src新增了公开 API允许外部代码获取 Node.js 主进程使用的 V8 Platform 实例为需要直接操作 V8 调度、后台任务队列的嵌入方如自定义运行时、性能分析工具提供了入口。同一周期内的相关内部重构包括BaseObject内部字段管理重构#20455、移除kFlagNoShutdown标志#20388、限制前台任务排空循环#19987以及create-per-isolate strings after platform setup#20175等共同提升了嵌入式场景下的稳定性。全量提交清单按模块归类v10.1.0 共包含一百六十余个提交覆盖从 assert、crypto 到 test、tools 的二十余个模块。下面按模块归类整理括号内为作者后接 PR 编号无 PR 编号的提交为直接推送assert7293c58d51使跳过指示器显示为蓝色Ruben Bridgewater#20315f5054d3412改进错误消息Ruben Bridgewater#20315benchmark16970ffda4在 next-tick-exec 中跟踪执行时间Anatoli Papirovski#20462289e4cef3f修复 next-tick-depthAnatoli Papirovski#20461b0e6f10530新增 zlib gzip gunzip 循环基准Anna Henningsen#20034build167de1f038检查不同的弃用签名Ruben Bridgewater#20384348d391a71移除--xcode配置开关Ben Noordhuis#203282ce4b7cb8c构建不再依赖PATH中的cpAnna Henningsen#20296c5b3459003Makefile 中kill使用-9Rich Trott#20195child_processb5931e1d45为匿名函数命名Denis Fäcke#20399ec2037da12修复传递 http sockets 时的泄漏Santiago Gimeno#20305consolea7758c76c0SEMVER-MINORconsole.table()使用彩色 inspectTSUYUSATO Kitsune#2051029bc735d42修复console.table()显示边界情况Rich Trott#20323cryptodfcf20f5fdCipherBase 使用新的 OpenSSL 常量Tobias Nießen#20339e17280e8c9pbkdf2 使用 checkIsArrayBufferViewDaniel Bevenius#2025161e93963ce新增 checkIsArrayBufferViewDaniel Bevenius#20251e81bb9f8a3新增 getIntOption 以减少重复Daniel Bevenius#20247391d2f830a简化 diffiehellman getFormatDaniel Bevenius#20246deps3cf53b66c2打补丁升级 V8 至 6.6.346.27Myles Borins#20480da8bc6ab50从上游 V8 精选 76cab5fMichaël Zasso#20350doc文档本版本占比最大05ce635e9a匹配 console.count()/countReset() 签名Lambdac0re#20599e995ae5992澄清事件监听器中的thisdaGo#20537bd27a59865将 tunniclm 移至 EmeritusRich Trott#20533ec65fe48d8为 fs 同步方法添加 trace 分类Chin Huang#205268148fca730更新 COLLABORATOR_GUIDE 的 Who to cc...Vse Mozhet Byt#2056470586c0334移除 emit events 前的 periodicallyJesse W. Collins#2058101560b69a7修订撤销弃用的文本Rich Trott#20519eed3f10615编辑 DEP0013 文本Rich Trott#20519b2b4871c15微调 DEP0065 文本Rich Trott#2051973f5ea9bd9修复 DEP0079 文本中的笔误Rich Trott#20519faa81937a5编辑 DEP0082 文本Rich Trott#20519f796b0856c修复 DEP0085 文本Rich Trott#2051974c74db35e编辑 DEP0094 文本Rich Trott#20519c6e4ffa429编辑 DEP0012 文本Rich Trott#20519adf5b80b20编辑 DEP0101 文本Rich Trott#2051967e44bf588编辑 DEP0104 文本Rich Trott#205190e8805186f为 Http2Session:stream 事件补充参数Ujjwal Sharma#2054798ccaead0d更清晰的 doc-only 弃用说明Ruben Bridgewater#20381bea4ffcc97更新 crypto.md 中的一条命令Shobhit Chittora#20500018b5ad800为 C 风格结构体新增 snake_case 章节Daniel Bevenius#204238bd45d8212crypto 文档更新为 openssl list -cipher-algorithmsShobhit Chittora#20502880772a7ff修复 N-API 属性描述符文档Gabriel Schulhof#2043379e1260cd8修复 manpage 警告Jérémy Lal#20383745e0a5583记录在 REPL 中使用domainAyush Gupta#20382b2e8b9c473修复 mkdtemp() 文档Rich Trott#20512d7db306d3b更新 fs.access() 示例BeniCheni#20460b2d6eb74d4清理 n-api.mdMichael Dawson#20430e5537477d4更新 Collaborator Guide 引用Rich Trott#20473391c420c3e同步 appendFile() 的参数名Rich Trott#204898b17e7ae04更新 crypto.md 中的 cli 标志Shobhit Chittora#2040074685f1b8f为 documentation.md 补充缺失句号Vse Mozhet Byt#20469b0ed31cf9c更新 writing-and-running-benchmarks.mdxsbchen#20379658fbdc105补充 http.ClientRequest maxHeadersCount 文档Daiki Arai#203617a769ebba8在 pull-requests 文档新增 squash 指南Rich Trott#20413166df9e15c从 onboarding 文档移除 squash 指南Rich Trott#2041356c27c6a2b补充更多缺失反引号Vse Mozhet Byt#20438abf11550b2补充缺失句号或冒号Vse Mozhet Byt#20401261776d6b4缓解marked的 bugVse Mozhet Byt#2041154e93315ed指定监听器参数类型Vse Mozhet Byt#20405fcc5492df2澄清 FileHandle 文本Rich Trott#204505a839b9911移除 fs.write() 中的不清晰文本Rich Trott#20450459c20c0b8编辑 fs.createReadStream() 的 highWaterMarkRich Trott#20450f36a5e3ba5移除 N-API 冗余目录Ayush Gupta#203954bc87c185b为 settings 事件补充参数Ujjwal Sharma#20371d7557e111e细化 napi_get_property_names() 文档Gabriel Schulhof#20427b61ae7fe09移除 has been known 的不确定性表述Rich Trott#20412de9d1f15de移除 onboarding-extras 中的括号内容Rich Trott#203935542a98aa4改进 process 事件标题Ruben Bridgewater#2031290026c3f3e改进 assert 文档Ruben Bridgewater#2031357e5a3e15f移除冗余空行Vse Mozhet Byt#203989cf3ae5bc3为 n-api.md 补充缺失反引号Vse Mozhet Byt#20390be34388a07统一并去重 timers.md 的返回值Vse Mozhet Byt#203109c11a18f70从 tarball 移除 eu-stripjvelezpo#20304b47044ac0f改进 Http2Session:goaway 事件参数Ujjwal Sharma701f536ef4移除多余的 URL require 语句Mark Tiedemann#20364d9bc9217a7修复 console.md 中的笔误Daniel Hritzkiv#20349cc09d7ec5b移除console.table()依赖 inspector 的说明Rich Trott#2034614188b1266在支持选项中添加 Slack 社区Tracy#181913a3144cf04移除 os.uptime() 的 Windows 说明cjihrig#20308c139d2ab8d修复 unhandled 为 uncaughtRuben Bridgewater#202937f6172b64b改进 Http2Session:frameError 文档Ujjwal Sharma#20236c9b202f817在 events.md 中新增 emitter.off()Ajido#202913bf736e569更新指南中的 pull request 模板Zachary Vacura#20277171cbb1c64修复 net.Socket 链接不一致Hackzzila#2027126525ef5ab修复 CHANGELOG_V10.md 中的笔误Vse Mozhet Byt#202653bc5353110修复 10.0.0 变更日志中的 API 名称拼写Tobias Nießen#20257errorse25f2c9e91移除死代码Ruben Bridgewater#20483b89d8178b4SystemError 轻微重构Ruben Bridgewater#20337events58a65d6689优化最佳场景下的条件判断Anatoli Papirovski#20452fseb483dbac5promises/lchown 中 fchmod 改为 fchownСковорода Никита Андреевич#20407eb724f00a3移除 promises/write 中的损坏代码Сковорода Никита Андреевич#204070b5dd102e0将 fs/promises 迁移为 fs.promisescjihrig#20504e45e5b809disFd 指向 isUint32Daniel Bevenius#20330http / httpsf0b2b2605a重构出站头处理Anatoli Papirovski#202501385ffcccfSEMVER-MINOR为 request 增加 aborted 属性Robert Nagy#200940b16c2482dhttps 构造器中定义 maxHeadersCountDaiki Arai#20359http26acefc36ee将 http2_state 类重命名为 Http2StateDaniel Bevenius#2042342bbaa338d减少 http2/core 中的 require 调用Daniel Bevenius#20422e397d19e58移除不必要的 v8 限定名Daniel Bevenius#20420b2bbc3619e移除未使用的 node_http2 using 声明Daniel Bevenius#204207d9f1f3971修复 ping 回调Ruben Bridgewater#2031146bd86235d修复长 payload 请求的响应Anatoli Papirovski#20084inspector1490164230允许并发 inspector 会话Eugene Ostroukhov#20137375994f940使用默认 uv_listen backlog 大小Eugene Ostroukhov#20254lib7b8e9ca7b8内部暴露 FixedQueue 并修复 nextTick bugAnatoli Papirovski#20468b6de6a7e35为匿名函数命名Carrie Coxwell#204089eacd66bcb确保console可写Kyle Farnung#20185n-api17dbf6c77f使 test_error 函数为 staticGabriel Schulhofad793ab93c测试并文档化对 primitive 调用 napi_throw()Gabriel Schulhof#204281908668826文档化 napi_external 值的外观Gabriel Schulhof#204267ac491b8ac文档化原生字符串会被复制Gabriel Schulhof#20425705d9ecd13移除未使用的 Test 函数Daniel Bevenius#203208d24b6ed34更新 CLI 文档Gabriel Schulhof#20301cd83df386bSEMVER-MINOR通过特殊符号初始化模块Gabriel Schulhof#20161b5c1c146f5移除多余的 persistentGabriel Schulhof#202992de3343474使方法为 staticGabriel Schulhof#20292b239591ed8使方法为 staticGabriel Schulhof#20243repld3a219c6ec为 load/save 消息添加空格cjihrig#20536srcd357875ea1SEMVER-MINOR新增公开 API 暴露主 V8 PlatformAllen Yonghuang Wang#20447df2cddc9c7移除 Environment::SetProtoMethod 中不必要的原型Brandon Ruggles#2032154f30658a3修复 extern 声明不一致Yang Guo#20436f5d42532a3重构BaseObject内部字段管理Anna Henningsen#20455c21a52f415在属性回调中更直接访问ContextifyContext*Anna Henningsen#20455c0f153528e移除kFlagNoShutdown标志Anna Henningsen#2038858be6efd29避免使用std::make_uniqueAnna Henningsen#2038631812edb2d移除 tracing 中不必要的拷贝Anna Henningsen#20356e0d2bc5cce改进致命异常处理Ruben Bridgewater#2029444fdd36b96移除 SecureContext_externalgetterAnna Henningsen#2023781de533836在 platform 设置后创建 per-isolate 字符串Ulan Degenbaev#20175b5bc6bd94b修复 Systemtap node_gc_stop 探针William Cohen#201526bf816fde2限制前台任务排空循环Ulan Degenbaev#19987bd2e521096重命名 VerifySpkac 函数中的返回变量Daniel Bevenius#20218a4dae6c226优先使用 false 而非布尔零值Daniel Bevenius#202184c4be85655回滚 stream: prevent end to be emitted after errorBrian White#20449stream05b7b8d506修复异步迭代时的错误处理Julien Fontanet#20329fd912a37a0Duplex 构造器只检查一次选项Daniel Bevenius#20353test / test,n-apie19200a666修复不稳定的 http2-flow-control 测试Anatoli Papirovski#20556b2d3db433d一致使用 common.canCreateSymLink()cjihrig#20540578e0546e0修复 mips 上的 test-cli-node-options.jsRuben Bridgewater#20377601f138063修复 mips 上的 buffer 写入Ruben Bridgewater#203771de67c71fb修复非 Windows 上的 common.canCreateSymLink()Masashi Hirano#2051170b2e169b4修复 N-API 错误测试Gabriel Schulhof#204876052ccc009重命名命名不当的测试Rich Trott#2053280bdff0086新增 fs/promises filehandle stat 测试Masashi Hirano#204924dce39a919使用 fs.copyFileSync()Richard Lau#20340b24ee078f6移除 remoteClose() 中多余的 strictEqual() 参数Daylor Yanes#203432b8b40f800修复一个 TODO 并移除过时 TODORuben Bridgewater#20319645a97a44e在 common.expectsError 中校验参数长度Ruben Bridgewater#20311b646566ab4移除 assert.strictEqual 消息kailash k yogeshwar#2022361a56fe437为 fs/promises API 新增覆盖测试Mithun Sasidharan#20219769b6c8fd2修复不稳定的 child-process-exec-kill-throwsSantiago Gimeno#2021399e0b913c6为 Certificate 新增 checkMethods 函数Daniel Bevenius#20224d4b19cf43f用 C 重写 test_errorGabriel Schulhof#20244timers / tls / url / util / toolse552158dd2为匿名函数命名timersKyle Martin#203971109104206移除 Server 构造器中的 sharedCredstlsDaniel Bevenius#204911ebec18624清理 onhandshakestart 回调tlsAnatoli Papirovski#204669b30bc4f81修复 getEphemeralKeyInfo 以支持 X25519tlsShigeki Ohtsu#2027373cd2798df在 validateKeyCert 中指定 options.nametlsDaniel Bevenius#20284ff619d39e6修复 WHATWG host 格式化错误urlYichao Peak Ji#204931b9c40cc71为匿名函数命名utilCarrie Coxwell#20408e854c953fd提升 spliceOne 性能utilAnatoli Papirovski#204533962c734ae修复 isInsideNodeModules 在错误中的判断utilAnatoli Papirovski#20266f7267b4af0为 skipIfEslintMissing 新增 eslint 检查toolsRichard Lau#203722a1efa26a7在备选版本文档菜单中加入 v10toolsVse Mozhet Byt#20586a4d2089c76移除 doc/html.js 中冗余代码toolsVse Mozhet Byt#205143912551252修复test.py --time的 TypeErrortoolsRichard Lau#20368b0c0352742去重 doc/type-parser 的属性访问toolsVse Mozhet Byt#20387ccf1b24af2移除冗余 RegExp 标志toolsVse Mozhet Byt#20309a12d13ad06简化 HTML 生成toolsVse Mozhet Byt#203078ddbac2fd6为崩溃新增日志输出toolsRuben Bridgewater#20295ab13f13a6c为超时测试展示 stdout/stderrtoolsRich Trott#20260b5584c448a现代化并优化 doc/addon-verify.jstoolsVse Mozhet Byt#20188从提交分布可以看出本版本的重心一是围绕 10.x 新 APIfs.promises、N-API补测试、修缺陷、完善文档二是对 events/http2/inspector/src 等模块做内部重构与性能微调为后续 LTS 化打基础。全平台下载产物与安装v10.1.0 提供了覆盖主流操作系统与架构的二进制产物对应关系如下平台产物文件名Windows 32-bit 安装器node-v10.1.0-x86.msiWindows 64-bit 安装器node-v10.1.0-x64.msiWindows 32-bit 二进制win-x86/node.exeWindows 64-bit 二进制win-x64/node.exemacOS 64-bit 安装器node-v10.1.0.pkgmacOS 64-bit 二进制node-v10.1.0-darwin-x64.tar.gzLinux 64-bit 二进制node-v10.1.0-linux-x64.tar.xzLinux PPC LE 64-bit 二进制node-v10.1.0-linux-ppc64le.tar.xzLinux s390x 64-bit 二进制node-v10.1.0-linux-s390x.tar.xzAIX 64-bit 二进制node-v10.1.0-aix-ppc64.tar.gzSmartOS 64-bit 二进制node-v10.1.0-sunos-x64.tar.xzARMv6 32-bit 二进制node-v10.1.0-linux-armv6l.tar.xzARMv7 32-bit 二进制node-v10.1.0-linux-armv7l.tar.xzARMv8 64-bit 二进制node-v10.1.0-linux-arm64.tar.xz源码包node-v10.1.0.tar.gz所有产物均位于 Node.js 官方发行渠道 v10.1.0 目录下同时提供node-v10.1.0-headers.tar.gz/.tar.xz用于编译原生模块的头文件包、node-v10.1.0-win-x64/.win-x86的压缩包与 PDB 符号文件以及文档与其余发行文件。需要说明的是v10.1.0 的产物清单中不包含后续版本才引入的 macOS Apple Silicon、Windows ARM64 等产物——这一点可以从仓库中的下载清单生成器 downloadsTable.mjs 得到印证该脚本按语义化版本过滤产物例如semver 16.0.0时剔除 macOS Apple Silicon 二进制、 19.9.0时剔除 Windows ARM64 产物、 23.0.0时剔除 32 位 Windows 产物。也就是说发布公告中出现哪些下载项是由版本号驱动、自动生成的。SHASUMS 校验验证安装包完整性发布公告末尾附带了 PGP 签名的 SHA256 校验文件SHASUMS256.txt.asc这是官方推荐的完整性校验方式。其结构为标准的 PGP 签名消息先由发布密钥对校验和列表签名再附上签名块。使用者应当下载目标产物与 SHASUMS 文件用官方公开密钥验证 PGP 签名确保校验和列表本身未被篡改对下载文件计算 SHA256与列表中对应文件名后的哈希比对。例如 Linux x64 二进制对应的校验行为cb5860c0d3249330d882fb8c6619c082cf3cda177536d4ed979388dde0034f22 node-v10.1.0-linux-x64.tar.xz完整校验清单如下原样摘录自发布公告PGP 签名块一并保留便于核对签名格式-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 f4f96c3180f9fd8113632e499d5129709d52d8206e250924ff4c2d7d07ba5715 node-v10.1.0-aix-ppc64.tar.gz 383ef526e27b92113f8dc0dad406b771f6ecaf9e3fddd4f5357590a3cf543d7b node-v10.1.0-darwin-x64.tar.gz 2f39d90b8bd80c75c2a97ec4ddaf2f4f11477fae20c5c28b31b59470c9a29a5c node-v10.1.0-darwin-x64.tar.xz 37ccc9b953c2c62f704f5dee2ce38272fc194e64c03a446c2e3512154dbdd212 node-v10.1.0-headers.tar.gz c92e3561249a56cb264cead82a470ba461008808a06d8c7bdf4d9aa2b7c6e507 node-v10.1.0-headers.tar.xz 62c395fd3ffca1671dd0b7a84e7250485e484e7d62f9be13fd45879e9ef45290 node-v10.1.0-linux-arm64.tar.gz 01e252589cf1ce61d2aaa316895001eb24c90a48b04a0e4896de252d2840ffe9 node-v10.1.0-linux-arm64.tar.xz 9888d66a30f9e14acdfd165f7e4a5029128b59ebdb20c5371f0293bde8c85987 node-v10.1.0-linux-armv6l.tar.gz fbfb4b2ef96e0914d5d865349f4b72ef722549ab74e1528a64c5740013fe2751 node-v10.1.0-linux-armv6l.tar.xz ac70505fa49576dbae848d4a6a66b99bef62e20fcbc581edada9babc6801cd94 node-v10.1.0-linux-armv7l.tar.gz bd8a8bc2baf16401683a462438c3430174d0cba6d42478ed17d25c6a0116c8e1 node-v10.1.0-linux-armv7l.tar.xz 33ac904f443dd73c1b14dd55fe6ea5286b75244f79ccde67f8b0eeeb0d8d6f5c node-v10.1.0-linux-ppc64le.tar.gz 0bcc6f368a2f57365ccaf3b77e5d2eccb1d84efed1b073bc974541a84829edac node-v10.1.0-linux-ppc64le.tar.xz dee8c829b0fc7ab924e2ac13242cb007a170489a3afd5ef5432ca7d25a210afe node-v10.1.0-linux-s390x.tar.gz 89b6e0e097d6daad64aacf8a5fc478c695b1c59474b007730c37db760c57dad2 node-v10.1.0-linux-s390x.tar.xz a750eaa8dd2abf175216377da86ed24d1265597b86c542fcf9cdf7b8043e006e node-v10.1.0-linux-x64.tar.gz cb5860c0d3249330d882fb8c6619c082cf3cda177536d4ed979388dde0034f22 node-v10.1.0-linux-x64.tar.xz e97486f5e73bf767877daea5cb6ea66be1b3ccbc193c4de779ca73e911fd5503 node-v10.1.0.pkg 676bd2b518aa58e97664f814679cba5218e04d54c1d1b79e0d5ceea069cc285d node-v10.1.0-sunos-x64.tar.gz 95a82d717371ba4fbbcf960768157dd43dc7d348b31c81e243ed995df8c14715 node-v10.1.0-sunos-x64.tar.xz e4b5a1d9fac4b20b5421afe34108867df359c69c4c4e2ad6e2bd75b113ddf0db node-v10.1.0.tar.gz a6671055b4085795f5427f42349eae14c5dfe7692c923dffb7635b9f62cc7902 node-v10.1.0.tar.xz afe3b7cb256b402a158629dfb561fd63878f2e07f1a90e4a836084f7a2418235 node-v10.1.0-win-x64.7z 8448bbd50731e98a4ed8bb4f3f3964170ff3a26418e9bcb3caf770faa9fb06d7 node-v10.1.0-win-x64.zip cda9dbcde8f154827a8e4cd101d54760b5270c83cc8d38cefada1343388074c3 node-v10.1.0-win-x86.7z bfe8274bb963577d150239d4b03b4d2ddd033a6fbee621c3144dc866054dfc53 node-v10.1.0-win-x86.zip 5e8c41ed9f5424eb43ddbb83befedcfda301cbc26f3bae88a13811061848d8d1 node-v10.1.0-x64.msi 29781e8d8e24ff67aafa427950a7004a023b99907f0328dda633549ca3afd32a node-v10.1.0-x86.msi 20dedc9188d68a9041beec78f7b7f0d8afadfda8817849d035cb3679259ca265 win-x64/node.exe 4623b1dc138883e66cd834e16c02b0b0470f6e4eab81d8a603f9b6d5b2ccf3a2 win-x64/node.lib 0f7405ab40b7d903957f0ed7fdfec1876e8592f973347022a4c31115e4a5d722 win-x64/node_pdb.7z f66a3eff82ff619a3f0e8a0adce09de5b4287eb2fc2f0cbdd17ff8308ca18b60 win-x64/node_pdb.zip 1eb72db6c8be2bbfa6faed1dcde50d2f48bf7ffea1969508a126fabee30648dd win-x86/node.exe 68ffdf52b7459390792cdfee5632d7d121d2234c9261d5ab113527427a5f5312 win-x86/node.lib 2850b3f869d364af6efe643e37e2890278d812ba62f055a985885d5b7d0f6777 win-x86/node_pdb.7z 8a6ad8b72965b03d3ac058803a9dd739e8addb55aa6b6352257e9a493454e393 win-x86/node_pdb.zip -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEDv/hvO/ZyE49CYFSkzsB9AtcqUYFAlryYDoACgkQkzsB9Atc qUZdqQgAmS4R6DYmyO9eg0RsaiDrO1zztIbkgQIESSz218WL1CXkBRHtXusPszl 0KQJkb15JEdfGDQUpFqUEv7/SUcBCFgf0z6mDpcpS4oygKKYZz5xEBO/8lnmSGz 7VQb5Pd9NI5dVvhAV3ywOBx9phW98V7TGrKH0Gpjx8p0t95HT0FzZA5IJSROz adIk/p1q62RM3NKCryTy/HRy7kD3NkKaPJSOG8y1b31AGEvu/x08VTi54RJSVcBq 3HUxP5nvmp1svtNQF89cYKZZsP1an1y8jo1nJeKiq7jOVXpBC952X9K/Nxxh1OO 0ZdS7LPeqxjsvN/gbkm0QUuGbkWxhQ mUuU -----END PGP SIGNATURE-----这份发布公告是如何在 nodejs.org 网站上生产与呈现的v10.1.0 的发布公告正是 nodejs.org 仓库中数百篇 release 类别博客中的一篇其文件位于 apps/site/pages/en/blog/release/v10.1.0.md。它的结构——frontmatter 元数据 Notable Changes Commits 清单 下载链接 SHASUMS——并非手工逐字编写而是由仓库内的发布脚本自动化生成的。生成脚本一次命令产出整篇公告apps/site/scripts/release-post/index.mjs 是专门的发布公告生成器用法为node index.mjs [version]传入版本号如10.1.0时为指定版本生成公告省略版本号时自动从 Node.js 官方发行索引 JSON 中选取最新版本。脚本依次完成以下数据装配见 fetchDocschangelog从 Node.js 仓库的CHANGELOG_V10.md中按v10.1.0锚点正则截取该版本的完整变更段并把无序列表符号统一为-author从 changelog 版本标题如## 2018-05-09, Version 10.1.0 (Current), MylesBorins中解析发布者再查询其资料得到展示名versionPolicy用正则## \d{4}-\d{2}-\d{2}, Version ... \(([^)])\)提取版本策略本版本为Currentshasums拉取该版本的 PGP 签名校验文件全文downloads对候选下载产物逐一做 HEAD 请求探测无法访问的标记为*Coming soon*。随后用 Handlebars 渲染 template.hbs 模板再用 Prettier 格式化 Markdown最终写入apps/site/pages/en/blog/release/vX.Y.Z.md。若目标文件已存在会报错拒绝覆盖可通过-f/--force强制覆盖。这解释了为什么仓库内每篇发布公告的格式高度一致——它们都由同一模板驱动。frontmatter 与博客渲染链路公告开头的 frontmatter 是网站的元数据契约--- date: 2018-05-09T02:44:05.024Z category: release title: Node.js 10.1.0 (Current) layout: blog-post author: Myles Borins ---category: release将该文章归入博客的 release 分类util/blog.ts 中的getBlogPosts()按分类过滤文章paginateBlogPosts()负责按BLOG_POSTS_PER_PAGE分页前端渲染时BlogPostCard 展示标题、描述、作者与日期日期经由 FormattedTime 按国际化格式输出下载类页面则复用发布数据与 util/download 下的下载工具链与下载表格、安装方式选择器等组件联动。也就是说当你浏览 nodejs.org 上任意一篇 Node.js x.y.z (Current) 或 LTS 发布公告时看到的正文、下载列表与校验和背后是changelog 发布者 版本策略 SHASUMS 下载探测五路数据的自动化装配结果而本文解读的 v10.1.0 就是这套流程的产物之一。小结Node.js 10.1.0 作为 10.x 系列的首个次版本用 5 项 Notable Changes 和一百六十余个提交完成了三件事把fs.promises落定为标准入口并补全测试、为 HTTP 请求生命周期补上aborted判定、为 N-API 引入符号式模块初始化并公开 V8 Platform 访问能力同时以大规模文档修订与内部重构为 10 月进入 LTS 做铺垫。对开发者而言最值得立即采用的是require(fs).promises新入口与request.aborted属性而对发布流程感兴趣的读者可以从 release-post/index.mjs、template.hbs 与 downloadsTable.mjs 三份源码入手理解 nodejs.org 如何把一次 Node.js 版本发布自动转化为一篇结构完整的官网公告。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表