Deno JavaScript 平台與 NPM 模組相容

Deno 1.28 已發布,這是一個用於沙箱 JavaScript 和 TypeScript 應用程式的框架,可用於建立伺服器端處理程序。 該平台由 Node.js 的創建者 Ryan Dahl 開發。 與 Node.js 一樣,Deno 使用 V8 JavaScript 引擎,基於 Chromium 的瀏覽器也使用該引擎。 同時,Deno 並不是 Node.js 的分支,而是從頭開始創建的新專案。 此專案代碼是根據 MIT 許可證分發的。 建置適用於 Linux、Windows 和 macOS。

Deno 專案的創建是為了為使用者提供更安全的環境並消除 Node.js 架構中的概念錯誤。 為了提高安全性,V8 引擎是用 Rust 編寫的,這避免了低階記憶體操作引起的許多漏洞。 為了以非阻塞模式處理請求,使用了同樣以 Rust 編寫的 Tokio 平台。 Tokio 可讓您建立基於事件驅動架構的高效能應用程序,支援多執行緒並以非同步方式處理網路請求。

新版本的關鍵變化是與 NPM 儲存庫中託管的套件的兼容性穩定,這使得 Deno 可以使用為 Node.js 平台創建的超過 1.3 萬個模組。 例如,基於 Deno 的應用程式現在可以使用 Prisma、Mongoose 和 MySQL 等持久性資料存取模組,以及 React 和 Vue 等前端框架。 有些 NPM 模組仍然與 Deno 不相容,例如由於綁定到 Node.js 特定的環境元素(例如 package.json 檔案)。 目前還無法對 NPM 模組使用「denocompile」指令。 未來的版本計劃解決這些不相容性和限制。

對 Deno 之前使用的 ECMAScript 模組系統和 Web API 模型的支援保留在同一級別,並且使用 Deno 熟悉的基於 URL 的載入方案來導入 NPM 模組。 要存取 NPM 模組,有一個特殊的 URL 前綴“npm:”,可以像常規 Deno 模組一樣使用它。 例如,要匯入 NPM 模組,您可以指定 'import { chalk } from "npm:chalk@5";',並從命令列執行 NPM 腳本 - "deno run --allow-env --allow -閱讀npm:create -vite-extra。”

在 Deno 中使用 NPM 套件比在 Node.js 中容易得多,因為不需要預先安裝模組(模組在應用程式首次啟動時安裝),沒有 package.json 文件,也沒有預設的 node_modules目錄(模組快取在共享目錄中,但可以使用“--node-modules-dir”選項返回舊行為)。

基於 NPM 的應用程式保留使用 Deno 的存取控制、隔離和安全敏感進階功能的能力。 為了應對透過可疑依賴項進行的攻擊,Deno 預設會阻止所有從依賴項取得系統存取權限的嘗試,並顯示有關偵測到的問題的警告。 例如,當模組嘗試取得 /usr/bin/ 的寫入存取權時,將顯示此動作的確認請求: deno run npm:install-malware ⚠️ ┌ Deno 要求對 /usr/bin/ 的寫入存取權。 ├ 由 `install-malware` 請求 ├ 使用 --allow-write 再次運行以繞過此提示。 └ 允許? [y/n](y = 是,允許;n = 否,拒絕)>

新版本中的非 NPM 改進包括將 V8 引擎更新到版本 10.9、自動檢測帶鎖的檔案、穩定 Deno.bench()、Deno.gid()、Deno.networkInterfaces()、Deno.systemMemoryInfo()和Deno API .uid(),新增新的不穩定API Deno.Command() 用於執行指令(Deno.spawn、Deno.spawnSync 和Deno.spawnChild 的通用替代品)。

Deno 的主要特點:

  • 面向安全的預設配置。 預設情況下停用文件訪問、網路和對環境變數的訪問,必須明確啟用。 應用程式預設運行在隔離的沙箱環境中,在未授予明確權限的情況下無法存取系統功能;
  • 除了 JavaScript 之外,也內建了 TypeScript 的支援。 對於類型檢查和 JavaScript 生成,使用標準的 TypeScript 編譯器,這導致與 V8 中的 JavaScript 解析相比效能有所下降;
  • 運行時以單一獨立可執行檔(“deno”)的形式出現。 要使用 Deno 運行應用程序,您只需為您的平台下載一個可執行文件,大小約為 30 MB,該文件沒有外部依賴項,不需要在系統上進行任何特殊安裝。 而且,deno 不是一個單體應用程序,而是 Rust crate 套件(deno_core、rusty_v8)的集合,可以單獨使用;
  • 啟動程式以及載入模組時,可以使用 URL 尋址。 例如,要執行welcome.js程序,您可以使用指令「deno https://deno.land/std/examples/welcome.js」。 來自外部資源的程式碼被下載並快取在本機系統上,但永遠不會自動更新(更新需要使用“--reload”標誌明確運行應用程式);
  • 在應用程式中透過HTTP高效處理網路請求;該平台專為創建高效能網路應用程式而設計;
  • 能夠建立可以在 Deno 和常規 Web 瀏覽器中執行的通用 Web 應用程式;
  • 存在一組標準模組,其使用不需要綁定到外部相依性。 標準集合中的模組已經過額外的審核和相容性測試;
  • 除了執行時間之外,Deno 平台還充當套件管理器,可讓您透過程式碼內的 URL 存取模組。 例如,要載入模組,您可以在程式碼中指定“import * as log from “https://deno.land/std/log/mod.ts”。 透過 URL 從外部伺服器下載的檔案會被快取。 綁定到模組版本是透過在 URL 中指定版本號來確定的,例如,「https://unpkg.com/[電子郵件保護]/dist/liltest.js";
  • 該結構包括一個整合的依賴性檢查系統(“deno info”命令)和一個程式碼格式化實用程式(deno fmt);
  • 所有應用程式腳本都可以合併到一個 JavaScript 檔案。

來源: opennet.ru

添加評論