Apple M1 编译 electron sqlite3


使用 cnpm 安装的 sqlite3 会出现内核不匹配问题,报错信息如下:

App threw an error during load
Error: dlopen(/Users/liull/00_beluga/slient-printer-app/node_modules/.store/sqlite3@5.1.7/node_modules/sqlite3/build/Release/node_sqlite3.node, 0x0001): 
tried: '/Users/liull/00_beluga/slient-printer-app/node_modules/.store/sqlite3@5.1.7/node_modules/sqlite3/build/Release/node_sqlite3.node'
 (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')),
  '/System/Volumes/Preboot/Cryptexes/OS/Users/liull/00_beluga/slient-printer-app/node_modules/.store/sqlite3@5.1.7/node_modules/sqlite3/build/Release/node_sqlite3.node' (no such file), 
  '/Users/liull/00_beluga/slient-printer-app/node_modules/.store/sqlite3@5.1.7/node_modules/sqlite3/build/Release/node_sqlite3.node' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))

核心就是下载的 sqlite3 内核是 x86_64 而 apple M1 的内核是 arm64。一种办法是从仓库 找准下载替换本地对应 node_modules/sqlite3/build/Release/node_sqlite3.node 路径文件。一种办法是依据源码进行编译。

  1. 需要全局安装 electron cnpm install electron -g

  2. 需要全局安装 node-gyp cnpm install node-gyp -g

  3. 下载 sqlite3 源码 cnpm install sqlite3 --ignore-scripts,其中 --ignore-script 是为了防止 sqlite3 自动执行编译

  4. 手动执行脚本进行编译

    cd node_modules/sqlite3
    node-gyp rebuild --target=electron版本 --arch=arm64 --dist-url=https://electronjs.org/headers --module-name=node_sqlite3 --module_path=../lib/binding/napi-v3-darwin-arm64
  5. 在项目中运行 cnpm run dev 运行项目后,正常启动


文章作者: beluga
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 beluga !
  目录