>  기사  >  웹 프론트엔드  >  Node.js 15의 공식 버전이 출시되어 현재 안정 릴리스인 Node.js 14를 대체하게 됩니다.

Node.js 15의 공식 버전이 출시되어 현재 안정 릴리스인 Node.js 14를 대체하게 됩니다.

青灯夜游
青灯夜游앞으로
2020-10-22 19:57:424253검색

Node.js 15의 공식 버전이 출시되어 현재 안정 릴리스인 Node.js 14를 대체하게 됩니다.

이틀 전, Node.js는 Node.js 15의 공식 버전을 공식 출시했습니다. Node.js 15는 현재 안정 릴리스인 Node.js 14를 대체할 예정이며, 이번 달 말에 업그레이드될 예정입니다. 이것은 LTS( 장기 지원) 버전. Node.js 15의 최신 기능을 경험하고 싶다면 공식 웹사이트에서 다운로드할 수 있습니다.

Node.js 15의 공식 버전이 출시되어 현재 안정 릴리스인 Node.js 14를 대체하게 됩니다.

동영상 튜토리얼 추천: nodejs 튜토리얼

그렇다면 Node.js 15는 어떤 새로운 기능과 특징을 가져오나요? 주로 다음 측면에 반영됩니다.

  • AbortController
  • N-API 버전 7
  • npm 7
  • 처리되지 않은 거부는 기본적으로 발생합니다.
  • QUIC
  • V8 8.6

AbortController

A tController 인터페이스는 컨트롤러를 나타냅니다. object 를 사용하여 개발자가 필요에 따라 하나 이상의 웹 요청을 중단할 수 있도록 Node.js 15에서는 AbortController의 실험적 구현을 ​​추가했습니다. AbortController는 아래와 같이 AbortController 웹 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() 메서드가 호출되면 중단 이벤트가 발생하고 AbortController는 중단 이벤트를 한 번만 트리거합니다. 또한 AbortSignal에 연결된 이벤트 리스너는 { once: true} 매개변수 옵션(또는 EventEmitterAPI의 Once()와 동일)을 사용하여 중단 이벤트가 처리되면 이벤트 리스너가 제거되도록 해야 합니다.

AbortController의 Node.js API 문서는 AbortController를 참조하세요.

N-API 7

N-API는 기본 JavaScript 런타임 환경(예: V8)과 관계없이 Node.js 자체의 일부로 기본 플러그인을 구축하기 위한 API입니다. 이 API는 Node.js 버전 전체에서 컴파일된 ABI(Application Binary Interface)의 안정적인 버전으로 사용됩니다. 이는 기본 JavaScript 엔진의 변경 사항에서 애드온 플러그인을 격리하도록 설계되었으며, 한 버전에서 컴파일된 모듈을 다시 컴파일하지 않고도 이후 버전의 Node.js에서 실행할 수 있습니다.

N-API는 Node.js 버전과 다양한 컴파일러 레벨 간의 ABI(애플리케이션 프로그래밍 인터페이스)의 안정성을 보장하는 C 언어 API입니다. C++ API를 사용하는 것이 더 쉬울 수 있습니다. C++ 사용을 지원하기 위해 Node.js는 인라인 가능한 C++ API를 제공하는 node-addon-api라는 C++ 래퍼 모듈을 사용합니다. node-addon-api를 사용하여 구축된 바이너리는 Node.js에서 내보낸 C 함수 기호를 기반으로 하는 N-API 인터페이스를 사용합니다. node-addon-api는 N-API에 대한 호출을 작성하기 위한 코드를 작성하는 보다 효율적인 방법입니다.

Node.js의 N-API에 대한 자세한 내용은 다음을 참조하세요. N-API를 사용한 C/C++ 애드온

다음은 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의 큰 변화 중 하나는 피어 종속성의 기본 설치입니다.

처리되지 않은 거부는 기본적으로 발생합니다.

Node.js 15부터 unhandledRejection의 기본 모드가 throw(이전에는 경고)로 변경되었습니다. throw 모드에서 unhandledRejection 후크가 설정되지 않은 경우 unhandledRejection은 포착되지 않은 예외로 발생합니다. unhandledRejection 후크가 있는 사용자는 동작 변화를 볼 수 없으며 --unhandled-rejections=mode 프로세스 플래그를 사용하여 모드를 전환할 수 있습니다.

많은 이전 버전의 Node.js는 기본적으로 UnhandledPromiseRejectionWarning을 내보냈으며 "Node.js User Insights: Unhandled Promise Rejections" 설문조사 결과에 따라 Node.js TSC는 모드를 throw로 전환하는 데 동의했습니다.

QUIC

QUIC은 Google에서 개발한 UDP 기반 저지연 인터넷 전송 계층 프로토콜입니다. HTTP/3의 기본 전송 프로토콜입니다. 또한, 2016년 11월 IETF(International Internet Engineering Task Force)는 첫 번째 QUIC 워킹 그룹 회의를 개최하여 업계의 큰 관심을 끌었습니다. 이는 QUIC가 차세대 전송 계층 프로토콜로 자리잡는 데 중요한 단계를 밟기 시작했음을 의미합니다. 한편 QUIC에는 TLS 1.3 보안, 흐름 제어, 오류 수정, 연결 마이그레이션 및 멀티플렉싱이 내장되어 있습니다.

Node.js 15에는 --experimental-quic 구성 플래그를 사용하여 Node.js를 컴파일하여 활성화할 수 있는 QUIC에 대한 실험적 지원이 포함되어 있습니다. 예를 들어 코어 넷 모듈은 다음 코드를 사용하여 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 1234
const 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를 대체하게 됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제