背景:使用 electron-builder 和 @journeyapps/sqlcipher 的項目 ,在新電腦上 clone 項目,npm 裝包時遇到錯誤
一般 electron-builder 的項目下完包的最后,會調用 electron-builder install-app-deps 命令重新構建本地依賴
換了電腦后就是在這里卡住,卡住幾個小時都不動,也不報錯,無奈嘗試遍各種方法都不行,比如卸載 node 重新安裝,卸載 python 和 visual studio,修改 npm 配置改為淘寶鏡像地址,使用 yarn,cnpm 安裝,都是不行,百度上也沒有對應的案例,就差祈禱了,感覺每次 npm 下包都是看運氣,哎,還是經驗少啊。
最后因為是卡在@journeyapps/sqlcipher 這個 sqlite 加密版插件上,於是 package.json 中提高了@journeyapps/sqlcipher 的版本改成 5.0.0 最新版本,並改用 cnpm 正經淘寶鏡像來安裝, 發現可以正常編譯 ,最后的 electron-builder install-app-deps 也過去了,但是運行項目的時候卻 報錯說缺編譯@journeyapps/sqlcipher 的 builder 模塊,說明 electron-builder install-app-deps 沒成功啊,繼續找原因,靈光一閃看到:
node-pre-gyp,可以將存在網絡上的作者根據不同平台預編譯好的二進制文件下載下來
關於 gyp 與 node-gyp 與 node-pre-gyp 可以看這篇文章https://zhuanlan.zhihu.com/p/330468774
原來 這個包的時候先去· https://journeyapps-node-binary.s3.amazonaws.com/@journeyapps/sqlcipher/v4.1.0/node-v83-win32-x64.tar.gz
找對應系統的對應 node 版本的二進制文件, 如果沒有就會下載源碼進行編譯,之前在 linux 上下載這個包就出現過這個問題,
node-v83 表示當前 node 的 NODE_MODULE_VERSION 官網可以查到,因為是新電腦所以下的是 node 的最新版本 14,還是太年輕啊,以為最新的就是最好的,不知道好多插件都沒有最新 node 版本的二進制文件,通過 淘寶鏡像 (一般淘寶鏡像上有的就一定是有了)看到最新的包是node-v72-win32-x64.tar.gz
,也就是 node 的 12 版本,果斷卸載 14 安裝 12 。
最后試了幾次之后終於重新構建本地依賴成功