之前已经写过一篇electron-egg引入robotjs的文档。这一篇是接上一篇的。# electron + robotjs使用问题记录
在mac上打包的时候执行命令npm run build-m-arm64-test一直报错,找不到文件。我最后通过手动的方式构建了需要的文件,这里记录这个笨方法。 后期若有其他更好的方式,会继续探索。
打包报错
build native dependency from sources name=robotjs
version=0.6.0
platform=darwin
arch=arm64
napi=
reason=prebuild-install failed with error (run with env DEBUG=electron-builder to get more information)
error=prebuild-install info begin Prebuild-install version 7.1.2
prebuild-install warn install prebuilt binaries enforced with --force!
prebuild-install warn install prebuilt binaries may be out of date!
prebuild-install info looking for local prebuild @ prebuilds/robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
prebuild-install info looking for cached prebuild @ /Users/sun/.npm/\_prebuilds/25d508-robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
prebuild-install http request GET https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
prebuild-install http 404 https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
prebuild-install warn install No prebuilt binaries found (target=21.4.4 runtime=electron arch=arm64 libc= platform=darwin)
报错原因 :
-
先去本地文件找,没找到:prebuilds/robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz.
-
接着去缓存目录找,也没找到:/Users/sun/.npm/_prebuilds/25d508-robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
-
最后去网络路径找,也没找到,报错 404. 路径:github.com/octalmage/r…
解决方法
手动构建需要的文件。
- 第一种思路是构建本地文件。在本目录下新建文件夹prebuilds/,然后得到压缩文件.tar.gz.这种方式没成功,即使有这个文件,还是依然报错,放弃。
- 第二种思路,存入缓存文件/Users/sun/.npm/_prebuilds/,这种方式成功了,这里就记录这种成功的方法,备忘。最终目标是生成/Users/sun/.npm/_prebuilds/25d508-robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz。
1 重新编译 robotjs
./node_modules/.bin/electron-rebuild
2 对所有.node二进制文件执行签名操作
./sign.sh
3 压缩生成的文件
cd ./node_modules/robotjs
rm -rf robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
tar -czvf robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz build
4 移动压缩文件到指定位置
cd ./node_modules/robotjs
mv robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz /Users/sun/.npm/_prebuilds/25d508-robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz
5 重新打包 electron
打包命令:"build-m-arm64-test": "electron-builder --config=./electron/config/builder.test.json -m --arm64",
cd /Users/sun/vs2024proj/ee
npm run build-m-arm64-test
注意事项
如果需要mac公正,需要设置"hardenedRuntime": true,,配置权限文件electron/entitlements.mac.plist。
后记
- 期望想要打出适用于 intel 芯片和 m2 芯片的 app,将两个架构的二进制文件合并为一个 Universal Binary。 需要执行electron-builder --platform=mac --arch=x64,arm64构建依赖的二进制文件。构建后对所有二进制文件进行签名。然后更改构建脚本和构建命令,构建二合一的.app,统一进行公正。
{ "build": { "mac": { "target": { "target": "default", "arch": [ "x64", "arm64", "universal" ] } } } }
-
当我构建 arm64 时,prebuild-install 查找路径 /Users/sun/.npm/_prebuilds/25d508-robotjs-v0.6.0-electron-v109-darwin-arm64.tar.gz ,但当我构建二合一版本时,prebuild-install 查找路径 /Users/sun/.npm/_prebuilds/00b3dd-robotjs-v0.6.0-electron-v109-darwin-x64.tar.gz ,导致找不到文件。
-
当路径下存在 .//node_modules/robotjs/00b3dd-robotjs-v0.6.0-electron-v109-darwin-x64.tar.gz,即使构建的是 arm64 版本,它也会在公正时报错,提示 00b3dd-robotjs-v0.6.0-electron-v109-darwin-x64.tar.gz 未启动 Hardened Runtime(实际配置文件中已经存在配置 "hardenedRuntime": true)。 解决方法是手工把.//node_modules/robotjs/00b3dd-robotjs-v0.6.0-electron-v109-darwin-x64.tar.gz 删掉,重新构建 npm run build-m-arm64-test 就可以了。
-
原因还未知,仅做记录。