{"id":59200,"date":"2023-05-02T11:42:04","date_gmt":"2023-05-02T14:42:04","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=59200&#038;preview=true&#038;preview_id=59200"},"modified":"2023-08-22T04:38:59","modified_gmt":"2023-08-22T07:38:59","slug":"node-js-20","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/","title":{"rendered":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)"},"content":{"rendered":"<p>O Node.js v20 j\u00e1 est\u00e1 dispon\u00edvel! Em 18 de abril de 2023, ele se tornou p\u00fablico e agora pode ser usado por todos. Com essa vers\u00e3o, o Node.js deve ser muito mais seguro e ter um desempenho melhor.<\/p>\n<div class=\"group w-full text-gray-800 dark:text-gray-100 border-b border-black\/10 dark:border-gray-900\/50 bg-gray-50 dark:bg-[#444654]\">\n<div class=\"flex p-4 gap-4 text-base md:gap-6 md:max-w-2xl lg:max-w-xl xl:max-w-3xl md:py-6 lg:px-0 m-auto\">\n<div class=\"relative flex flex-col w-[calc(100%-50px)] gap-1 md:gap-3 lg:w-[calc(100%-115px)]\">\n<div class=\"flex flex-grow flex-col gap-3\">\n<div class=\"min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap break-words\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>\u00c9 importante saber &#8211; como esta \u00e9 uma vers\u00e3o de n\u00famero par, est\u00e1 programada para se tornar uma vers\u00e3o de suporte a longo prazo (LTS) em outubro de 2023 e ser\u00e1 suportada at\u00e9 abril de 2026. No entanto, a equipe do Node.js est\u00e1 buscando ativamente o feedback da comunidade para identificar e corrigir quaisquer problemas antes de ser promovida para LTS.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"flex justify-between lg:block\">\n<div class=\"text-gray-400 flex self-end lg:self-center justify-center mt-2 gap-2 md:gap-3 lg:gap-1 lg:absolute lg:top-0 lg:translate-x-full lg:right-0 lg:mt-0 lg:pl-2 visible\">\n<p>\u00a0<\/p>\n<div class=\"flex gap-1\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Essa nova vers\u00e3o do Node.js traz atualiza\u00e7\u00f5es e recursos interessantes que os <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">desenvolvedores<\/a> certamente apreciar\u00e3o, como o modelo de permiss\u00e3o experimental, <code>import.meta.resolve<\/code> s\u00edncrono, um executor de testes est\u00e1vel, atualiza o mecanismo V8 JavaScript para a vers\u00e3o 11.3, trazendo melhorias de desempenho e corre\u00e7\u00f5es de bugs, e muito mais.<\/p>\n<p>Neste artigo, voc\u00ea explorar\u00e1 as altera\u00e7\u00f5es introduzidas no Node.js v20, fornecendo uma vis\u00e3o detalhada de seus novos recursos e capacidades.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Primeiros passos com o Node.js v20<\/h2>\n<p>A instala\u00e7\u00e3o do Node.js v20 \u00e9 bastante semelhante \u00e0 de outras vers\u00f5es do <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a>. Tudo o que voc\u00ea precisa fazer \u00e9:<\/p>\n<ol start=\"1\">\n<li>Baixar o pacote do instalador do <a href=\"https:\/\/nodejs.org\/en\/download\/current\" target=\"_blank\" rel=\"noopener noreferrer\">site oficial do Node.js<\/a>.<\/li>\n<li>Depois que voc\u00ea tiver baixado o instalador, execute e siga as instru\u00e7\u00f5es para concluir o processo de instala\u00e7\u00e3o. Esse processo \u00e9 bastante simples, e voc\u00ea s\u00f3 precisa concordar com o contrato de licen\u00e7a e clicar no bot\u00e3o &#8220;Next&#8221;.<\/li>\n<li>Reinicie o sistema\/m\u00e1quina ap\u00f3s a conclus\u00e3o do processo de instala\u00e7\u00e3o para garantir que todas as altera\u00e7\u00f5es tenham efeito.<\/li>\n<li>Verifique a instala\u00e7\u00e3o do Node.js executando o seguinte comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">node -v<\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/04\/verify-node-v20-instalation.jpg\" alt=\"Instala\u00e7\u00e3o do Node.js v20\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Instala\u00e7\u00e3o do Node.js v20<\/figcaption><\/figure>\n<p>Se voc\u00ea ver o n\u00famero da vers\u00e3o (v20.0.0), isso significa que o Node.js est\u00e1 instalado corretamente e que voc\u00ea est\u00e1 pronto para come\u00e7ar a trabalhar com o Node.js v20.<\/p>\n\n<h2>O que h\u00e1 de novo no Node.js v20?<\/h2>\n<p>Vamos explorar as 5 principais atualiza\u00e7\u00f5es introduzidas nesta vers\u00e3o do Node.js. Esses recursos incluem:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"5\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Modelo de permiss\u00e3o experimental<\/h3>\n<p>A introdu\u00e7\u00e3o do modelo de permiss\u00e3o experimental no Node.js v20 \u00e9 uma adi\u00e7\u00e3o significativa que oferece aos desenvolvedores mais controle sobre o acesso a recursos espec\u00edficos durante a execu\u00e7\u00e3o.<\/p>\n<p>Esse novo recurso \u00e9 ben\u00e9fico quando a seguran\u00e7a e o uso de recursos s\u00e3o cr\u00edticos, como em um ambiente de produ\u00e7\u00e3o.<\/p>\n<p>O modelo de permiss\u00e3o vem com v\u00e1rias capacidades, incluindo a restri\u00e7\u00e3o de acesso ao sistema de arquivos, child_process, worker_threads e complementos nativos.<\/p>\n<p>Os desenvolvedores podem usar sinalizadores como <code>--allow-fs-read<\/code>, <code>--allow-fs-write<\/code> e <code>--allow-child-process<\/code> para especificar quais recursos s\u00e3o acess\u00edveis. Para ativar esses sinalizadores, os desenvolvedores precisam utilizar o sinalizador <code>--experimental-permission<\/code> em combina\u00e7\u00e3o com as permiss\u00f5es necess\u00e1rias.<\/p>\n<p>Aqui est\u00e1 um exemplo de como usar o modelo de permiss\u00e3o para permitir o acesso de leitura e grava\u00e7\u00e3o a todo o sistema de arquivos:<\/p>\n<pre><code class=\"language-bash\">$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js<\/code><\/pre>\n<p>Os desenvolvedores tamb\u00e9m podem usar o Modelo de Permiss\u00e3o para especificar o acesso a pastas e arquivos espec\u00edficos. Por exemplo, o comando a seguir permite o acesso de grava\u00e7\u00e3o \u00e0 pasta <strong>\/tmp\/<\/strong>:<\/p>\n<pre><code class=\"language-bash\">$ node --experimental-permission --allow-fs-write=\/tmp\/ --allow-fs-read=\/home\/index.js index.js<\/code><\/pre>\n<p>Um benef\u00edcio significativo do Modelo de Permiss\u00e3o \u00e9 a capacidade de exercer um controle mais granular sobre o acesso ao sistema de arquivos. Por exemplo, os desenvolvedores podem especificar caminhos e padr\u00f5es wildcard para permitir o acesso a pastas ou arquivos espec\u00edficos.<\/p>\n<pre><code class=\"language-bash\">$ node --experimental-permission --allow-fs-read=\/home\/user\/* index.js<\/code><\/pre>\n<p>O comando acima concede acesso de leitura a todas as pastas no diret\u00f3rio <strong>\/home\/user\/<\/strong>.<\/p>\n<p>A propriedade de permiss\u00e3o do objeto de processo tamb\u00e9m pode ser usada para verificar se uma permiss\u00e3o espec\u00edfica foi concedida em tempo de execu\u00e7\u00e3o. Por exemplo, se voc\u00ea quiser verificar se o processo do Node.js tem acesso de leitura a uma pasta espec\u00edfica, <strong>\/home\/user\/documents<\/strong>, poder\u00e1 usar o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">if (process.permission.has('fs.read', '\/home\/user\/documents')) {\n  console.log('Read access granted to \/home\/user\/documents');\n} else {\n  console.log('Read access not granted to \/home\/user\/documents');\n}<\/code><\/pre>\n<p>Ao usar o modelo de permiss\u00e3o, voc\u00ea tem um controle mais refinado sobre o acesso ao sistema de arquivos dos processos do Node.js, o que pode levar a uma melhor seguran\u00e7a e a uma utiliza\u00e7\u00e3o mais eficiente dos recursos.<\/p>\n<p>\u00c9 fundamental observar que o modelo de permiss\u00e3o ainda \u00e9 experimental e pode ser alterado em vers\u00f5es futuras do Node.js. \u00c9 aconselh\u00e1vel que voc\u00ea se mantenha atualizado com a <a href=\"https:\/\/nodejs.org\/api\/permissions.html#process-based-permissions\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o do modelo de permiss\u00e3o<\/a> e tenha cuidado ao usar esses recursos experimentais.<\/p>\n<h3>Executor de testes est\u00e1vel<\/h3>\n<p>O Node.js v20 inclui uma vers\u00e3o est\u00e1vel do m\u00f3dulo test_runner que permite aos desenvolvedores criar e executar conjuntos de testes <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a> de forma r\u00e1pida e f\u00e1cil, sem instalar depend\u00eancias adicionais.<\/p>\n<p>O executor de testes est\u00e1vel agora inclui v\u00e1rios blocos de constru\u00e7\u00e3o, como <code>describe<\/code>, <code>it<\/code>\/<code>test<\/code>, e hooks, para criar e estruturar arquivos de teste, juntamente com mocking, modo de observa\u00e7\u00e3o e a capacidade de executar v\u00e1rios arquivos de teste em paralelo usando o comando <code>node --test<\/code>.<\/p>\n<p>Aqui est\u00e1 um exemplo de como usar o executor de testes:<\/p>\n<pre><code class=\"language-js\">import { test, mock } from 'node:test';\nimport assert from 'node:assert';\nimport fs from 'node:fs';\n\nmock.method(fs, 'readFile', async () =&gt; \"Hello World\");\ntest('synchronous passing test', async (t) =&gt; {\n  \/\/ This test passes because it does not throw an exception.\n  assert.strictEqual(await fs.readFile('a.txt'), \"Hello World\");\n});<\/code><\/pre>\n<p>Oferece relat\u00f3rios de teste configur\u00e1veis e personalizados por meio da op\u00e7\u00e3o <code>--test-reporter<\/code>, cobertura de teste experimental por meio da op\u00e7\u00e3o <code>--experimental-test-coverage<\/code> e capacidades de simula\u00e7\u00e3o.<\/p>\n<p>Embora n\u00e3o tenha a inten\u00e7\u00e3o de substituir estruturas de teste com recursos completos, como <a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jest<\/a> ou <a href=\"https:\/\/mochajs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mocha<\/a>, o executor de testes est\u00e1vel oferece uma maneira simples e r\u00e1pida de criar conjuntos de testes. Ele foi aprimorado significativamente desde sua introdu\u00e7\u00e3o no Node.js v19 e, gra\u00e7as aos testes e ao feedback dos usu\u00e1rios finais, agora foi marcado como est\u00e1vel no Node.js v20.<\/p>\n<p>Mais informa\u00e7\u00f5es podem ser encontradas nesta <a href=\"https:\/\/github.com\/nodejs\/node\/pull\/46983\" target=\"_blank\" rel=\"noopener noreferrer\">solicita\u00e7\u00e3o pull request<\/a>.<\/p>\n<h3>Mecanismo V8 JavaScript atualizado para 11.3<\/h3>\n<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-depurar-codigo-no-node-js\/#use-the-v8-inspector\">mecanismo V8 JavaScript<\/a>, que alimenta o Node.js, foi atualizado para a vers\u00e3o 11.3 no Node.js v20. Com isso, voc\u00ea obt\u00e9m melhor desempenho e apresenta novos recursos de linguagem. Alguns dos novos recursos dessa atualiza\u00e7\u00e3o incluem:<\/p>\n<ul>\n<li><code>String.prototype.isWellFormed<\/code> e <code>toWellFormed<\/code>: Esses m\u00e9todos s\u00e3o particularmente \u00fateis para garantir o formato correto de string. Isso ajuda a garantir que a entrada de string do usu\u00e1rio esteja no formato UTF-16 correto, reduzindo erros na era dos emojis.<\/li>\n<li>M\u00e9todos que alteram Array e TypedArray por c\u00f3pia: Isso pode servir para criar c\u00f3pias modificadas de arrays sem afetar os dados originais, o que \u00e9 especialmente relevante em casos em que \u00e9 necess\u00e1rio preservar os dados originais para compara\u00e7\u00e3o ou outros fins.<\/li>\n<li><code>ArrayBuffer<\/code> redimension\u00e1vel e\u00a0<code>SharedArrayBuffer<\/code> expans\u00edvel: oferece maior flexibilidade, permitindo uma aloca\u00e7\u00e3o de mem\u00f3ria mais eficiente.<\/li>\n<li>RegExp v flag com nota\u00e7\u00e3o de conjunto e propriedades de strings: adiciona funcionalidade para express\u00f5es regulares.<\/li>\n<li>WebAssembly tail call: oferece uma maneira de otimizar determinados tipos de chamadas de fun\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Essas atualiza\u00e7\u00f5es demonstram o compromisso cont\u00ednuo da comunidade de desenvolvimento do Node.js com o aprimoramento do desempenho e da funcionalidade.<\/p>\n<h3>Import.meta.resolve() s\u00edncrono<\/h3>\n<p>No Node.js v20, o <code>import.meta.resolve()<\/code> foi introduzido, que facilita a escrita de scripts que n\u00e3o s\u00e3o sens\u00edveis \u00e0 localiza\u00e7\u00e3o. Essa fun\u00e7\u00e3o retorna de forma s\u00edncrona, semelhante ao comportamento do navegador, permitindo uma execu\u00e7\u00e3o mais eficiente.<\/p>\n<p>Os hooks de resolu\u00e7\u00e3o do usu\u00e1rio ainda podem ser definidos como uma fun\u00e7\u00e3o async, mas o <code>import.meta.resolve()<\/code> ainda retornar\u00e1 sincronamente para o c\u00f3digo do aplicativo, mesmo se hooks de resolu\u00e7\u00e3o async estiverem carregados.<\/p>\n<p>O comportamento s\u00edncrono do <code>import.meta.resolve()<\/code> permite uma execu\u00e7\u00e3o de c\u00f3digo mais eficiente, especialmente ao lidar com grandes quantidades de dados. Como autor, voc\u00ea pode definir as hooks de resolu\u00e7\u00e3o como fun\u00e7\u00f5es ass\u00edncronas ou s\u00edncronas, dependendo de sua prefer\u00eancia. O c\u00f3digo do aplicativo ainda ser\u00e1 executado de forma s\u00edncrona, independentemente de haver hooks de resolu\u00e7\u00e3o ass\u00edncronos carregados.<\/p>\n<h3>Experimental Single Executable Applications (SEA)<\/h3>\n<p>Experimental Single Executable Applications (SEA) \u00e9 um novo recurso introduzido no Node.js v20 que permite agrupar seu aplicativo com o bin\u00e1rio do Node.js, permitindo que os usu\u00e1rios finais distribuam e executem como um \u00fanico arquivo execut\u00e1vel.<\/p>\n<p>Isso tem sido um pedido de longa data da comunidade, e a equipe tem refinado a abordagem ao longo do \u00faltimo ano.<\/p>\n<p>No Node.js v20, construir um aplicativo execut\u00e1vel \u00fanico requer a inje\u00e7\u00e3o de um blob preparado pelo Node.js a partir de uma configura\u00e7\u00e3o JSON em vez de injetar o arquivo JS bruto.<\/p>\n<p>Um blob \u00e9 um arquivo que cont\u00e9m dados bin\u00e1rios, neste caso, preparado pelo Node.js, sendo injetado no bin\u00e1rio. Essa mudan\u00e7a foi feita para permitir a incorpora\u00e7\u00e3o de v\u00e1rios recursos coexistentes no SEA, abrindo novos casos de uso.<\/p>\n<p>Aqui est\u00e1 um exemplo de um arquivo <strong>sea-config.json<\/strong>:<\/p>\n<pre><code class=\"language-js\">{ \n      \"main\": \"myscript.js\", \n      \"output\": \"sea-prep.blob\" \n}<\/code><\/pre>\n<p>Quando executado com o comando <code>node --experimental-sea-config sea-config.json<\/code>, o blob \u00e9 gravado no arquivo <strong>sea-prep.blob<\/strong>, que pode ent\u00e3o ser injetado no bin\u00e1rio.<\/p>\n<p>O recurso SEA permite que os desenvolvedores distribuam <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">aplicativos Node.js<\/a> sem exigir que os usu\u00e1rios instalem o <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-instalar-o-node-js\/\">Node.js<\/a>. A funcionalidade foi criada por <a href=\"https:\/\/github.com\/RaisinTen\">Darshan Sen<\/a>, que ganhou o pr\u00eamio de Contribui\u00e7\u00e3o Excepcional de um Novato como parte do JavaScriptLandia Awards no OpenJS World.<\/p>\n<p>A Microsoft, membro da OpenJS Foundation, est\u00e1 investigando esse recurso como uma forma de reduzir os ataques de vetor e capacitar a arquitetura do Node.js para uma melhor experi\u00eancia. Embora o recurso SEA ainda seja experimental, ele representa um novo e empolgante desenvolvimento para a comunidade do Node.js.<\/p>\n<h3>Desempenho<\/h3>\n<p>O Node.js v20 vem com melhorias significativas em seu tempo de execu\u00e7\u00e3o, com um foco renovado no desempenho pela rec\u00e9m-formada equipe de desempenho do Node.js. As melhorias incluem otimiza\u00e7\u00f5es para as partes principais do tempo de execu\u00e7\u00e3o, como URL, <code>fetch()<\/code> e <code>EventTarget<\/code>.<\/p>\n<p>Uma das melhorias not\u00e1veis \u00e9 a redu\u00e7\u00e3o do custo de inicializa\u00e7\u00e3o do <code>EventTarget<\/code>, que foi cortado pela metade, resultando em acesso mais r\u00e1pido a todos os subsistemas que o utilizam. Al\u00e9m disso, as chamadas V8 Fast API foram utilizadas para melhorar o desempenho em APIs como <code>URL.canParse()<\/code> e timers.<\/p>\n<p>Outra altera\u00e7\u00e3o espec\u00edfica \u00e9 a inclus\u00e3o da vers\u00e3o atualizada 2.0 do Ada, um analisador de URL r\u00e1pido e compat\u00edvel com as especifica\u00e7\u00f5es, escrito em C++.<\/p>\n\n<h2>Resumo<\/h2>\n<p>Neste artigo, voc\u00ea aprendeu alguns dos principais recursos (experimentais e est\u00e1veis) e melhorias que o Node.js v20 traz, como melhorias no mecanismo JavaScript V8, desempenho, executor de testes e introdu\u00e7\u00e3o do modelo de permiss\u00e3o experimental e aplicativos de execu\u00e7\u00e3o \u00fanica.<\/p>\n<p>\u00c9 importante saber que o Node.js v14 chegar\u00e1 ao fim da vida \u00fatil em abril de 2023, portanto, \u00e9 aconselh\u00e1vel que voc\u00ea comece a planejar a atualiza\u00e7\u00e3o para o Node.js v18 (LTS) ou para o vNode.js 20 (que em breve ser\u00e1 LTS).<\/p>\n<p>Voc\u00ea gostaria de experimentar a vers\u00e3o mais recente do Node.js? Voc\u00ea pode fazer isso implantando seu <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicativo Node.js na Kinsta<\/a> e ganhar seus primeiros $20 conosco. J\u00e1 oferecemos suporte ao Node.js v20, o que significa que voc\u00ea pode testar seus novos recursos e capacidades a partir de hoje.<\/p>\n<p>Agora \u00e9 a sua vez de compartilhar! Quais recursos ou melhorias voc\u00ea achou mais interessantes no Node.js v20? H\u00e1 alguma atualiza\u00e7\u00e3o significativa que possamos ter deixado passar? Por favor, deixe sua opini\u00e3o nos coment\u00e1rios abaixo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Node.js v20 j\u00e1 est\u00e1 dispon\u00edvel! Em 18 de abril de 2023, ele se tornou p\u00fablico e agora pode ser usado por todos. Com essa vers\u00e3o, &#8230;<\/p>\n","protected":false},"author":287,"featured_media":59201,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[992],"class_list":["post-59200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)\" \/>\n<meta property=\"og:description\" content=\"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-02T14:42:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T07:38:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"6084\" \/>\n\t<meta property=\"og:image:height\" content=\"3042\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)\",\"datePublished\":\"2023-05-02T14:42:04+00:00\",\"dateModified\":\"2023-08-22T07:38:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\"},\"wordCount\":2006,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\",\"name\":\"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\",\"datePublished\":\"2023-05-02T14:42:04+00:00\",\"dateModified\":\"2023-08-22T07:38:59+00:00\",\"description\":\"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg\",\"width\":6084,\"height\":3042},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3) - Kinsta\u00ae","description":"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/","og_locale":"pt_PT","og_type":"article","og_title":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)","og_description":"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3","og_url":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-05-02T14:42:04+00:00","article_modified_time":"2023-08-22T07:38:59+00:00","og_image":[{"width":6084,"height":3042,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)","datePublished":"2023-05-02T14:42:04+00:00","dateModified":"2023-08-22T07:38:59+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/"},"wordCount":2006,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/","url":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/","name":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","datePublished":"2023-05-02T14:42:04+00:00","dateModified":"2023-08-22T07:38:59+00:00","description":"O Node.js v20 agora est\u00e1 dispon\u00edvel. Confira as novidades desta vers\u00e3o, incluindo Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/node-js-20\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/node-js-20.jpg","width":6084,"height":3042},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/pt\/topicos\/node-js\/"},{"@type":"ListItem","position":3,"name":"O Que H\u00e1 de Novo no Node.js v20 (Executor de Teste, Modelo de Permiss\u00e3o, SEA, Mecanismo V8 JS 11.3)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=59200"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59200\/revisions"}],"predecessor-version":[{"id":59408,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59200\/revisions\/59408"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59200\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/59201"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=59200"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=59200"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=59200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}