Node.js 错误:无法加载gRPC二进制模块

Node.js 错误:无法加载gRPC二进制模块,node.js,npm,Node.js,Npm,我一直在学习教程: 试图将湿度和温度数据从粒子光子发送到谷歌云数据存储。高层架构如下所示: 其中,数据从光子发送到粒子云,再发送到谷歌云(Pub/Sub)和以Node.js为中介的谷歌数据存储 一切都可以发布/订阅,但当我尝试激活节点脚本(调用:node tutorial.js)时,我收到了错误 调用node tutorial.js时,我收到: $ node tutorial.js Authenticating with Google Cloud... /home/lennart/node_

我一直在学习教程:

试图将湿度和温度数据从粒子光子发送到谷歌云数据存储。高层架构如下所示:

其中,数据从光子发送到粒子云,再发送到谷歌云(Pub/Sub)和以Node.js为中介的谷歌数据存储

一切都可以发布/订阅,但当我尝试激活节点脚本(调用:node tutorial.js)时,我收到了错误

调用node tutorial.js时,我收到:

$ node tutorial.js 
Authenticating with Google Cloud...
/home/lennart/node_modules/grpc/src/grpc_extension.js:55
    throw error;
    ^

Error: Failed to load gRPC binary module because it was not installed for the current system
Expected directory: node-v64-linux-x64-glibc
Found: [node-v57-linux-x64-glibc]
This problem can often be fixed by running "npm rebuild" on the current system
Original error: Cannot find module '/home/lennart/node_modules/grpc/src/node/extension_binary/node-v64-linux-x64-glibc/grpc_node.node'
    at Object.<anonymous> (/home/lennart/node_modules/grpc/src/grpc_extension.js:53:17)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/home/lennart/node_modules/grpc/src/client_interceptors.js:145:12)
    at Module._compile (internal/modules/cjs/loader.js:702:30)

以前我在OpenSSL和节点兼容性方面遇到问题,可以从以下方面进行跟踪:
错误未定义符号:SSL\u library\u init
。安装了节点v10.4.1,这似乎导致了上述错误。

我最终通过执行以下操作解决了此问题:

  • 确保安装了正确版本的节点:

    npm安装--target=10.0.0--target\u platform=linux--target\u arch=x64

  • 通过上一个命令将文件夹
    node-v64-linux-x64-glibc
    复制到最初安装位置以外的两个其他文件夹(见下文)(
    /home/lennart/Desktop/Cloud/google Cloud datastore tutorial master/node_modules/grpc/src/node/extension_binary

/home/lennart/node_modules/@google cloud/video intelligence/node_modules/grpc/src/node/extension_binary
/home/lennart/node_modules/grpc/src/node/extension_binary


这也许可以用一种更优雅的方式来解决,但至少它起了作用。

我在Docker中的
节点:10 alpine
基础图像中遇到了同样的问题。 对我有效的解决方案是在容器的入口点上另外运行
npm rebuild


从节点:10
WORKDIR/app
复制包*.json。
运行npm安装
复制
CMD npm重建和npm运行迁移:运行

可能运行相同的
npm rebuild
可以在本地解决问题,或者,这可能是
npm
的问题,因为它无法及时获取正确的二进制文件。
warn
会有所不同吗?

请检查reguler user和SUPER user NODE&NPM的NODE&NPM版本是否相同。

对于我来说,一个简单的
warn--force
做到了,一旦我使用
nvm
切换到正确的NODE.js版本。我最初用错误的版本制作了
纱线。

我怀疑npm有问题。一些人通过多次运行“npm重建”解决了此问题。然而,在更新之后,上述问题又出现了,而不是“预期目录:node-v64-linux-x64-glibc”,而是“预期目录:node-v59-linux-x64-glibc”。显然,无法用相同的方法解决此问题。通过使用NVM(节点版本管理器)安装较旧版本的节点(8.11.3,目前是稳定版本),解决了“预期目录节点-v59-linux-x64-glibc”的新问题。这导致了错误“expected directory node-v57-linux-x64-glibc”,其解决方式与我之前对该问题的回答相同:将安装该节点的文件夹复制到其他两个目录。我已尝试解决此问题两天,尽管我不需要遵循您概述的第二步,手动复制-在
npm安装上使用
--target**
标志是最终解决此问题的唯一方法。谢谢你把这一点和死亡分享给firebase!!
$ npm -v  
6.1.0

$ node -v
v10.4.1

$ openssl version -v
OpenSSL 1.0.2o  27 Mar 2018