我正在使用帶有 Homebrew 的 Rosetta 2 并安裝了 sqlite3。
我將這些添加到我的 ~/.zshrc 中,以便節點編譯器可以找到 brew 安裝:
export PATH="/usr/local/opt/sqlite/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/sqlite/lib"
export CPPFLAGS="-I/usr/local/opt/sqlite/include"
我正在使用安裝 using npm install sqlite3,從帶有--build-from-source標志的源代碼構建,我還指定了 sqlite 的自制版本--sqlite=/usr/local/opt/sqlite/
node-gyp 進入其后備構建node-pre-gyp install --fallback-to-build
安裝后,我正在重建它的本機依賴electron-builder項install-app-deps
它甚至可以重建到我正在尋找的平臺和拱門,darwin 和 x64。這是有希望的。
? electron-builder version=23.0.3
? loaded parent configuration preset=react-cra
? rebuilding native dependencies [email protected] platform=darwin arch=x64
但是,當運行運行的應用程式npm run dev時concurrently " cross-env BROWSER=none npm start" "wait-on http://localhost:3000 && electron ."
它仍在嘗試找到它的 arm64 版本:
Error: Cannot find module '[..]/node_modules/sqlite3/lib/binding/napi-v6-darwin-unknown-arm64/node_sqlite3.node'
即使我可以確認,它確實構建了 x64 版本,因為我有一個位于:
/napi-v6-darwin-unknown-x64/node_sqlite3.node
非常感謝任何幫助來完成這項作業,謝謝!
uj5u.com熱心網友回復:
經過4天的挖掘,我終于讓它作業了!!!
對于任何可能偶然發現此問題的人:
sqlite3 無法正常運行的原因有三個:
當使用 安裝節點 sqlite3 時
npm install sqlite3,它會獲取所有依賴項并安裝它。然后它為目標架構和平臺獲取預編譯的二進制系結檔案。在我的情況下,我們希望napi-v6-darwin-unknown-arm64ARM64 和 Apple M1 的 darwin。目前還沒有可用于此 Apple ARM64 的預編譯二進制檔案,即使有,下一段將詳細說明為什么它仍然無法作業。問題是它使用二進制編譯包確定系統的平臺和體系結構
node-pre-gyp,這個Github 問題的救星詳細說明了如何node-pre-gyp正確處理 ARM 體系結構檢測并且基本上混合了所有內容。因為它沒有正確檢測,即使我們--build-from-source在安裝時構建自己的系結,它仍然無法正常作業,因為它正在為錯誤的架構編譯錯誤的系結檔案。更糟糕的是,如果我們不使用--build-from-source,它只是簡單地獲取 Intel 預編譯的系結檔案。napi-v6-darwin-unknown-x64現在由于某種原因,在運行時,它現在可以正確檢測架構并嘗試查找系結檔案的 ARM64 版本,它找不到它并會拋出可怕的錯誤“找不到模塊”
napi-v6-darwin-unknown-arm64。它顯然不會找到它,即使它找到了,它也會拋出錯誤的架構錯誤,因為我們有 Intel 版本napi-v6-darwin-unknown-x64。
所以終于在挖掘了 4 天之后,這就是我如何讓它作業的:
- 卸載 sqlite3:
npm uninstall sqlite3 - 安裝一個新的 sqlite3,從源代碼構建它,指定目標架構并使用帶有 node-pre-gyp 的后備構建,以確保安全:
npm install sqlite3 --build-from-source --target_arch=arm64 --fallback-to-build - 現在為正確的平臺和架構編譯了正確的系結檔案,在運行時它會找到它并運行!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490810.html
