Node.js 15正式版发布,将替代Node.js 14成为当前的的稳定发行版

Node.js 15正式版发布,将替代Node.js 14成为当前的的稳定发行版

前两天,Node.js官方发布了Node.js 15的正式版本,Node.js 15 将替代 Node.js 14 成为当前的的稳定发行版,后者将在本月晚些时候升级为 LTS(长期支持)版本。如果大家想体验下Node.js 15 的最新功能,可以从官方进行下载。

1.png

视频教程推荐:nodejs 教程

那Node.js 15带来了哪些新的功能和特性呢?主要体现在以下几个方面:

AbortControllerN-API 版本 7npm 7unhandled rejections 默认抛出QUICV8 8.6

AbortController

AbortController接口表示一个控制器对象,允许开发者根据需要中止一个或多个 Web请求,Node.js 15 加入了 AbortController 的一个实验性实现。AbortController 是一个全局实用工具类,可根据 AbortController Web API在选定的基于 Promise 的 API 中取消发出的请求信号,如下所示。

const ac = new AbortController();ac.signal.addEventListener('abort', () => console.log('Aborted!'),{ once: true });ac.abort();console.log(ac.signal.aborted);    //Prints True

登录后复制

在上面的示例中,当调用 abortController.abort()方法时就会发出 abort 事件,AbortController 将仅触发一次 abort 事件。同时,附加到 AbortSignal 上的事件侦听器应使用{ once: true}参数选项(或等效于 EventEmitterAPI 的 once()),以确保一旦 abort 事件得到处理,然后再将事件侦听器删除。

关于AbortController的 Node.js API 文档,可以参考:AbortController。

N-API 7

N-API是一个用于构建本机插件的API,它独立于底层JavaScript运行时环境(如V8),并作为Node.js本身的一部分。此API将作为跨Node.js版本已编译的应用程序接口(Application Binary Interface)的稳定版,简称(ABI)。它是为了将Addons插件和底层JavaScript引擎的改动隔离开来,并且允许在一个版本编译的模块不需要重新编译就可以在更高版本的Node.js上运行。

N-API是一个C语言的API,它确保了Node.js版本和不同编译器级别之间应用程序接口(ABI)的稳定性。C++ API可以更容易使用。为了支持使用C++,Node.js使用了一个C++包装器模块叫做node-addon-api,此包装器提供了一个可内联的C++ API。使用node-addon-api构建的二进制文件将依赖于Node.js导出的基于C函数符号的N-API接口,node-addon-api是一种更有效写代码的方法,用来编写调用N-API。

关于 Node.js 的N-API,可以参考:C/C++ addons with N-API

下面是node-addon-api的一个使用例子。

Object obj = Object::New(env);obj["foo"] = String::New(env, "bar");

登录后复制

napi_status status;napi_value object, string;status = napi_create_object(env, &object);if (status != napi_ok) {  napi_throw_error(env, ...);  return;}status = napi_create_string_utf8(env, "bar", NAPI_AUTO_LENGTH, &string);if (status != napi_ok) {  napi_throw_error(env, ...);  return;}status = napi_set_named_property(env, object, "foo", string);if (status != napi_ok) {  napi_throw_error(env, ...);  return;}

登录后复制

此次更新的N-API 7 是上一个大版本以来的第一个新版本,带来了ArrayBuffers的相关内容。

npm 7

Node.js 15 附带了 npm 的新大版本 npm 7。npm 7 有许多新功能,包括 npm 工作区和新的 package-lock.json 格式。npm 7 还包括 yarn.lock 文件支持。npm 7 的一大变化是默认安装对等依赖项。

unhandled rejections 默认抛出

从 Node.js 15 开始,unhandledRejection 的默认模式已更改为 throw(以前是 warn)。在 throw 模式下,如果未设置 unhandledRejection hook,则会将 unhandledRejection 提升为未捕获的异常。拥有 unhandledRejection hook 的用户应该不会看到任何行为变化,并且仍然可以使用 –unhandled-rejections=mode 进程标志来切换模式。

Node.js 之前的多个版本都会默认发出 UnhandledPromiseRejectionWarning,而根据《Node.js 用户见解:Unhandled Promise Rejections》调查的结果,Node.js TSC 同意将模式切换为 throw。

QUIC

QUIC 是谷歌制定的一种基于UDP的低时延的互联网传输层协议,它是 HTTP/3 的基础传输协议。并且,在2016年11月国际互联网工程任务组(IETF)召开了第一次QUIC工作组会议,受到了业界的广泛关注,意味着QUIC开始在成为新一代传输层协议上迈出了关键的一步。同时,QUIC 具有内置的 TLS 1.3 安全性、流控制、错误纠正、连接迁移和多路复用。

Node.js 15 附带 QUIC 的实验性支持,可通过 –experimental-quic 配置标志编译 Node.js 来启用。例如,核心 net 模块公开了 Node.js QUIC 实现,代码如下。

const { createQuicSocket } = require('net');

登录后复制

'use strict';const key = getTLSKeySomehow();const cert = getTLSCertSomehow();const { createQuicSocket } = require('net');// Create the QUIC UDP IPv4 socket bound to local IP port 1234const socket = createQuicSocket({ endpoint: { port: 1234 } });socket.on('session', async (session) => {  // A new server side session has been created!  // The peer opened a new stream!  session.on('stream', (stream) => {    // Let's say hello    stream.end('Hello World');    // Let's see what the peer has to say...    stream.setEncoding('utf8');    stream.on('data', console.log);    stream.on('end', () => console.log('stream ended'));  });  const uni = await session.openStream({ halfOpen: true });  uni.write('hi ');  uni.end('from the server!');});// Tell the socket to operate as a server using the given// key and certificate to secure new connections, using// the fictional 'hello' application protocol.(async function() {  await socket.listen({ key, cert, alpn: 'hello' });  console.log('The socket is listening for sessions!');})();

登录后复制

关于QUIC的更多信息,可以参考下面的文档:QUIC 。

V8 8.6

V8 JavaScript 引擎已更新为 V8 8.6(V8 8.4 是 Node.js 14 中的最新版本)。除了性能调整和改进之外,V8 更新还带来了以下语言特性:

Promise.any()——MDN

Promise.any() 接收一个Promise可迭代对象,只要其中的一个 promise 成功,就返回那个已经成功的 promise 。如果可迭代对象中没有一个 promise 成功(即所有的 promises 都失败/拒绝),就返回一个失败的 promise 和AggregateError类型的实例,它是 Error 的一个子类,用于把单一的错误集合在一起。

Promise.any()的参考文档如下所示:Promise.any()

AggregateError——MDN

AggregateError主要用于操作报告多个错误被抛出的场景,语法格式如下:

new AggregateError(errors[, message])

登录后复制

捕获一个AggregateError的示例代码如下:

Promise.any([  Promise.reject(new Error("some error")),]).catch(e => {  console.log(e instanceof AggregateError); // true  console.log(e.message);                   // "All Promises rejected"  console.log(e.name);                      // "AggregateError"  console.log(e.errors);                    // [ Error: "some error" ]});

登录后复制

创建一个AggregateError的示例代码如下:

try {  throw new AggregateError([    new Error("some error"),  ], 'Hello');} catch (e) {  console.log(e instanceof AggregateError); // true  console.log(e.message);                   // "Hello"  console.log(e.name);                      // "AggregateError"  console.log(e.errors);                    // [ Error: "some error" ]}

登录后复制

详细参考文档:AggregateError

String.prototype.replaceAll()——MDN

replaceAll() 方法是返回一个新字符串,新字符串所有满足 pattern 的部分都已被replacement 替换。pattern可以是一个字符串或一个 RegExp, replacement可以是一个字符串或一个在每次匹配被调用的函数。

const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';const regex = /dog/gi;console.log(p.replaceAll(regex, 'ferret'));// expected output: "The quick brown fox jumps over the lazy ferret. If the ferret reacted, was it really lazy?"console.log(p.replaceAll('dog', 'monkey'));// expected output: "The quick brown fox jumps over the lazy monkey. If the monkey reacted, was it really lazy?"

登录后复制

详细内容参考:String.prototype.replaceAll()

安利升级

另外,随着 Node.js 15 新版本的发布!官方希望开发者尽快的进行升级,并将遇到的问题反馈就给官方,。当然,开发者还可以使用 Node.js 15 测试你的应用程序和模块,以确保你的项目与最新的 Node.js 特性和更改兼容。

并且,Node.js官方也开始计划升级到 Node.js 14 ,它将在下周升级到 LTS,支持会持续到直到 2023 年 4 月。还要注意的是,Node.js 10 将于 2021 年 4 月结束生命周期。因此,如果你仍在使用 Node.js 10,我们建议你开始计划升级。

原文链接:https://medium.com/@nodejs/node-js-v15-0-0-is-here-deb00750f278

更多编程相关知识,请访问:编程入门!!

以上就是Node.js 15正式版发布,将替代Node.js 14成为当前的的稳定发行版的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2725112.html

(0)
上一篇 2025年3月7日 23:20:17
下一篇 2025年2月28日 11:24:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js数组怎么去重?

    js数组去重方法:1、使用ES6的Set对象去重;2、利用for嵌套for,然后splice去重;3、利用indexOf去重;4、利用对象的属性不能相同的特点进行去重;5、利用Map数据结构去重;6、利用reduce+includes去重。…

    2025年3月7日
    200
  • js数组去重方法的总结

    js数组去重的方法:1、利用ES6 Set去重;2、利用for嵌套for,然后splice去重;3、利用indexOf去重;4、利用sort()去重;5、利用对象的属性不能相同的特点进行去重等等。 推荐:《js视频教程》 数组去重,一般都是…

    2025年3月7日
    200
  • JavaScript 中判断变量是否为数字

    今天javascript栏目如何判断变量是否为数字。 大家都说简历没项目写,我就帮大家找了一个项目。 简介 JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存…

    2025年3月7日
    200
  • 一些你可能不知道却有用的 Node.js 包

    本篇文章给大家推荐一些你可能不知道的,小众却有用的 node.js 包。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 视频教程推荐:nodejs 教程 yargs yargs 是一个用来处理命令行参数的包,可以帮你处理自…

    2025年3月7日
    200
  • 详解JS中的JSON和JSONP

    简单地使用json并不能支持跨域资源请求,为了解决这个问题,需要采用jsonp数据交互协议。众所周知,js文件的调用不受跨域与否的限制,因此如果想通过纯web端跨域访问数据,只能在远程服务器上设法将json数据封装进js格式的文件中,供客户…

    2025年3月7日
    200
  • 详解构建可运行的JavaScript规范的方法

    编程不仅仅是给计算机下达如何完成一项任务的指令,它还包括以一种精确的方式与他人交流思想,甚至是与未来的自己。这样的交流可以有多个目标,也许是为了共享信息,或者只是为了更容易地修改—如果你不理解或不记得很久以前做过什么,那么就很难修改。 当我…

    2025年3月7日
    200
  • 十五条 JavaScript 编程技巧

    .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markd…

    2025年3月7日 编程技术
    200
  • 分享5个JS函数的高级技巧

    函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。函数对任何一门语言来说都是一个核心的概念,在javascript中更是如此。本文将深入介绍函数的5个高级技巧。 作用域安全的构造函数 构造函数其实就是一个使用new操作符调用的函数…

    2025年3月7日
    200
  • 详解JS中Map和ForEach的差异

    如果你已经有使用JavaScript的经验,你可能已经知道这两个看似相同的方法:Array.prototype.map()和Array.prototype.forEach()。那么,它们到底有什么区别呢? 定义 我们首先来看一看MDN上对M…

    2025年3月7日
    200
  • 避免Node.js模块日志污染程序日志的方法介绍

    视频教程推荐:nodejs 教程 你是否有过这样的经历,当把 logging 添加到自定义 Node 模块中,并认为自己将会从这些额外信息中受益,却发现当你将模块添加为依赖项并运行 npm install 和 npm start 时,你的程…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论