前言
又到了一年一度Node.js社区要发布新版本的时候了,Node.js v18
在4月19号悄没声息的发布了!Node.js v18
将会在2020年10月成为LTS版本(留给v16的时间不多了,哭/(ㄒoㄒ)/~~,现在用的还是14版本的有木有····),对v18 LTS的支持会一直到2025年4月份。但是在正式发布LTS版本之前,还有一些生态环境没有覆盖到,官方会持续测试与反馈,所以现阶段还需谨慎食用,那我们就一起来看看这次新版本带来了哪些新花样!
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还属于是实验性的,还需要更进一步的测试跟进。
Undici库
上面提到了Node Fetch的实现是基于undici,所以Node里面加一个undici库没毛病吧??(doge)
那么这个库到底是什么呢?其实就是Node.js团队提供的,一个用Nodejs编写的、完整的、成熟的HTTP1.1客户端。
实验性的test模块
node:test
模块可以创建JavaScript测试,提供了一种快速、直接的,不需要再安装其它依赖(Jset
或Mocha
)就能满足我们简单的测试需求,它以TAP 的规范输出测试结果, 这也是很多测试工具所广泛使用的,更容易被理解与接受。但是目前还属于开发阶段,并不能完全替代成熟的Jset
或Mocha
。
import test from 'node:test'; // 必须以node:作为前缀,表明加载的是node 的核心模块,否则可能加载第三方模块
平台支持程度
- 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使用才行 - 提高了类和类上私有方法的性能(它们的初始化速度现在与普通属性存储一样快)。
- 新增了
Intl.supportedValuesOf(param)
方法,可支持的参数有calendar
,collation
,currency
,numberingSystem
,timeZone
, andunit
.
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
的全部内容,有什么想法快来一起讨论吧
参考: