Node 16是LTSLTS意味着长期支持。这个首字母缩写通常用于标记Node.js的发布线,这些发布线将被维护和支持很长一段时间。有两种独立的LTS版本。Active和Maintenance。主动发布线经常得到新的功能和其他改进,同时还有安全补丁和错误修复,而维护版只得到后者。它......版本自2021-10-26起,而Node 18从2022年起成为当前版本。4月19日。下一个LTS版本,v18计划在2022-10-25接替。
在下面这篇文章中,你会发现关于Node.js的更新日志和下载/更新信息Node.js是一个异步事件驱动的JavaScript运行时间,在构建可扩展的网络应用时是最有效的。Node.js是无锁的,所以没有机会死锁任何进程。
Node.js LTS & Current Download for macOS:
Node.js LTS & Current Download for Windows:
- 16.16.0 LTS Windows 32-bit
- 16.16.0 LTS Windows 64位
- 18.7.0 当前的Windows 32位
- 18.7.0 Current Windows 64-bit
有关其他下载,如Linux库、源代码、Docker镜像等,请访问nodejs.org/en/download…。
Node.js发布时间表
Node.js v18是当前版本!
Node.js 18将是未来6个月的 "当前 "版本,然后在2022年10月晋升为长期支持(LTS)。Node.js 18将被支持到2025年4月。
新的全球可用的浏览器兼容的API
fetch(实验性)。 在Node.js 18中,一个实验性的全局获取API是默认可用的。该实现来自undici,其灵感来自最初基于undici-fetch的node-fetch。这个实现力图尽可能地接近规范,但有些方面需要浏览器环境,因此被省略了。通过这个补充,以下的球状物是可用的:fetch,FormData,Headers,Request,Response 。可以通过提供--no-experimental-fetch 命令行标志来禁用该API。
Web Streams API(实验性)。Node.js现在在全局范围内公开了Web Streams API的实验性实现。 以下API现在是全局可用的。ReadableStream TextDecoderStream,ReadableStreamDefaultReader,ReadableStreamBYOBReader,ReadableStreamBYOBRequest,ReadableByteStreamController,ReadableStreamDefaultController,TransformStream,TransformStreamDefaultController,WritableStream,WritableStreamDefaultWriter,WritableStreamDefaultController,ByteLengthQueuingStrategy,CountQueuingStrategy,TextEncoderStream,CompressionStream,DecompressionStream 。
其他可用的实验性API
Blob- nodejs.org/api/buffer.…BroadcastChannel- nodejs.org/api/worker\…
测试运行器模块(实验性)
node:test 模块有助于创建以TAP格式报告结果的JavaScript测试。要访问它。import test from 'node:test';
构建时用户地快照(实验性的)
从Node.js 18.0.0开始,用户可以使用configure脚本的--node-snapshot-main 标志构建一个带有自定义V8启动快照的Node.js二进制。由此产生的二进制文件可以反序列化在构建时由快照入口点初始化的堆的状态,因此生成的二进制文件中的应用程序可以更快地初始化。
V8 10.1
V8引擎被更新到10.1版本,是Chromium 101的一部分。与Node.js 17.9.0中包含的版本相比,包括以下新特性。
findLast()和findLastIndex()数组方法。- 对
Intl.LocaleAPI的改进。 Intl.supportedValuesOf函数。- 改进了类字段和私有类方法的性能(现在它们的初始化和普通属性存储一样快)。
Node.js CURRENT v18 Changelogs
Node 18.7.0版(当前)的变更日志
- doc:
- 为合作者添加F3n67u
- 在process.exit中取消了对整数的强制操作
- (SEMVER-MINOR)废弃了 diagnostics_channel 对象的订阅方法
- 事件
- (SEMVER-MINOR)在全局中使用 CLI 标志公开 CustomEvent。
- (SEMVER-MINOR)添加
CustomEvent
- http:(SEMVER-MINOR)为http服务器添加drop request事件
- lib: (SEMVER-MINOR)改进了diagnostics_channel的订阅/取消订阅。
- 利用:(SEMVER-MINOR)在parseArgs中增加了令牌。
Node版本18.6.0(当前)的更新日志
实验性ESM加载器钩子API。Node.js ESM加载器钩子现在支持多个自定义加载器,并且通过 "链式 "实现组成:foo-loader 调用bar-loader 调用qux-loader (一个自定义加载器现在必须在故意不调用下一个加载器时发出短路信号)。详情见ESM文档。
在《自定义ESM加载器》一文中,为终端用户提供了现实世界中的使用案例。谁、什么、何时、何地、为何、如何。
节点版本18.5.0(当前)的更新日志
这是一个安全版本。在这个版本中修复了以下CVE。
- CVE-2022-2097: OpenSSL - AES OCB未能对某些字节进行加密(中)
- CVE-2022-32212: 在-inspect中通过无效的IP地址重新绑定DNS (高)
- CVE-2022-32213: HTTP请求偷渡-解析传输编码的缺陷(中)
- CVE-2022-32214: HTTP请求偷渡--头字段不正确的定界(中)
- CVE-2022-32215: HTTP请求走私 - 多行传输编码的不正确解析(中)
- CVE-2022-32222:试图在启动时从/home/iojs/build/读取openssl.cnf (中)
- CVE-2022-32223:Windows上的DLL劫持(高)
Node版本18.4.0的更新日志(当前)
- crypto:移除Node.js特有的webcrypto扩展,为Web Crypto API添加CFRG曲线
- dns:接受
'IPv4'和'IPv6'为family - 报告:在进程报告中添加更多的堆信息
Node版本18.3.0(当前)的更新日志
- 部署:更新undici到5.4.0
- (SEMVER-MINOR) util:增加parseArgs模块
- (SEMVER-MINOR) http: add uniqueHeaders option to request and createServer
- deps: upgradenpmnpm是一个软件注册中心,为超过130万个软件包提供服务。npm有三个组成部分:网站、命令行界面(CLI)、注册表 使用网站来发现和下载软件包,创建用户配置文件,并... 到8.11.0
- Deps: patch V8 to 10.2.154.4
- (SEMVER-MINOR) 仓库:更新V8至10.2.154.2
- (SEMVER-MINOR) fs: 让编写方法中的参数成为可选项
- (SEMVER-MINOR) http: add uniqueHeaders option to request and createServer
- (SEMVER-MINOR) net:增加重置tcp套接字的功能。
- **(SEMVER-MINOR)**回复"构建:使x86 Windows支持暂时成为实验性的。这意味着32位的Windows二进制文件将在这个版本中恢复。
节点版本18.2.0的更新日志(当前)。
OpenSSL 3.0.3:由于OpenSSL 3.0.3中解决的问题对Node.js 18略有影响,因此该更新可被视为安全版本。
- deps: 更新quictls/openssl-3.0.3+quic的archs文件
- Deps: 升级 openssl 源文件至 quictls/openssl-3.0.3
- 恢复"deps: 添加生成头文件的模板"
- 部署:将 undici 升级到 5.2.0
- 部署:将npm升级到8.9.0
- 部署:将openssl源代码升级到quictls/openssl-3.0.3
- 文档:将LiviaMedeiros加入合作者行列
- 文档:添加 Juan Arboleda 的发布密钥
- (SEMVER-MINOR) fs: 添加
read(buffer[, options])版本 - (SEMVER-MINOR) http: 添加连接关闭方法
- (SEMVER-MINOR) perf_hooks: 添加PerformanceResourceTiming
Node版本18.1.0(当前)的更新日志
- lib,src: 实现WebAssembly Web API
- test_runner:添加初始CLI运行器
- worker:为MessagePort添加hasRef()。
Node.js v16的更新日志
Node 16.16.0版本的更新日志
这是一个安全版本。
- deps:将 openssl 源码升级到 OpenSSL_1_1_1q
- src:添加OpenSSL配置appname
Node 16.15.0版本的更新日志
增加fetch API。 增加了对fetch API的实验性支持。这增加了--experimental-fetch 标志,该标志安装了fetch,Request,Response,Headers, 和FormData 球状物。
其他值得注意的变化
- 构建:移除破碎的x32 arch支持
- crypto:添加KeyObject.prototype.equals方法
- esm:支持远程https和本地http的标志。
- 模块:取消esm json模块的flag
- node-api:添加node_api_symbol_for()
- 进程:废除多重解决(multipleResolves)。
- 流:支持一些和每一个,添加toArray,添加forEach方法
Node 16.14.0版本的更新日志
导入JSON模块现在需要实验性的导入断言语法。这个版本增加了对导入断言第三阶段建议的实验性支持。
为了使Node.js的ESM实现尽可能地与HTML规范兼容,现在导入JSON模块需要导入断言(仍在--experimental-json-modules CLI标志后面)。
import info from './package.json' assert { type: 'json' };
或者使用动态导入。
const info = await import('./package.json', { assert: { type: 'json' } });
其他值得注意的变化。
- async_hooks:
- 暴露async_wrap提供者
- child_process:
- 将对URL的支持添加到
cp.fork
- 将对URL的支持添加到
- esm:
- 将capturerejections改为支持
- 将EventEmitterAsyncResource添加到核心中
- events:
- 传播kNewListener的弱选项
- fs:
- 接受URL作为
fs.rm和fs.rmSync的参数
- 接受URL作为
- lib:
- 使AbortSignal可克隆/可转移
- 添加AbortSignal.timeout
- 为AbortSignal添加原因
- 为非活动的DC通道添加取消订阅的方法
- 增加DC channel.unsubscribe的返回值
- loader:
- 如果知道的话,从defaultResolve返回软件包格式
- perf_hooks:
- 对直方图进行多次修复
- process:
- 添加
getActiveResourcesInfo()
- 添加
- src:
- 在加密模块中添加x509.fingerprint512
- 增加控制进程行为的标志
- stream:
- 为readable添加过滤方法
- 添加 isReadable 帮助器
- 为 Readable 增加 map 方法
- 废除对 thenable 的支持
- util:
- 将 inspect 函数传递给自定义的 inspect 函数
- 在 util.inspect 中添加 numericSeparator。
- 在检查定时器时,总是将错误的原因属性可视化。
- 定时器。
- 添加实验性调度器api
- v8:
- 多租户承诺挂钩api
Node 16.13.2版本的更新日志
这是一个安全版本。
见17.3.1(当前)的变化。
Node 16.13.1版的更新日志
- 部署:升级 npm 至 8.1.2。
- 仓库:将 c-ares 升级到 1.18.1。该版本包含一个 c-ares 更新,以修复 Node.js v16.6.2 中引入的对包含下划线的 CNAME 记录进行解析的回归。
- doc:为合作者添加 VoltrexMaster。
- lib:修正正则表达式以检测`/`和``。
Node 16.13.0版的更新日志
这个版本标志着Node.js 16.x过渡到长期支持(LTS),代号为 "Gallium"。16.x版本现在进入了 "Active LTS",并将保持到2022年10月。在那之后,它将进入 "维护 "阶段,直到2024年4月结束。
节点版本16.12.0的更新日志
实验性ESM加载器钩子API。
Node.js的ESM加载器钩子已经被整合,以代表所需的步骤,方便未来的加载器链。
resolve:resolve[+getFormat]load:getFormat+getSource+transformSource
为了保持一致性,getGlobalPreloadCode 已经被重新命名为globalPreload 。
输出过期钩子的加载器将触发一个单一的废弃警告(每个加载器),列出错误的钩子。
Node 16.11.1版的更新日志
这是一个安全版本。值得注意的变化。
- CVE-2021-22959。由于头文件中的间隔导致的HTTP请求偷渡(中)。http解析器接受请求时,在冒号之前的头名称后面紧跟着一个空格(SP)。这可能导致HTTP请求偷渡(HRS)。
- CVE-2021-22960: 解析正文时的HTTP请求偷渡(中)。在解析分块请求的正文时,解析会忽略分块扩展。这导致了在某些条件下的HTTP请求偷渡(HRS)。
节点版本16.11.0的更新日志
- crypto:更新根证书
- 部署:升级npm到8.0.0,更新nghttp2到v1.45.1,更新V8到9.4.146.19
- 工具:更新certdata.txt
Node 16.10.0版的更新日志
- crypto:添加rsa-pss密钥源参数
- 部署:升级npm到7.24.0
- 部署:将Acorn升级到8.5.0版本
- 文档:在合作者中添加Ayase-252
- fs:使打开和关闭流覆盖在未使用时成为可选的。
- http:限制每个连接的请求
- 可以用server.maxRequestsPerSocket来设置一个套接字在关闭保持连接之前可以处理的最大请求数。
- src:添加 -no-global-search-paths cli 选项
- 增加了 -no-global-search-paths 命令行选项,不从 NODE_PATH 等全局路径搜索模块。
- src:使 napi_create_reference 接受符号。
- stream:为流水线生成器添加信号支持
Node 16.9.1版的更新日志
该版本修复了Node.js 16.9.0中V8 9.3更新所带来的回归问题。
Node 16.9.0版的更新日志
核心包
Node.js现在包括Corepack,一个作为Node.js项目和它们在开发过程中要使用的包管理器之间桥梁的脚本。在实际应用中,Corepack可以让你使用Yarn和pnpm,而不需要安装它们--就像目前npm的情况一样,npm默认是在Node.js中提供的。
V8更新至9.3版本,包括性能改进和新的JavaScript特性。
Object.hasOwn 是Object.prototype.hasOwnProperty.call 的一个静态别名。
Object.hasOwn({ value: 42 }, 'value'); // Returns `true`.
错误现在可以选择用cause 选项来构建,指向另一个错误。这在新的错误上增加了一个cause 属性。
const error1 = new Error('Error one');
const error2 = new Error('Error two', { cause: error1 });
// error2.cause === error1
其他值得注意的变化
- crypto:在asymmetricKeyDetails中添加RSA-PSS参数。
- 模块:支持模式跟踪器
- stream:添加 stream.compose
Node 16.8.0版本的更新日志
- doc:废除了
dns.lookup选项的类型强制。 - stream:添加
stream.Duplex.from工具 - stream:添加
isDisturbed帮助器 - util: 暴露
toUSVString
Node 16.7.0版的修改日志
- fs, experimental: 增加递归cp方法
Node 16.6.2版的更新日志
这是一个安全版本。值得注意的变化。
-
CVE-2021-3672/CVE-2021-22931:对域名中的非典型字符处理不当:由于Node.js的DNS库中缺少对域名服务器返回的主机名的输入验证,Node.js容易受到远程代码执行、XSS、应用程序崩溃的影响,这可能导致输出错误的主机名(导致域名劫持)和使用该库的应用程序中存在注入漏洞。
-
CVE-2021-22930:Use after free on close http2 on stream canceling: Node.js容易受到use after free攻击,攻击者可能利用内存损坏来改变进程行为。该版本包括对CVE-2021-22930的后续修复,因为该问题在之前的修复中没有完全解决。
-
CVE-2021-22939:rejectUnauthorized参数的不完全验证:如果Node.js HTTPS API使用不当,且 "rejectiveUnauthorized "参数中传递了 "undefined",则不会返回错误,并且与具有过期证书的服务器的连接会被接受。
Node 16.6.0版本的更新日志
这是一个安全版本。值得注意的变化。
V8引擎被更新到9.2.230.21版本。
它特别引入了新的Array.prototype.at方法(也适用于类型化数组和字符串)。
const array = [1, 2, 3];
console.log(array.at(-1));
// Prints: 3
其他值得注意的变化。
-
CVE-2021-22930: Use after free on close http2 on stream canceling
:Node.js容易受到use after free攻击,攻击者可能利用内存损坏,改变进程行为。 -
检查员:标记为稳定
-
punycode:添加待废除的内容
-
repl:启用 -experimental-repl-await /w opt-out
Node 16.5.0版本的更新日志
实验性网络流API。Node.js现在公开了Web Streams API的实验性实现。
虽然它是实验性的,但该API没有在全局对象上公开,只能通过新的stream/web 核心模块访问。
import { ReadableStream, WritableStream } from 'stream/web'; // Or from 'node:stream/web'
导入该模块将在每个进程中发出一个实验性警告。
原始API已经实现,我们现在正在努力将其与各种现有的核心API整合。
其他值得注意的变化。
- fs: 允许临时目录前缀为空字符串
- Deps: 升级npm到7.19.1
Node 16.4.2版的更新日志
Node.js 16.4.1在非英语地区的Windows安装程序中引入了一个回归,在这个版本中被修复。如果你不使用Windows安装程序,就没有必要下载这个版本。
节点版本16.4.1的更新日志
这是一个安全版本。修复的漏洞。
-
CVE-2021-22918:libuv升级--越界读取(中):Node.js在libuv的uv__idna_toascii()函数中存在越界读取漏洞,该函数用于将字符串转换为ASCII。该函数被Node的dns模块的lookup()函数调用,可能导致信息泄露或崩溃。
-
CVE-2021-22921:Windows安装程序 - Node安装程序本地权限升级(中):Node.js在Windows平台的某些条件下容易受到本地权限升级攻击。更具体地说,安装目录中的权限配置不当,使攻击者可以进行两种不同的升级攻击。PATH和DLL劫持。
Node 16.4.0版本的更新日志
- async_hooks:稳定AsyncLocalStorage的部分内容
- 部署:升级npm至7.18.1,更新V8至9.1.269.36
- dns:允许
--dns-result-order,逐字逐句地改变默认的dns。
Node 16.3.0版的更新日志
- cli:为-conditions标志添加-C别名
- 部署:在npm安装命令中添加工作空间支持
Node 16.2.0版的更新日志
- async_hooks: 使用新的v8::Context PromiseHook API
- lib:支持在windows下设置process.env.TZ
- 模块:在import.meta.resolve中添加对URL的支持
- 进程:添加 "worker "事件
- util:增加 util.types.isKeyObject 和 util.types.isCryptoKey。
节点16.1.0版的更新日志
fs:允许无参数的 fsPromises fileHandle 读取。
Node 16.0.0版本的更新日志
-
稳定的Timer Promises API。Timers Promises API 提供了一组可供选择的定时器函数,这些函数返回 Promise 对象。在Node.js v15.0.0中添加,在这个版本中,它们从实验状态升级为稳定状态。
-
工具链和编译器的升级。Node.js v16.0.0将是我们为Apple Silicon提供预构建二进制文件的第一个版本。虽然我们将为英特尔(darwin-x64)和ARM(darwin-arm64)架构提供单独的tarballs,但macOS安装程序(.pkg)将作为一个 "胖"(多架构)二进制文件运送。
-
V8 9.0:V8 JavaScript引擎被更新为V8 9.0,包括性能调整和改进。这次更新也带来了ECMAScript RegExp Match Indices,它提供了捕获字符串的开始和结束索引。当正则表达式有/d标志时,索引数组可以通过匹配对象上的.indices属性获得。
-
其他值得注意的变化。
- assert:毕业于 assert.match 和 assert.doesNotMatch。
- buffer:将btoa和atob作为globals公开。
- 部署:将最小的ICU版本提升到68
- 部署:更新 ICU 至 69.1
- 部署:将 llhttp 更新至 6.0.0
- 部署:将 npm 升级到 7.10.0
- http:添加 http.ClientRequest.getRawHeaderNames()
- lib,src:更新集群以使用Parent
- 模块:增加对node:-prefixed require(...)调用的支持
- perf_hooks:为 timerify 增加直方图选项
- repl:为node:-prefixed require(...)调用添加自动补全功能
- util:增加getSystemErrorMap()的植入。
从RisingStack了解更多Node.js信息
在RisingStack,我们在过去5年里一直在为社区编写JavaScript/Node教程。如果你是Node.js的初学者,我们建议你看看我们的Node Hero教程系列这个系列的目标是帮助你开始使用Node.js,并确保你了解如何使用它编写应用程序。
参见《节点英雄》系列教程的所有章节。
- 开始使用Node.js
- 使用NPM
- 了解异步编程
- 你的第一个Node.js HTTP服务器
- Node.js数据库教程
- Node.js请求模块教程
- Node.js项目结构教程
- 使用Passport.js的Node.js认证
- Node.js单元测试教程
- 调试Node.js应用程序
- Node.js安全教程
- 如何部署Node.js应用程序
- 监控Node.js应用程序
作为《Node Hero》的续集,我们已经完成了另一个系列,名为《Node.js at Scale》--它专注于高级Node/JavaScript主题。看看吧!
帖子《下载并更新Node.js到最新版本!Node v18.7.0 Current / LTS v16.16.0 Direct Links首次出现在RisingStack Engineering上。