在 ARM 架構上的 Windows
如果您的應用程式使用 Electron 6.0.8 或更新版本執行,現在您可以針對在 Arm 上的 Windows 10 進行建置。這會大幅改善效能,但需要重新編譯應用程式中使用的任何原生模組。它也可能需要對您的建置和封裝腳本進行小幅修正。
執行基本應用程式
如果您的應用程式未使用任何原生模組,則建立應用程式的 Arm 版本非常容易。
- 請確保應用程式的
node_modules
目錄為空。 - 使用「命令提示字元」,在像平常一樣執行
npm install
/yarn install
之前,先執行set npm_config_arch=arm64
。 - 如果您已將 Electron 安裝為開發相依性,npm 將會下載並解壓縮 arm64 版本。然後您可以像平常一樣封裝和發布您的應用程式。
一般考量
架構特定程式碼
許多 Windows 特定的程式碼都包含 if... else 邏輯,這些邏輯會在 x64 或 x86 架構之間進行選擇。
if (process.arch === 'x64') {
// Do 64-bit thing...
} else {
// Do 32-bit thing...
}
如果您想要以 arm64 為目標,像這樣的邏輯通常會選擇錯誤的架構,因此請仔細檢查您的應用程式和建置腳本是否有類似的條件。在自訂建置和封裝腳本中,您應該始終檢查環境中 npm_config_arch
的值,而不是依賴目前的處理程序架構。
原生模組
如果您使用原生模組,則必須確保它們會針對 MSVC 編譯器的 v142 版本 (在 Visual Studio 2017 中提供) 進行編譯。您也必須檢查原生模組所提供或參考的任何預先建置的 .dll
或 .lib
檔案是否適用於在 Arm 上的 Windows。
測試您的應用程式
若要測試您的應用程式,請使用執行 Windows 10 (1903 或更新版本) 的在 Arm 上的 Windows 裝置。請確保將您的應用程式複製到目標裝置 - 當從網路位置載入您的應用程式資產時,Chromium 的沙箱將無法正常運作。
開發先決條件
Node.js/node-gyp
建議使用 Node.js v12.9.0 或更新版本。 如果不希望更新至新的 Node 版本,您可以改為手動更新 npm 的 node-gyp 複本至 5.0.2 或更新版本,其中包含為 Arm 編譯原生模組所需的變更。
Visual Studio 2017
跨編譯原生模組需要 Visual Studio 2017 (任何版本)。您可以透過 Microsoft 的Visual Studio Dev Essentials 程式下載 Visual Studio Community 2017。安裝後,您可以從「命令提示字元」執行以下命令來新增 Arm 特定元件
vs_installer.exe ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^
--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
--includeRecommended
建立跨編譯命令提示字元
在環境中設定 npm_config_arch=arm64
會建立正確的 arm64 .obj
檔案,但標準的「VS 2017 開發人員命令提示字元」將使用 x64 連結器。若要修正此問題
- 複製「VS 2017 的 x64_x86 交叉工具命令提示字元」捷徑 (例如,在開始功能表中找到它,按一下滑鼠右鍵,選取「開啟檔案位置」,複製並貼上) 到方便的位置。
- 在新的捷徑上按一下滑鼠右鍵,然後選擇「內容」。
- 變更「目標」欄位,使其在結尾處讀取
vcvarsamd64_arm64.bat
,而不是vcvarsamd64_x86.bat
。
如果成功完成,命令提示字元應在啟動時列印類似以下內容
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.15
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_arm64'
如果您想要直接在在 Arm 上的 Windows 裝置上開發您的應用程式,請在「目標」中取代 vcvarsx86_arm64.bat
,以便使用裝置的 x86 模擬進行跨編譯。
連結至正確的 node.lib
預設情況下,node-gyp
會解壓縮 Electron 的節點標頭,並將 x86 和 x64 版本的 node.lib
下載到 %APPDATA%\..\Local\node-gyp\Cache
,但它不會下載 arm64 版本 (此問題的修正正在開發中。) 若要修正此問題
- 從 https://electron.dev.org.tw/headers/v6.0.9/win-arm64/node.lib 下載 arm64
node.lib
- 將其移至
%APPDATA%\..\Local\node-gyp\Cache\6.0.9\arm64\node.lib
將 6.0.9
替換為您正在使用的版本。
跨編譯原生模組
完成上述所有步驟後,開啟跨編譯命令提示字元並執行 set npm_config_arch=arm64
。然後使用 npm install
來像平常一樣建置您的專案。與跨編譯 x86 模組一樣,如果先前為其他架構編譯了原生模組,您可能需要移除 node_modules
來強制重新編譯它們。
偵錯原生模組
可以使用 Visual Studio 2017 (在您的開發機器上執行) 和在目標裝置上執行的對應 Visual Studio 遠端偵錯工具 來偵錯原生模組。若要偵錯
- 透過「命令提示字元」在目標裝置上啟動您的應用程式
.exe
(傳遞--inspect-brk
以在載入任何原生模組之前暫停它)。 - 在您的開發機器上啟動 Visual Studio 2017。
- 透過選取「偵錯 > 附加至處理序...」並輸入裝置的 IP 位址以及 Visual Studio 遠端偵錯工具所顯示的連接埠號碼,連線至目標裝置。
- 按一下「重新整理」,然後選取要附加的適當 Electron 處理序。
- 您可能需要確保正確載入應用程式中任何原生模組的符號。若要設定此選項,請前往 Visual Studio 2017 中的「偵錯 > 選項...」,然後在「偵錯 > 符號」下方新增包含您的
.pdb
符號的資料夾。 - 附加後,設定任何適當的中斷點,並使用 Chrome 的 Node 遠端工具繼續 JavaScript 執行。
取得額外協助
如果您遇到此文件方面的問題,或者如果您的應用程式在為 x86 編譯時可以運作,但無法為 arm64 編譯時運作,請提交問題,並在標題中加上「在 Arm 架構上的 Windows」。