林秀琴 發表於 2023-9-21 08:57:00

Node.js 20 —— 几个令人大开眼界的特性

<blockquote>
<p>摘要:本文由葡萄城技术团队于博客园发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。</p>
</blockquote>
<p><strong>前言:欢迎来到 Node.js 20</strong></p>
<p>Node.js 20 已经发布,带来了创新和激动人心的新时代。这个开创性的版本于2023年4月18日首次亮相,并将在2023年10月发布长期支持(LTS)版本,并且将持续支持至2026年4月,下面小编就为大家介绍一下Node.js20的几个新特性:</p>
<p><strong>1.Node.js 权限访问</strong></p>
<p>Node.js 20 正式推出了权限模型,这是 Rafael Gonzaga 提供的一项实验性功能,可以在程序运行时限制对特定资源的访问。</p>
<p>要使用这个强大的功能,只需启用 --experimental-permission 标志,例如:</p>
<pre><code class="language-bash">node --experimental-permissions myApp.js
</code></pre>
<p>这将限制所有可用权限的访问,这样就可以确保应用程序远离任何不受欢迎的入侵者。</p>
<p><strong>文件读写系统</strong></p>
<p>要允许访问文件系统,请使用--allow-fs-read和 --allow-fs-write标志:</p>
<pre><code class="language-bash">$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Hello world!
(node:19836) ExperimentalWarning: Permission is an experimental feature
(Use `node --trace-warnings ...` to show where the warning was created)
</code></pre>
<p>下面是具体指令的含义:</p>
<ul>
<li>--allow-fs-read=*- 它将允许所有FileSystemRead操作。</li>
<li>--allow-fs-write=*- 它将允许所有FileSystemWrite操作。</li>
<li>--allow-fs-write=/tmp/- 它将允许FileSystemWrite访问该/tmp/ 文件夹。</li>
<li>--allow-fs-read=/tmp/,/home/.gitignore- 它允许FileSystemRead访问/tmp/文件夹<strong>和</strong>路径/home/.gitignore。</li>
</ul>
<p><strong>2.自定义 ESM 加载器钩子</strong></p>
<p>Node.js 20通过加载器提供的自定义钩子</p>
<p>(--experimental-loader=./mr.mjs)在专用线程上运行,确保一切都保持井然有序。</p>
<p>以下是如何使用自定义加载器的快速示例:</p>
<p>loading.mjs</p>
<pre><code class="language-javascript">export async function resolve(specifier, parentModuleURL, defaultResolve) {
console.log("Resolving:", specifier);
return defaultResolve(specifier, parentModuleURL);
}
</code></pre>
<pre><code class="language-javascript">export async function load(url, defaultLoad) {
console.log("Loading:", url);
return defaultLoad(url);
}
</code></pre>
<p>index.js</p>
<pre><code class="language-javascript">console.log("Hello, Node.js 20!");
</code></pre>
<p>cmd</p>
<pre><code class="language-bash">node --experimental-loader=./loader.mjs main.js
</code></pre>
<p>这个自定义加载器将记录每个模块的解析和加载过程。</p>
<p><strong>3.同步的 import.meta.resolve()</strong></p>
<p>为了跟上浏览器行为,现在 import.meta.resolve 函数返回同步。但仍可以根据需要自定定义加载器解析钩子为异步或同步函数。</p>
<p>以下是一个快速示例,展示它是如何工作的:</p>
<p>module.mjs</p>
<pre><code class="language-javascript">(async () =&gt; {
const resolvedURL = import.meta.resolve('./otherModule.mjs');
console.log("Resolved URL:", resolvedURL);
</code></pre>
<pre><code class="language-javascript">const asyncResolvedURL = await import.meta.resolve('./otherModule.mjs');
console.log("Async resolved URL:", asyncResolvedURL);
})();
</code></pre>
<p>这个示例演示了 import.meta.resolve 函数的同步和异步用法。</p>
<p><strong>4.V8 引擎升级:释放野兽!</strong></p>
<p>以下是一些V8 引擎新功能的快速概述:</p>
<ul>
<li><strong>发挥正则表达式的无限潜力</strong>:使用设置符号+字符串属性的 RegExp v 标志,开启更灵活、更富表现力的语法!</li>
<li><strong>动态调整内存大小,优化性能尽在掌握</strong>:可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer,让内存管理达到前所未有的境界!</li>
<li><strong>安全而可预测的数组操作方法</strong>:复制更改 Array 和 TypedArray 的方式,让代码既安全又可控,不修改原始数据!</li>
<li><strong>打造格式良好的 Unicode 字符串</strong>:通过 String.prototype.isWellFormed 和 toWellFormed,验证并转换字符串为完美的Unicode格式!</li>
<li><strong>告别堆栈溢出,迎接高效递归</strong>:WebAssembly 尾调带来无限递归的可能性,让堆栈溢出成为历史!</li>
</ul>
<p><strong>5.稳定的测试运行器</strong></p>
<p>Node.js 20 中的 test_runner 模块已经升级并标记为稳定版本,这意味着它已经准备好投入实际应用了。</p>
<p>下面是一个简单的示例:</p>
<pre><code class="language-javascript">import { test, mock } from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';

mock.method(fs, 'readFile', async () =&gt; "Hello World");
test('synchronous passing test', async (t) =&gt; {
// This test passes because it does not throw an exception.
assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
});
</code></pre>
<p><strong>6.性能增强:为应用程序提速!</strong></p>
<p>Node.js 20 注重性能,提供了一些出色的增强功能,将使应用程序运行更加流畅和快速。以下是一些亮点:</p>
<ul>
<li><strong>事件目标初始化成本降低:</strong>初始化现在只需要一半的时间,使应用程序更加迅捷。</li>
<li><strong>V8 快速 API 调用:</strong>在诸如 URL.canParse() 和定时器等 API 中享受改进的性能。</li>
</ul>
<p><strong>7.Ada 2.0:新一代 URL 解析器巨星</strong></p>
<p>Ada 2.0是用 C++ 编写的最新和最棒的 URL 解析器版本。这个工具为 URL 解析性能带来了显著的改进,使的应用程序比以往更加高效。<br>
以下是 Ada 2.0 如何使用的一个简单示例:</p>
<pre><code class="language-javascript">import { domainToASCII, domainToUnicode } from 'node:url';
</code></pre>
<pre><code class="language-javascript">const asciiDomain = domainToASCII('example.com');
console.log("ASCII Domain:", asciiDomain);
const unicodeDomain = domainToUnicode('xn--exmple-cua.com');
console.log("Unicode Domain:", unicodeDomain);
</code></pre>
<p>以上代码演示了如何使用 Ada 2.0 将域名转换为其 ASCII 和 Unicode 表示形式。</p>
<p><strong>8.准备 SEAs:出色的 Blob 单一可执行应用程序。</strong></p>
<p>Node.js 20 引入了一种新的构建单一可执行应用程序(SEAs)的方式,通过将由 Node.js 从 JSON 配置中准备的 Blob 注入其中。这允许将多个共存的资源嵌入到 SEAs 中。</p>
<p>它的工作原理如下:</p>
<pre><code class="language-javascript">{
"main": "hello.js",
"output": "prep.blob"
}
</code></pre>
<pre><code class="language-bash">node --experimental-sea-config sea-config.json
</code></pre>
<p>这将创建一个 prep.blob文件,其中包含了 SEA 所需的资源。</p>
<p><strong>9.网络加密 API</strong></p>
<p>在Node.js 20 中 Web Crypto API 函数参数的强制转换和验证遵循 WebIDL 定义,就像 Web Crypto API 的其他实现一样。</p>
<p>这提高了与其他 JavaScript 环境的互操作性,在每个环境都可以友好运行!</p>
<p><strong>10.其他变化的地方</strong></p>
<p>除了我们介绍的所有出色功能之外,Node.js 20 还包括一些其他不错的更新,以增强开发体验:</p>
<ul>
<li><strong>更好的 TypeScript 支持:</strong>使用 TypeScript 编写更干净、更高效的代码。</li>
<li><strong>改进的 TLS 1.3 支持:</strong>享受更强大的加密来保障安全通信。</li>
<li><strong>更快的启动时间:</strong>应用程序启动速度更快。</li>
<li><strong>有效的错误处理:</strong>优雅地处理错误,确保应用程序平稳运行。</li>
<li><strong>改进的调试体验:</strong>轻松解决那些讨厌的错误。</li>
</ul>
<p><strong>总结</strong></p>
<p>这就是 Node.js 20 带来的令人大开眼界的创新点的介绍,如果各位想获取更多的详细信息,请访问 Node.js 20官网。</p>
<p><strong>扩展链接:</strong></p>
<p>如何在前端系统中使用甘特图</p>
<p>窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器</p>
<p>探秘移动端BI:发展历程与应用前景解析</p>


</div>
<div id="MySignature" role="contentinfo">
    <hr>
<br>
<p style="font-size: 16px; font-family: 微软雅黑, 黑体, Arial; color: #000">本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网</p>
<!--p style="font-size: 16px; font-family: 微软雅黑, 黑体, Arial; color: #000">了解企业级低代码开发平台,请前往活字格
</p><p style="font-size: 16px; font-family: 微软雅黑, 黑体, Arial; color: #000">了解可嵌入您系统的在线 Excel,请前往SpreadJS纯前端表格控件</p>
<p style="font-size: 16px; font-family: 微软雅黑, 黑体, Arial; color: #000">了解嵌入式的商业智能和报表软件,请前往Wyn Enterprise
</p-->

<br><br><br>
来源:https://www.cnblogs.com/powertoolsteam/p/17714604.html
頁: [1]
查看完整版本: Node.js 20 —— 几个令人大开眼界的特性