树莓派3运行JS脚本报错:Cannot find module 'grpc'求助
解决树莓派3上Firebase JS脚本的grpc模块缺失问题
我之前在树莓派3上折腾Firebase JS SDK的时候,也碰到过和你完全一样的grpc模块找不到的报错,试了好几种方法终于搞定了,给你分享几个亲测有效的方案:
方案一:强制从源码编译grpc(最有效)
树莓派是ARM架构,很多npm包的预编译二进制文件没有适配这个架构,所以必须手动指定从源码编译grpc。步骤如下:
先安装编译依赖(这步很关键,之前我就是漏了这个导致编译失败):
sudo apt-get update && sudo apt-get install build-essential python2.7老版本的grpc编译需要Python 2.7,所以一定要装这个版本。
彻底清理现有依赖和缓存:
rm -rf node_modules package-lock.json npm cache clean --force重新安装依赖,并强制grpc从源码编译:
npm install --build-from-source=grpc
完成后再运行你的脚本,大概率就能找到grpc模块了。
方案二:调整Firebase SDK版本
有时候新版本的@firebase/firestore对ARM架构的适配可能有问题,试试切换到一个经过验证的稳定版本:
npm install @firebase/firestore@2.4.3
这个版本我之前在树莓派3上跑完全没问题,你可以试试。
方案三:临时替代方案——使用Firebase REST API
如果上面的方法都不行,你可以暂时绕过grpc依赖,直接调用Firebase的REST API来操作Firestore。比如用axios或者原生fetch发送HTTP请求,虽然代码量会多一点,但不需要依赖任何二进制模块,在嵌入式设备上更稳定。
为什么会出现这个问题?
本质原因是树莓派的ARMv7架构和我们常用的x86/x64架构不同,npm仓库里很多预编译的grpc二进制包没有提供ARM版本,所以npm默认安装的时候会找不到适配的二进制文件,只能尝试从源码编译,但如果你的树莓派缺少编译环境,编译就会失败,最终导致模块缺失。
内容的提问来源于stack exchange,提问作者Rasmus Hvilshøj
相关产品推荐
相关产品推荐

