作者:五月君来源: Nodejs技术堆栈
版本Node.js v17已发行,并用作当前版本,而不是版本v16。 新版本v17提供了其他基于Promise的核心模块API、添加错误堆栈末尾的版本信息、支持OpenSSL 3.0以及将v8 JavaScript引擎更新为9.5等新功能。
基于 Promise 的 API
Node.js项目的一个持续战略计划是为Node.js核心模块提供基于Promise的API支持,近年来为timer、stream模块提供了Promise API支持Node.js v17发行版为自述模块提供了基于Promise的API支持。 此模块提供了一个接口,用于从可读流对象逐行读取数据。
与process.stdin协作,可以读取用户在终端上输入的数据。 如下例所示:
//test.mjs
导入* asreadlinefrom ' node : readline/promises ';
导入{ stdin as input,stdout as output } from 'process ';
constrl=readline.create interface ({ input,output };
const answer=await rl.question (“nodejs技术堆栈”的域名是什么:');
console.log (答案: ${answer} );
rl.close (; 执行后,效果如下。
有关readline模块的详细信息,请参见readline_readline。
错误堆栈增加 Node.js 版本
堆栈跟踪是诊断APP应用程序错误消息的重要组件。 在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版本,则APP应用程序运行正常,但Node.js v17会抛出error code为ERR_OSSL_EVP_UNSUPPORTED
导入复制自'复制到';
在console.log (crypto.create hash (md4 ).update (版本123 ),utf8 ).digest (hex ) ) Node.js v17上运行后,执行以下操作
一种临时解决方案是在运行时添加--openssl-legacy-provider标志,从而导致APP应用程序没有报告错误。
$ node-- OpenSSL-legacy-provider test.mjs
c 58 CDA 49 f 00748 a3 BC 0f CFA 511 d 516 CB
V8 更新至 9.5
V8在8.1版中打开Intl.DisplayNames API,并支持四种类型的语言、区域、货币和脚本。 现在添加了两种新类型: calendar和datetime,对国际化APP应用非常有用。constescalendarnames=new intl.display names ([ ' zh ' ],{ type: 'calendar' } );
控制台. log (escalendarnames.of ) (roc ); //民国纪年
constencalendarnames=new intl.display names ([ ' en ' ],{ type: 'calendar' } );
控制台. log (encalendarnames.of ) (roc ); //Minguo Calendar日期和时间字段国际化名称展示。
功能打印日期(日期字段) {
console.log (
` ${datetimefield.of(year ) } $ { datetime field.of (month ) } $ { datetime field.of (day ) } ) ) ) ) )。
);
}
printdate(newintl.displaynames ) ['zh'],{ type: 'dateTimeField' }年月日
打印日期(new intl.display names (' en ',{ type: 'dateTimeField' } )//year month day
打印日期(new intl.display names ([ ' kor ' ],{ type: 'dateTimeField' } ) /
print date (new intl.display names (' tha )、{ type: 'dateTimeField' } ) }/intl.datetimeformatAPI在v8 9.5发行版中为tint
下面的代码示例说明之间的差异。
控制台. log (new intl.datetime format (' zh ) ).format (new date ) ); //2021/01/01
console.log (new intl.datetime format (zh ),{timezonename: ) shortgeneric ) }.format (new date ) }; //2021/01/01中国时间
console.log (new intl.datetime format (zh ),{timezonename: ) longgeneric ) }.format (new date ) }; //2021/01/01中国标准时间
console.log (new intl.datetime format (zh ),{timezonename: ) shortoffset ) }.format (new date ) }; //2021/01/01 GMT 8
console.log (new intl.datetime format (zh ),{timezonename: ) longoffset ) }.format (new date ) }; 请参阅//2021/01/01GMT08336000v89.5发行说明文件以了解详细信息。
根据
其它信息
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的版本? 怎么选择? ”。
参考
3359 medium.com/the-node-js-collection/node-js-17-is-here-8 DBA1e 14 e 382
3359 nodejs.org/en/blog/release/v 17.0.0 /