Electron 接 Windows 原生 API 少寫一層橋,微軟新工具慳到咩功夫?
Tech News

Electron 接 Windows 原生 API 少寫一層橋,微軟新工具慳到咩功夫?

圖片:via iThome — https://www.ithome.com.tw/news/177673
TechLab 編輯部(譯)·

WinRT projection 減輕橋接維護,但仍有限制同 Windows 專用設定

微軟幫 Node.js 同 Windows Runtime 之間鋪咗條新路。iThome 報道,公開預覽中嘅動態 WinRT projection,畀 Electron 同一般 Node.js 程式用 JavaScript 或 TypeScript 呼叫部分 Windows API。最實際嘅價值係少養一批專用橋接程式,尤其 app 只想加檔案選擇器、通知、剪貼簿或者裝置端 AI,開發團隊未必要為幾項功能額外開一套 C++ 或 C# 工程。

點解 Electron 一直要多行一步

Electron 個介面雖然用網頁技術寫,背後仍係 Chromium 加 Node.js。當 app 想用 Windows 獨有功能,Node.js 本身冇相應介面,常見做法係寫 native addon,再經 Node-API、C++ 或 C# 接落 WinRT。麻煩唔止係多寫幾個函式:團隊仲要準備 MSVC、Windows SDK 同編譯流程,又要處理 Electron 內置 Node.js 嘅 ABI。升級 Electron 時,native module 有機會要重編,x64、Arm64 同唔同版本亦要逐個測。

Microsoft 展示 JavaScript 接通 Windows API 嘅官方文章主圖

圖片:Microsoft

今次實際慳走邊幾層工序

新方案會讀取 Windows SDK 或 Windows App SDK 嘅 .winmd metadata,再產生 JavaScript wrapper 同 TypeScript declaration。執行時,@microsoft/dynwinrt 呢個預先編譯好嘅共用 runtime 會負責呼叫底層 WinRT。API metadata 更新後,只要新版本保持相容,開發者就可以重新產生 bindings,唔使為每個 class 重寫 addon。WinApp CLI 亦可以幫手處理 SDK、manifest、bindings 同開發用 package identity,原本分散幾處嘅設定,可以集中用同一套指令搞掂。

例如一個 Electron 內部工具,想彈出有進度列同按鈕嘅 Windows 通知,或者將帶格式內容放入剪貼簿,以往可能要自己包一層 native code;而家支援範圍內可以直接喺 Electron main process 呼叫。官方亦示範喺相容 Copilot+ PC 用 Phi Silica 做摘要,不過呢個例子要裝置支援,manifest 仲要申報受限制嘅 systemAIModels capability,唔係裝個 npm package 就任何電腦都跑到。

Electron 呼叫 Windows App SDK 顯示原生通知嘅示範畫面

圖片:Microsoft

Electron 冇突然變成原生 app

個名容易令人以為 JavaScript 已經全面直通 Windows,其實中間仍有一個 native runtime,只係微軟將佢做成共用元件,開發者毋須逐個 API 自己維護。Electron 原有嘅 Chromium、記憶體用量、啟動速度同介面渲染方式都冇因而改變,呢次改善集中喺 Windows 功能整合同工程維護。官方文章亦講明主要目標係 AI、儲存、通知、網上連線等 data-style API;WebView2 唔喺產生範圍,WinUI 等 UI 功能亦有額外執行緒同生命週期要求。

邊類 app 最值得試

Windows-first Electron app、公司內部工具,同已有大量 JavaScript 開發人手但間中要接系統功能嘅團隊,會最容易食到好處。跨平台 app 就要繼續用 process.platform 分流,macOS、Linux 版本亦要保留其他實作或者 fallback。另一點係安全邊界:Windows API 最好留喺 main process,再用收窄咗嘅 IPC 介面畀 renderer 呼叫,唔好一口氣將整套系統能力暴露畀網頁內容。

公開預覽仲有幾道閘

Microsoft 現有 Electron setup guide 要求 Windows 11、Node.js、.NET SDK 10,同埋裝有 Native Desktop workload 嘅 Visual Studio。官方亦建議新專案用最新 Electron,但未列出清楚嘅最低 Node.js 或 Electron 版本。共用 runtime 暫時只提供 x64 同 Arm64 binary,未有 x86 版本。正式派發亦要保留產生咗嘅 bindings,視乎 API 準備 package identity,再用 MSIX 等方式封裝同簽署。既然仍係 public preview,API 對應、安裝步驟同支援清單都有機會再改,現階段較適合做 prototype 或非關鍵功能,等版本同 production 支援說法穩定後先擴大使用。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook