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 的 node 標頭,並將 node.lib
的 x86 和 x64 版本下載到 %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 編譯時卻無法運作,請提交問題,並在標題中註明「Windows on Arm」。