Node.js 11.7.0 (Current) 发布解析Brotli 压缩落地、worker_threads 去掉实验性标志与 npm 6.5.0 升级【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本文以 Node.js 官方发布于 2019-01-18 的 v11.7.0Current 版本线发布公告为主体逐项拆解该版本 8 大重要变更Notable Changes及其背后的实现原理并结合本仓库nodejs.org 网站中生成与渲染发布日志的源码说明这份文档在官网内容流水线中的位置。读完本文你将完整掌握 v11.7.0 的新 API 用法、行为变更影响面、下载与校验方式以及 Node.js 官方发布博客的自动化生成机制。版本概览一份发布公告的元信息v11.7.0 属于 Node.js 11.x「Current」版本线发布日期为 2019 年 1 月 18 日由核心维护者 Ruben Bridgewater 发布。该发布公告在仓库中的位置为 apps/site/pages/en/blog/release/v11.7.0.md其 frontmatter 声明了类别category: release、标题、博客布局layout: blog-post与作者等信息与 frontmatter 类型定义 中的字段一一对应。值得说明的是这份文档并非纯手工撰写而是由仓库内置的发布脚本半自动生成node index.mjs [version]会从 Node.js 官方 changelog、SHASUMS256.txt.asc 与 dist 目录拉取数据再套用 template.hbs 渲染出完整发布帖落盘到pages/en/blog/release/vX.md见 scripts/release-post/index.mjs。因此本文讨论的「Notable Changes Commits 下载链接 SHASUMS」四段式结构正是官方发布帖的标准骨架。Notable Changes 深度解析v11.7.0 的 8 项重要变更1. zlib / compression正式加入 Brotli 压缩支持v11.7.0 在zlib模块中引入了 Brotli 压缩算法支持PR #24938由 Anna Henningsen 与 Zach Vacura 实现同时补全了相应的 benchmark、测试与文档。这是本版本最受关注的能力之一意味着 Node.js 在 gzip/deflate 之外又多了一种高压缩比的 HTTP 内容编码选项。典型用法如下const zlib require(zlib); // 一次性同步接口 const input Buffer.from(hello nodejs brotli); const compressed zlib.brotliCompressSync(input); const decompressed zlib.brotliDecompressSync(compressed); // 流式接口可配合 HTTP 响应使用 const { createBrotliCompress } require(zlib); const gzip createBrotliCompress({ params: { [zlib.constants.BROTLI_PARAM_QUALITY]: 5, // 0-11越高压缩率越大、耗时越长 }, }); fs.createReadStream(input.txt) .pipe(gzip) .pipe(fs.createWriteStream(output.txt.br));从源码提交看该 PR 同时包含deps层引入 Brotli 依赖、benchmark,test增加基准与测试、doc更新文档等多个部分提交9a627a4694、11c01a6a69、201cf97fcb、7edf8c7e74均与之一致属于一次横跨 C 层、JS 层与文档的完整功能落地。2. console新增inspectOptions选项此前console.log()等方法的输出格式化参数是写死的v11.7.0 允许通过第二个参数传入inspectOptionsPR #24978Ruben Bridgewater将util.inspect()的配置能力透传给控制台输出const obj { level: 1, nested: { level: 2, deep: { level: 3 } } }; // 限制展开深度避免超大对象刷屏 console.log(obj, { inspectOptions: { depth: 1 } }); // 输出带颜色便于阅读 console.log(obj, { inspectOptions: { colors: true, sorted: true } });同版本还对此选项做了校验与补强提交272ddb1765改进inspectOptions验证并与console模块的内部重构拆分 global/constructor、懒加载 stderr/stdout 等见提交4052aec321、7f5bb9d3bf、b2b0645805一起为后续console模块的现代化奠定了基础。3. crypto始终允许将私钥当作公钥使用在密码学 API 中RSA/ECC 等非对称密钥的KeyObject私钥对象本身包含推导公钥所需的信息。v11.7.0 起crypto模块在需要公钥的场景如verify()、公钥加密等下也接受私钥KeyObjectPR #25217Tobias Nießenconst crypto require(crypto); const { generateKeyPairSync, verify } require(crypto); const { publicKey, privateKey } generateKeyPairSync(rsa, { modulusLength: 2048, }); // 校验签名时既可以直接传 publicKey也可以传 privateKey内含公钥部分 const ok verify(sha256, Buffer.from(data), privateKey, signature);该版本同时修复了同步密钥生成中的 key 对象包装问题提交32e45b20da与零字节分配断言失败问题提交f3ebc391a3并完善了密钥加密选项文档提交b9b2ba22ec使crypto模块的密钥处理更健壮。4. depsnpm 升级至 6.5.0本版本将内置的 npm 从 6.4.x 升级到 6.5.0PR #25234Jordan Harband。npm 6.x 系列主打安全审计npm audit与依赖锁定体验6.5.0 继续沿这条主线演进。升级随发布帖一同归档安装 v11.7.0 后执行npm -v即可验证。提交记录为91015918d8deps: upgrade npm to v6.5.0。5. fs内部改用internalBinding(fs)取代process.binding(fs)这是一次SEMVER-MAJOR级别的内部重构PR #22478Masashi Hirano。Node.js 内部长期以来通过process.binding(fs)暴露 C 原生绑定v11.7.0 起fs模块内部迁移到更受控的internalBinding(fs)并把process.binding(fs)正式标记为内部实现。对普通开发者而言这是透明的——fs的公开 API 没有任何变化但从架构上看它服务于 Node.js「收紧process.binding面」的长线工程本版本中inspector、os等模块也在做同样的迁移提交4794cf601e、d197105476不过其中部分迁移因稳定性问题被暂时回滚提交_Revert_ inspector: move process.binding to internalBinding与_Revert_ os: move process.binding(os) to internalBinding可见官方对内部 API 收敛采取的是谨慎渐进策略。6. http(s)支持覆盖http.globalAgent/https.globalAgent此前开发者虽然可以给http.globalAgent赋值自定义的 Agent但部分内部路径并未真正采用新值。v11.7.0 修复了这一点PR #25170Roy SommerSEMVER-MINOR让全局 Agent 覆盖真正生效const http require(http); const https require(https); // 全局启用 keep-alive 与连接池调优 http.globalAgent new http.Agent({ keepAlive: true, maxSockets: 100 }); https.globalAgent new https.Agent({ keepAlive: true, maxSockets: 100 });此后通过http.request()/https.request()发起的请求都会使用这份全局配置适合在应用入口统一管理连接池。7. utilinspect()现在会输出 ArrayBuffer 的详细内容util.inspect()是 Node.js 调试输出的核心工具。v11.7.0 起当被检查对象是ArrayBuffer时不再只显示ArrayBuffer(8)这样的外壳而是直接展示其底层字节内容PR #25006Ruben BridgewaterSEMVER-MINORconst { inspect } require(util); const buf new ArrayBuffer(8); new Uint8Array(buf).set([1, 2, 3, 4]); console.log(inspect(buf)); // 输出类似ArrayBuffer(8) [ 1, 2, 3, 4, 0, 0, 0, 0 ]同版本还让inspect识别 RegExp 子类与 null 原型对象提交73f3a1c4e6并新增了大量子类化检查测试提交e182ca9bdcutil.inspect的调试体验在这一轮得到明显增强。8. workerworker_threads默认可用移除--experimental-worker标志这是 v11.7.0 最具标志性的变化Worker 线程worker_threads正式「转正」不再需要--experimental-worker启动标志PR #25361Anna Henningsen。此前该标志经历了「部分移除」提交65c136f3de→「始终置为开启」提交7bb7b9a61f→「彻底移除」提交243f90283c的渐进过程最终在 11.7.0 直接可用const { Worker } require(worker_threads); // 无需任何命令行标志 const worker new Worker( const { parentPort } require(worker_threads); parentPort.postMessage(hello from worker); ); worker.on(message, msg console.log(msg));该版本同时为 Worker 增加了多项配套能力支持传输 WASM 模块提交dd8795f4a0、改进 JS 侧调试提交e8a6cc8802、在 V8 序列化 API 中启用内联 WASM提交7f78137c37并重构了 Worker 的 IO 与 bootstrap 代码提交9480e1b795、655c1c9232。可以说Node.js 的多线程能力正是从这个版本开始真正面向所有用户开放。Commits 逐模块解读242 次提交背后还发生了什么除上述 8 项重点变更外v11.7.0 还包含大量常规提交。按子系统归类值得关注的还有buffer将 Buffer 原型装配迁移到internal/buffer.js提交8e84ccb502、042d20ab47inspect可查看 Buffer 的额外属性提交68014fbc22修复非法索引类型的崩溃提交7dc4c3be03。child_process / net / dns / os简化参数处理272ddb1765net改用公开的decodeStringsAPIc13e5be740修复resolveAny()对 AAAA 记录的 TTL 值5b4fab1a40提升networkInterfaces()性能840ec230f1。tls / http2澄清TLSSocket与Socket、session 与 session ID 的语义提交453bd18969、f6b2ea8bb9等为TLSSocket.isSessionReused()补文档2172dbfce4新增 http2 GOAWAY 测试用例26f2eb8b12。process / srcJoyee Cheung 在本版本做了大规模启动流程重构——拆分LoadEnvironment()与startExecution()6cdaf038ce、将 per-process 全局变量收敛到node::per_processc6adf4b44f、把 process 相关 C 方法迁移到独立文件299aefd81a、5eada9dce4等并引入 DCHECK 宏99a5af65df。v8 / deps从上游 V8 挑选了多个补丁提交e1d4f4384a、f2abe7bf76、201cf97fcb在序列化 API 中启用内联 WASM7f78137c37。tools / testESLint 升级到 5.12.0ee4c46c72f、开启no-buffer-constructor与no-useless-catch规则ee43540aa7、e6b5232381大量测试用例重构与 WPTWeb Platform Tests接入da34c6c575等为编码测试引入标准化的 WPT runner。完整的 242 条提交列表以原发布文档 v11.7.0.md 的 Commits 章节为准。下载与安装全平台产物清单与所有官方发布帖一致v11.7.0 提供 Windows、macOS、Linux、AIX、SmartOS 及多种 ARM 架构的安装包与二进制产物统一托管在https://nodejs.org/dist/v11.7.0/平台产物Windows 32-bit Installerhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-x86.msiWindows 64-bit Installerhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-x64.msiWindows 32-bit Binaryhttps://nodejs.org/dist/v11.7.0/win-x86/node.exeWindows 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/win-x64/node.exemacOS 64-bit Installerhttps://nodejs.org/dist/v11.7.0/node-v11.7.0.pkgmacOS 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-darwin-x64.tar.gzLinux 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-x64.tar.xzLinux PPC LE 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-ppc64le.tar.xzLinux s390x 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-s390x.tar.xzAIX 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-aix-ppc64.tar.gzSmartOS 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-sunos-x64.tar.xzARMv6 32-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-armv6l.tar.xzARMv7 32-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-armv7l.tar.xzARMv8 64-bit Binaryhttps://nodejs.org/dist/v11.7.0/node-v11.7.0-linux-arm64.tar.xzSource Codehttps://nodejs.org/dist/v11.7.0/node-v11.7.0.tar.gz从仓库源码可以印证这份下载清单的生成逻辑发布脚本通过 downloadsTable.mjs 按版本号动态裁剪产物——例如对 16.0.0的版本剔除 macOS Apple Silicon 产物、对 19.9.0的版本剔除 Windows ARM 产物再以 HEAD 请求逐个验证链接有效性不可达则标记*Coming soon*最终渲染进template.hbs的{{#files}}区块。SHASUMS 校验用 PGP 签名验证下载完整性每个发布帖都附带 PGP 签名的 SHA-256 校验文件SHASUMS256.txt.asc用于验证下载文件未被篡改。v11.7.0 的校验块完整内容如下-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 081b4c5359dbf320fd167f2b8c075a91980a49a5d95f3d4ecdd075dfb6d92132 node-v11.7.0-aix-ppc64.tar.gz 873b47e6fc97aef2f73b0e8dde641967b2a84a3b63d1697b9d8813e14fb3b01c node-v11.7.0-darwin-x64.tar.gz 0af0843eebeb574d11b94435a4162a8fc1797eea890153214770c6f0153d32ef node-v11.7.0-darwin-x64.tar.xz cd9d705ba27ba009b79652f1cbdef13ee99a916b72100ab749ea831c060b39a7 node-v11.7.0-headers.tar.gz b1372341748de7d9e8e5c764d3d4ec88bd097121ff2ae2b50f46fc43253ac5aa node-v11.7.0-headers.tar.xz cbbc6f68d74433e1b8975606d2f83f3c3fff264466db1c14082d2e16a1951abf node-v11.7.0-linux-arm64.tar.gz 82b9726c6b367a43530f868f61b1b2a05c942d3decdf9d2e18b4a9bdf353c223 node-v11.7.0-linux-arm64.tar.xz 87c956b17d4f529f703c0f1b519888f7986d8d5e81c1992e06c9f96dae27dc0b node-v11.7.0-linux-armv6l.tar.gz 20ded7f501e7375e87d345cc4248e7d40eecc963b721b929a8d8676a1ebc8226 node-v11.7.0-linux-armv6l.tar.xz 6dadf13ef470ff90bef5bc595043da2077e33ce6bbf3ef24793b96d95109a6ae node-v11.7.0-linux-armv7l.tar.gz 524e2538db9685d8a2973eeb09537d8b991bdc487346741ee82f9a21bd2690ec node-v11.7.0-linux-armv7l.tar.xz 48de0f6b42226374cfc76d912f9d569d0b9f81a5646909f847892b2be78759ed node-v11.7.0-linux-ppc64le.tar.gz aee397fedf82ead2fb8a41e42567395cde874ec63baa6c7fe50f42fb2e8883f4 node-v11.7.0-linux-ppc64le.tar.xz e42b01bce12ad893987e7d6775517f72f704dab3b7c49087d6e866e9eba886d8 node-v11.7.0-linux-s390x.tar.gz f13565ab58e8cc308fcbc941af67a17e842dbe6f6bc6d6d1799bbca904edf997 node-v11.7.0-linux-s390x.tar.xz d2ab60b497b59c415dc1d1c0ab3f64da3083a746fb15ec82d917ca7f4743028d node-v11.7.0-linux-x64.tar.gz b2a0a7dde17fe0da5f86ce5fea3da2861d652a5e702e2177ee62813ff86451c0 node-v11.7.0-linux-x64.tar.xz d4e12059afeca85a6ff8035d3ffd073b010f650a8524836864c136d226246c81 node-v11.7.0-sunos-x64.tar.gz 7067103800d94c383a97ea7ca696005849d041d59344182bcffa2635fb6ef2ef node-v11.7.0-sunos-x64.tar.xz 6008a40f944ac9daba492f2404aef82cfc4a878f36ee106d935c1a34f7bd86ea node-v11.7.0-win-x64.7z 00834d16532f24583bf56d2baab03904b0220154cc712344be95e4d05c6234dd node-v11.7.0-win-x64.zip 155ae76195bd04a4e38d1d3a95acaa700d4cc9bc295eae5e176c2a6de4a8b69e node-v11.7.0-win-x86.7z 4d861d4311e515a352fca7f5a4ec8fc5d5069d75c03950bfec45952cb1c8f26d node-v11.7.0-win-x86.zip 56644938be5d053123a4766755b7b06b5428117133b9e57bd945c6053b9c58f6 node-v11.7.0-x64.msi 901cf55bfecdd5048c3184c45087bbefc136be11a5cb224b280d65c95c0ccdbf node-v11.7.0-x86.msi a58f9331c8a944c0d3f70142ef2ea40853c058b5ef890187bd3bfa0ddb82b53b node-v11.7.0.pkg 4d95471083735c275ed3fb4d61458940887edbaae663d0c96ea5395c087ab9dc node-v11.7.0.tar.gz 07febdd8722f6e24ad0cb9360e183baa75a07cad390c14896e3d97027e0fada2 node-v11.7.0.tar.xz d1060afc554bf9c858abab68a1ea5a7845e05c6123477659cc1bebb582ae5830 win-x64/node.exe b1af21cbb79322a09d34af26bf964a5f560883fa57cabc1c987d5f861f6cf131 win-x64/node.lib 497a0983680a333e66c4a4583563f2a6807485a6e45875e1b1ab2d321f3dee8b win-x64/node_pdb.7z f7a7a52091c1ce9a7925e20cdc3c15696d3b00465b978e6824f3336834dbd721 win-x64/node_pdb.zip e908e51873a98520e7e8d54f4afdb1ad0ff4466373ddb511f9d562b7cdbd5a9c win-x86/node.exe 2eb31627eea9007d677fc04fdd69caf72daff96f41fa332a3e850f2ee9c088fd win-x86/node.lib fcc896a301b77d0862913effcaf0bd40c8f172c611a339a61d329d11da057bcc win-x86/node_pdb.7z 1cce183862133641f8ee56569343e8ec8575ea08f1557f45c6f8edd9bf79893b win-x86/node_pdb.zip -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEpIwr7mgOhBYyzU5E8HSWss8F2IFAlxB06cACgkQ8HSWss8 F2LqNQ/PLHeygvuo7zCPmwhunyCE2i/GiDYFOffiG22ZfDhPXc9qxfUlUrLlv7 93Ro22hBPgveSaZuVzXvJiTqXPjEs3IN4apE1GqmWoz1n0DzsE5egXr/C/0TY ntOmbKArnLacGrT5TqRhG31CQCmlLLh2A3FQUWlPDIpTGFXqOfjMxW8ddmYoVM 2o2WAvfVZdHezv/kq14sKIDAsfFE1uw1pMx5Jl0icOPxDv082kd0mRjgL3vdcWa kO11Zg1SFHXjHU3XuEyuTXSDVV8xERDdA1u3ATKQEHCD8hxHpVpNTKk5ih6Jvyf s6WhVG0ygapofYy6GzZNNdFVRtQwm0UqZQCWFjssF1HRZVv4vIBORDQWdkXvgQc 4PaQBemSV2V8ytRELxGcmDbNtoumaUzWmKbHAgZ11VD5TCGBBSTpzuMlNjn6MXyB QCMSKvMX/YhBByaVZD8Nh2ilJx9/IzIXaLnWdS1Qvrb2rMfI6q1EgpRY7Jk aVyzfOt2qV5qFYXR3B8BZe4dxf2BmmUW/CJxT3O1I9EhAenbuU9S6uQbEERDnCZ 6tm/cduAKIlKEMqoTNzewvVcq2IN4BN8ocZhXf2Um4pXmOHaBoN3MXGz9l2Bhp4 RHk8LuyRfYaicIwu6bWsneb6F33xSJz5WdewCHveujQaVuj2GE NJaJ -----END PGP SIGNATURE-----使用方式下载产物后在本机计算 SHA-256 并比对上述值再用 Node.js 官方发布密钥验证 PGP 签名确保文件与官方构建一致。发布脚本通过fetchShasums见 index.mjs自动抓取该文件抓取失败时以[INSERT SHASUMS HERE]占位符提示人工补齐。从源码看发布日志的生成与渲染链路这份 v11.7.0 发布帖不仅是历史存档更是 nodejs.org 官网内容流水线的标准样例生成运行node index.mjs 11.7.0release-post/index.mjs脚本依次拉取对应版本 changelog 段落fetchChangelog、解析版本策略fetchVersionPolicy如Current、获取作者信息fetchAuthor、抓取 SHASUMSfetchShasums并逐条 HEAD 校验下载链接verifyDownloads已存在的发布帖会被拒绝覆盖除非加--force。渲染handlebars 模板 template.hbs 将上述数据拼装为 frontmatter changelog 下载清单 SHASUMS 的标准四段结构再用 Prettier 格式化后写入apps/site/pages/en/blog/release/v11.7.0.md。分类与展示站点的博客数据层将category: release归入 release 分类util/blog.ts 中mapBlogCategoryToPreviewType对release的映射列表页由 BlogPostCard 渲染卡片标题、分类、作者、日期发布信息还同步驱动下载页的版本表与 ReleaseModal含 LTS/Current/EOL 状态提示其数据来自 releaseData.mjs 对dist/index.json的解析。小结Node.js 11.7.0 是一个「承前启后」的 Current 版本Brotli 压缩补齐了 zlib 的能力矩阵inspectOptions让控制台调试更灵活私钥即公钥的语义简化了加密 API 的使用而worker_threads摘掉实验性标签则标志着 Node.js 多线程能力的正式开放。与此同时process.binding向internalBinding的迁移与启动流程重构透露出官方在内部架构收敛上的持续投入。如果你正在阅读历史发布记录或研究 Node.js 版本演进本文对应的原始发布文档 apps/site/pages/en/blog/release/v11.7.0.md 中保留了完整的提交哈希与官方下载地址可作为进一步追溯的一手资料。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考