网易首页 > 网易号 > 正文 申请入驻

Node.js v17 来了,看看都有哪些新功能?

0
分享至

作者: 五月君 来源: Nodejs技术栈

Node.js v17 版本已发布,取代了 v16当前版本,新的 v17 版本提供了一些新功能:基于 Promise 的其它核心模块 API、错误堆栈尾部增加 Node.js 版本信息、OpenSSL 3.0 支持、v8 JavaScript 引擎更新至 9.5。

基于 Promise 的 API

Node.js 项目的一项持续性战略计划是为 Node.js 核心模块提供基于 Promise 的 API 支持,近年来已为 timer、stream 模块提供了 Promise API 支持。

Node.js v17 版本为 readline 模块提供了基于 Promise 的 API 支持。该模块提供了一个接口用于从一个可读流对象逐行读取数据。

结合 process.stdin 可读取用户在终端输入的数据。如下例所示:

  • // test.mjs
    import * as readline from "node:readline/promises";
    import { stdin as input, stdout as output } from 'process';
    const rl = readline.createInterface({ input, output });
    const answer = await rl.question('“Nodejs技术栈” 的域名是什么:');
    console.log(`答案: ${answer}`);
    rl.close();

运行之后,效果如下所示:

readline 模块的更多信息参考 readline_readline。

错误堆栈增加 Node.js 版本

堆栈跟踪是诊断应用程序错误信息的重要组成部分,在 Node.js v17 版本中,如果因为一些致命的错误导致进程退出,在错误堆栈的尾部将包含 Node.js 的版本信息。

如果想忽略该信息,运行时在命令行指定 --no-extra-info-on-fatal-exception 标志。

OpenSSL 3.0 支持

Node.js v17 版本包含了近期发布的 OpenSSL 3.0,根据 OpenSSL 的发布策略,OpenSSL 1.1.1 将在 2023-09-11 结束支持,这个日期也在 Node.js v18 LTS 结束日期之前。

因为 OpenSSL 3.0 对允许的算法和密钥大小增加了严格的限制,预计会对生态系统造成一些影响,在 Node.js v17 版本包含 OpenSSL 3.0 以便在下一个 LTS 版本之前为用户的测试和反馈留出时间。

例如,md4 这是 OpenSSL 3.0 默认不再允许的一个算法,如果是在 Node.js 17 之前的 Node 版本中,应用程序是可以正常运行的,但在 Node.js v17 中将抛出一个 error code 为 ERR_OSSL_EVP_UNSUPPORTED 的错误信息。

  • import crypto from 'crypto';
    console.log(crypto.createHash('md4').update('123', 'utf8').digest('hex'))

Node.js v17 版本下运行之后得到如下错误信息。

一个临时的解决方法是运行时增加 --openssl-legacy-provider 标志,应用程序报错。

  • $ node --openssl-legacy-provider test.mjs
    c58cda49f00748a3bc0fcfa511d516cb
V8 更新至 9.5

v8 在 8.1 版本开启了 Intl.DisplayNames API,支持语言、区域、货币、脚本四种类型,现在添加了两种新的类型:calendar、dateTimeField,分别返回不同的日历类型和日期时间字段的显示名称。对于国际化应用很有帮助。

  • const esCalendarNames = new Intl.DisplayNames(['zh'], { type: 'calendar' });
    console.log(esCalendarNames.of('roc')); // 民国纪年
    const enCalendarNames = new Intl.DisplayNames(['en'], { type: 'calendar' });
    console.log(enCalendarNames.of('roc')); // Minguo Calendar

日期时间字段国际化名称展示。

  • function printDate(dateTimeField) {
    console.log(
    `${dateTimeField.of('year')} ${dateTimeField.of('month')} ${dateTimeField.of('day')}`

    printDate(new Intl.DisplayNames(['zh'], { type: 'dateTimeField' })) // 年 月 日
    printDate(new Intl.DisplayNames(['en'], { type: 'dateTimeField' })) // year month day
    printDate(new Intl.DisplayNames(['KOR'], { type: 'dateTimeField' })) // 년 월 일
    printDate(new Intl.DisplayNames(['THA'], { type: 'dateTimeField' })) // ปี เดือน วัน
  • Intl.DateTimeFormat API 在 v8 9.5 版本中为 timeZoneName 选项新增加了四个值:shortGeneric、longGeneric、shortOffset、longOffset。

通过以下代码示例可看到之间的区别。

  • console.log(new Intl.DateTimeFormat('zh').format(new Date())); // 2021/01/01
    console.log(new Intl.DateTimeFormat('zh', { timeZoneName: 'shortGeneric' }).format(new Date())); // 2021/01/01 中国时间
    console.log(new Intl.DateTimeFormat('zh', { timeZoneName: 'longGeneric' }).format(new Date())); // 2021/01/01 中国标准时间
    console.log(new Intl.DateTimeFormat('zh', { timeZoneName: 'shortOffset' }).format(new Date())); // 2021/01/01 GMT+8
    console.log(new Intl.DateTimeFormat('zh', { timeZoneName: 'longOffset' }).format(new Date())); // 2021/01/01 GMT+08:00

参见 v8 9.5 release 文档 阅读更多信息。

其它信息

按照 Node.js 发布时间表,Node.js v12 将于 2022 年 4 月结束生命周期。Node.js v16 在 2021 年 10 月 26 升级为 LTS,即长期支持版本。

Node.js 的奇数版本不是稳定的版本(例如,当前的 Node.js v17 ),它的生命周期很短,不要用于生产环境。

对 Node.js 版本信息不了的、不知道如何安装 Node.js 的参考文章 “Node.js 版本知多少?又该如何选择?”。

Reference

https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382

https://nodejs.org/en/blog/release/v17.0.0/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
1天涨粉10万的博士爸爸:这代孩子的“前额叶损伤”,可以这么养

1天涨粉10万的博士爸爸:这代孩子的“前额叶损伤”,可以这么养

新东方
2026-05-06 17:46:49
纽约时报看懵了:蜜雪冰城海底捞比亚迪,年轻人为何集体倒向中国

纽约时报看懵了:蜜雪冰城海底捞比亚迪,年轻人为何集体倒向中国

人间无味啊
2026-05-03 10:53:21
北大学神吴谢宇弑母真相:与他的口述不符,与舅舅透露的细节有关

北大学神吴谢宇弑母真相:与他的口述不符,与舅舅透露的细节有关

微野谈写作
2026-05-02 15:50:08
地球的第二文明—AI破译鲸鱼语言,我们竟在深渊里找到了外星人

地球的第二文明—AI破译鲸鱼语言,我们竟在深渊里找到了外星人

自说自话的总裁
2026-05-08 19:25:33
张军被查创下多个尴尬“纪录”,18年前曾因酒驾被查

张军被查创下多个尴尬“纪录”,18年前曾因酒驾被查

元芳有看法
2026-04-30 09:25:44
一天中,最佳的性生活时间是在几点?早上好还是晚上好?出乎意料

一天中,最佳的性生活时间是在几点?早上好还是晚上好?出乎意料

荆医生科普
2026-05-06 20:55:04
宋庆龄向毛主席求情,希望宽大处理陈璧君,陈:我情愿监狱度余生

宋庆龄向毛主席求情,希望宽大处理陈璧君,陈:我情愿监狱度余生

史之铭
2026-05-10 19:24:25
海港,太不容易了!

海港,太不容易了!

新民晚报
2026-05-11 10:10:05
这5款汽车突然宣布开始停产,终究还是败给了新能源车

这5款汽车突然宣布开始停产,终究还是败给了新能源车

小怪吃美食
2026-05-11 10:34:55
15分钟灭满门!8个孩子全被爆头,美国退伍军人的疯狂!

15分钟灭满门!8个孩子全被爆头,美国退伍军人的疯狂!

我去忙了
2026-05-08 22:12:49
张本宇又生气了,不是儿女在亚洲杯零冠收场,而是他们身份的尴尬

张本宇又生气了,不是儿女在亚洲杯零冠收场,而是他们身份的尴尬

大汉体育解说
2026-02-09 13:07:34
马丁·肖特打破沉默:女儿凯瑟琳自杀身亡

马丁·肖特打破沉默:女儿凯瑟琳自杀身亡

热搜摘要官
2026-05-11 03:13:33
特朗普拒绝中方要求,美媒火速警告:别摆姿态,中国不期待你访华

特朗普拒绝中方要求,美媒火速警告:别摆姿态,中国不期待你访华

阿雹娱乐
2026-05-10 23:44:52
任达华李丽珍经典激情戏翻红,网友:当年看懵不敢声张

任达华李丽珍经典激情戏翻红,网友:当年看懵不敢声张

草莓解说体育
2026-05-11 10:07:02
形势有多严峻?曾经的王牌专业凉了!辅导员和教授感到无力和沉重

形势有多严峻?曾经的王牌专业凉了!辅导员和教授感到无力和沉重

慧翔百科
2026-05-09 11:34:26
墨菲谈争议判罚:这是明显的犯规,因为是阿森纳所以才有争议

墨菲谈争议判罚:这是明显的犯规,因为是阿森纳所以才有争议

懂球帝
2026-05-11 11:37:55
陈若仪晒和Kimi合照庆母亲节,公开13年前龅牙照坦言不敢公开社群

陈若仪晒和Kimi合照庆母亲节,公开13年前龅牙照坦言不敢公开社群

小椰的奶奶
2026-05-11 03:51:11
赫内斯谈克罗斯:多要一欧元,那就得走

赫内斯谈克罗斯:多要一欧元,那就得走

懂球帝
2026-05-10 17:07:24
手机突然收到陌生验证码千万别慌!内行忠告:立刻打开飞行模式

手机突然收到陌生验证码千万别慌!内行忠告:立刻打开飞行模式

Thurman在昆明
2026-05-09 05:11:35
认命了?张本智和戴上银牌后开心合影+有说有笑 教练队友表情尴尬

认命了?张本智和戴上银牌后开心合影+有说有笑 教练队友表情尴尬

风过乡
2026-05-11 07:50:21
2026-05-11 11:52:49
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 823关注度
往期回顾 全部

科技要闻

黄仁勋:你们赶上了一代人一次的大机会

头条要闻

特朗普时隔9年再度访华 今年特朗普还赞叹中国仪仗队

头条要闻

特朗普时隔9年再度访华 今年特朗普还赞叹中国仪仗队

体育要闻

那个曾让詹姆斯抱头的兄弟,40岁从大学毕业了

娱乐要闻

谢霆锋没想到,王菲靠张艺谋重返巅峰

财经要闻

"手搓汽车"曝光:伪造证件、电池以旧代新

汽车要闻

全球化成国内车企未来胜负手,谁是出海最强"水手"?

态度原创

房产
教育
家居
数码
手机

房产要闻

低价甩卖!海口这个地标商业,无人接盘!

教育要闻

家长的基本修养是“不拖后腿”

家居要闻

菁英人居 全能豪宅

数码要闻

等了快一年:猫头鹰黑色版NF-A12x25 G2终于要来了!官方开始预热

手机要闻

控制成本 三星Galaxy S27或引入京东方供货屏幕

无障碍浏览 进入关怀版