Node.js 20 —— 幾個令人大開眼界的特性

前言:歡迎來到 Node.js 20

Node.js 20 已經發布,帶來了創新和激動人心的新時代。這個開創性的版本於2023年4月18日首次亮相,並將在2023年10月發佈長期支持(LTS)版本,並且將持續支持至2026年4月,下面小編就爲大家介紹一下Node.js20的幾個新特性:

1.Node.js 權限訪問

Node.js 20 正式推出了權限模型,這是 Rafael Gonzaga 提供的一項實驗性功能,可以在程序運行時限制對特定資源的訪問。

要使用這個強大的功能,只需啓用 --experimental-permission 標誌,例如:

node --experimental-permissions myApp.js

這將限制所有可用權限的訪問,這樣就可以確保應用程序遠離任何不受歡迎的入侵者。

文件讀寫系統

要允許訪問文件系統,請使用--allow-fs-read和 --allow-fs-write標誌:

$ 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)

下面是具體指令的含義:

  • --allow-fs-read=*- 它將允許所有FileSystemRead操作。
  • --allow-fs-write=*- 它將允許所有FileSystemWrite操作。
  • --allow-fs-write=/tmp/- 它將允許FileSystemWrite訪問該/tmp/ 文件夾。
  • --allow-fs-read=/tmp/,/home/.gitignore- 它允許FileSystemRead訪問/tmp/文件夾路徑/home/.gitignore。

2.自定義 ESM 加載器鉤子

Node.js 20通過加載器提供的自定義鉤子

(--experimental-loader=./mr.mjs)在專用線程上運行,確保一切都保持井然有序。

以下是如何使用自定義加載器的快速示例:

loading.mjs

export async function resolve(specifier, parentModuleURL, defaultResolve) {
  console.log("Resolving:", specifier);
  return defaultResolve(specifier, parentModuleURL);
 }
export async function load(url, defaultLoad) {
  console.log("Loading:", url);
  return defaultLoad(url);
 }

index.js

console.log("Hello, Node.js 20!");

cmd

node --experimental-loader=./loader.mjs main.js

這個自定義加載器將記錄每個模塊的解析和加載過程。

3.同步的 import.meta.resolve()

爲了跟上瀏覽器行爲,現在 import.meta.resolve 函數返回同步。但仍可以根據需要自定定義加載器解析鉤子爲異步或同步函數。

以下是一個快速示例,展示它是如何工作的:

module.mjs

(async () => {
  const resolvedURL = import.meta.resolve('./otherModule.mjs');
  console.log("Resolved URL:", resolvedURL);
const asyncResolvedURL = await import.meta.resolve('./otherModule.mjs');
  console.log("Async resolved URL:", asyncResolvedURL);
 })();

這個示例演示了 import.meta.resolve 函數的同步和異步用法。

4.V8 引擎升級:釋放野獸!

以下是一些V8 引擎新功能的快速概述:

  • 發揮正則表達式的無限潛力:使用設置符號+字符串屬性的 RegExp v 標誌,開啓更靈活、更富表現力的語法!
  • 動態調整內存大小,優化性能盡在掌握:可調整大小的 ArrayBuffer 和可增長的 SharedArrayBuffer,讓內存管理達到前所未有的境界!
  • 安全而可預測的數組操作方法:複製更改 Array 和 TypedArray 的方式,讓代碼既安全又可控,不修改原始數據!
  • 打造格式良好的 Unicode 字符串:通過 String.prototype.isWellFormed 和 toWellFormed,驗證並轉換字符串爲完美的Unicode格式!
  • 告別堆棧溢出,迎接高效遞歸:WebAssembly 尾調帶來無限遞歸的可能性,讓堆棧溢出成爲歷史!

5.穩定的測試運行器

Node.js 20 中的 test_runner 模塊已經升級並標記爲穩定版本,這意味着它已經準備好投入實際應用了。

下面是一個簡單的示例:

import { test, mock } from 'node:test';
 import assert from 'node:assert';
 import fs from 'node:fs';

 mock.method(fs, 'readFile', async () => "Hello World");
 test('synchronous passing test', async (t) => {
  // This test passes because it does not throw an exception.
  assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
 });

6.性能增強:爲應用程序提速!

Node.js 20 注重性能,提供了一些出色的增強功能,將使應用程序運行更加流暢和快速。以下是一些亮點:

  • **事件目標初始化成本降低:**初始化現在只需要一半的時間,使應用程序更加迅捷。
  • **V8 快速 API 調用:**在諸如 URL.canParse() 和定時器等 API 中享受改進的性能。

7.Ada 2.0:新一代 URL 解析器巨星

Ada 2.0是用 C++ 編寫的最新和最棒的 URL 解析器版本。這個工具爲 URL 解析性能帶來了顯著的改進,使的應用程序比以往更加高效。
以下是 Ada 2.0 如何使用的一個簡單示例:

import { domainToASCII, domainToUnicode } from 'node:url';
const asciiDomain = domainToASCII('example.com');
 console.log("ASCII Domain:", asciiDomain);
 const unicodeDomain = domainToUnicode('xn--exmple-cua.com');
 console.log("Unicode Domain:", unicodeDomain);

以上代碼演示瞭如何使用 Ada 2.0 將域名轉換爲其 ASCII 和 Unicode 表示形式。

8.準備 SEAs:出色的 Blob 單一可執行應用程序。

Node.js 20 引入了一種新的構建單一可執行應用程序(SEAs)的方式,通過將由 Node.js 從 JSON 配置中準備的 Blob 注入其中。這允許將多個共存的資源嵌入到 SEAs 中。

它的工作原理如下:

{
  "main": "hello.js",
  "output": "prep.blob"
 }
node --experimental-sea-config sea-config.json

這將創建一個 prep.blob文件,其中包含了 SEA 所需的資源。

9.網絡加密 API

在Node.js 20 中 Web Crypto API 函數參數的強制轉換和驗證遵循 WebIDL 定義,就像 Web Crypto API 的其他實現一樣。

這提高了與其他 JavaScript 環境的互操作性,在每個環境都可以友好運行!

10.其他變化的地方

除了我們介紹的所有出色功能之外,Node.js 20 還包括一些其他不錯的更新,以增強開發體驗:

  • 更好的 TypeScript 支持:使用 TypeScript 編寫更乾淨、更高效的代碼。
  • 改進的 TLS 1.3 支持:享受更強大的加密來保障安全通信。
  • 更快的啓動時間:應用程序啓動速度更快。
  • 有效的錯誤處理:優雅地處理錯誤,確保應用程序平穩運行。
  • 改進的調試體驗:輕鬆解決那些討厭的錯誤。

總結

這就是 Node.js 20 帶來的令人大開眼界的創新點的介紹,如果各位想獲取更多的詳細信息,請訪問 Node.js 20官網

擴展鏈接:

如何在前端系統中使用甘特圖

窗口函數大揭祕!輕鬆計算數據累計佔比,玩轉數據分析的絕佳利器

探祕移動端BI:發展歷程與應用前景解析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章