速报~Node.js 18 来啦!快来看看有哪些新特性

1,022 阅读3分钟

前言

又到了一年一度Node.js社区要发布新版本的时候了,Node.js v18在4月19号悄没声息的发布了!Node.js v18将会在2020年10月成为LTS版本(留给v16的时间不多了,哭/(ㄒoㄒ)/~~,现在用的还是14版本的有木有····),对v18 LTS的支持会一直到2025年4月份。但是在正式发布LTS版本之前,还有一些生态环境没有覆盖到,官方会持续测试与反馈,所以现阶段还需谨慎食用,那我们就一起来看看这次新版本带来了哪些新花样! image.png Node.js.jpg

Node.js18新特性

实验性Fetch

好消息!好消息!!Node.js终于提供了fetch请求功能!

Fetch API提供了一种简单、合理的JavaScript处理HTTP请求的方式,早已成为Web的标准 API。但是在很长一段时间里,Node 不支持fetch请求。如果我们想发出 HTTP 请求,就必须使用第三方插件(如node-fetch)或自己从头开始编写请求。但是现在受undici的启发(node-fetch插件也是基于undici-fetch),Node也实现了尽可能接近Web标准的Fetch规范,但是有些特性需要浏览器环境支持的就被忽略了。

但是Node中的Fetch API还属于是实验性的,还需要更进一步的测试跟进。

image.png

Undici库

上面提到了Node Fetch的实现是基于undici,所以Node里面加一个undici库没毛病吧??(doge) image.png 那么这个库到底是什么呢?其实就是Node.js团队提供的,一个用Nodejs编写的、完整的、成熟的HTTP1.1客户端。

实验性的test模块

node:test模块可以创建JavaScript测试,提供了一种快速、直接的,不需要再安装其它依赖(JsetMocha)就能满足我们简单的测试需求,它以TAP 的规范输出测试结果, 这也是很多测试工具所广泛使用的,更容易被理解与接受。但是目前还属于开发阶段,并不能完全替代成熟的JsetMocha

import test from 'node:test'; // 必须以node:作为前缀,表明加载的是node 的核心模块,否则可能加载第三方模块

image.png

平台支持程度

  • Linux:只要是基于glibc 2.28或者更高版本即可,如Debian 10、 RHEL 8和 Ubuntu 20.04
  • MacOS需要10.15或者更高版本
  • 由于在 Node.js 中创建 v8依赖关系存在问题,win 32系统将不能第一时间获取更新Node.js v18版本 更多支持详情请戳这里

V8新版本

Node引入的V8引擎已经更新升级到10.1版本了,改进并且新增了一些新特性:

  • Node.js v17.9.0就已经有了,例如findLast()findLastIndex(),这在Web端还处于提案阶段,目前还需要通过lodash使用才行 findlast.jpg
  • 提高了类和类上私有方法的性能(它们的初始化速度现在与普通属性存储一样快)。
  • 新增了Intl.supportedValuesOf(param)方法,可支持的参数有calendarcollationcurrency,numberingSystemtimeZone, and unit.
Intl.supportedValuesOf('calendar')
// ['buddhist', 'chinese', 'coptic', 'dangi', ...]

Intl.supportedValuesOf('collation')
// ['big5han', 'compat', 'dict', 'emoji', ...]

Intl.supportedValuesOf('currency')
// ['ADP', 'AED', 'AFA', 'AFN', 'ALK', 'ALL', 'AMD', ...]

Intl.supportedValuesOf('numberingSystem')
// ['adlm', 'ahom', 'arab', 'arabext', 'bali', ...]

Intl.supportedValuesOf('timeZone')
// ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', ...]

Intl.supportedValuesOf('unit')
// ['acre', 'bit', 'byte', 'celsius', 'centimeter', ...]
  • 更多关于V8引擎的V9.9版本详情可参考这里

废弃或移除的API

fs : runtime deprecate string coercion in fs.write, fs.writeFileSync (Livia Medeiros) #42607  
dns : remove dns.lookup and dnsPromises.lookup options type coercion (Antoine du Hamel) #41431  
process : runtime deprecate multipleResolves (Benjamin Gruenbaum) #41896
stream : remove thenable support (Robert Nagy) #40773  
tls : move tls.parseCertString to end-of-life (Tobias Nießen) #41479

感谢阅读~以上就是关于Node.js v18的全部内容,有什么想法快来一起讨论吧

参考:

Node.js 18 is now available! | Node.js (nodejs.org)

Node.JS 18 Released. All you need to know about Nodejs 18 | by Muhammad Arshad | BITLogix | Apr, 2022 | Medium