node-v57-linux-x64 / grpc_node.node缺失

时间:2017-10-16 17:23:48

标签: node.js firebase github npm

完全遵循以下步骤时:

https://firebase.google.com/docs/admin/setup

部署到我的服务器,我收到此错误:

2017-10-16 19:19:56 4199bf47fc2d ---> Starting app
2017-10-16 19:19:56 4199bf47fc2d Detected server.js file
2017-10-16 19:19:57 4199bf47fc2d module.js:529
2017-10-16 19:19:57 4199bf47fc2d     throw err;
2017-10-16 19:19:57 4199bf47fc2d     ^
2017-10-16 19:19:57 4199bf47fc2d 
2017-10-16 19:19:57 4199bf47fc2d Error: Cannot find module '/data/app/node_modules/firebase-admin/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64/grpc_node.node'
2017-10-16 19:19:57 4199bf47fc2d     at Function.Module._resolveFilename (module.js:527:15)
2017-10-16 19:19:57 4199bf47fc2d     at Function.Module._load (module.js:476:23)
2017-10-16 19:19:57 4199bf47fc2d     at Module.require (module.js:568:17)
2017-10-16 19:19:57 4199bf47fc2d     at require (internal/module.js:11:18)
2017-10-16 19:19:57 4199bf47fc2d     at Object.<anonymous> (/data/app/node_modules/firebase-admin/node_modules/grpc/src/node/src/grpc_extension.js:30:15)
2017-10-16 19:19:57 4199bf47fc2d     at Module._compile (module.js:624:30)
2017-10-16 19:19:57 4199bf47fc2d     at Object.Module._extensions..js (module.js:635:10)
2017-10-16 19:19:57 4199bf47fc2d     at Module.load (module.js:545:32)
2017-10-16 19:19:57 4199bf47fc2d     at tryModuleLoad (module.js:508:12)
2017-10-16 19:19:57 4199bf47fc2d     at Function.Module._load (module.js:500:3)

它被安装在一个新的文件夹中,最新的npm和所有,已删除的node_modules映射重新安装,npm install --unsafe-perm,npm rebuild等。没有任何工作。为什么不安装模块?

3 个答案:

答案 0 :(得分:9)

这对我而言很有帮助:

npm rebuild --target=8.1.0 --target_platform=linux --target_arch=x64 --target_libc=glibc --update-binary

它将所需的二进制文件下载到您的node_modules/grpc目录中。

我在开发机器上运行macOS X,并且正在部署到AWS Lambda;这将同时安装两个运行时版本,这意味着我可以在本地进行开发和测试,然后再部署到Lambda。

答案 1 :(得分:4)

我刚遇到同样的问题。对我们来说问题是我们在mac上安装节点模块,而firebase-admin的安装正在为二进制文件提供特定于平台的文件。

运行安装并检查此目录后,我看到了:

$ ls node_modules/firebase-admin/node_modules/grpc/src/node/extension_binary/
node-v48-darwin-x64

但是运行lamba的环境正在寻找:

 node-v48-linux-x64

一个简单的解决方案是在使用docker运行lambda的同一环境中运行npm install。在我们的例子中,我发现lambci项目具有针对这个确切用例的预构建的docker容器。在这里,我添加了一个npm脚本行来处理构建:

  "scripts": {
      "package": "rm -rf node_modules && docker run -v $PWD:/var/task -w /var/task lambci/lambda:build-nodejs6.10 npm install"
  },

答案 2 :(得分:0)

对于我来说,要解决此问题,我正在使用macOS:

本地运行:

  

npm i -D

并运行以下命令来部署生产:

  

npm i-生产--unsafe-perm --target = 8.10.0 --target_platform = linux --target_arch = x64 --target_libc = glibc --update-binary

您可以通过创建一个文件来运行上述命令,例如sls-deploy.sh

#!/usr/bin/env bash

set -x
set -e

WORK_DIR=./lambda-tmp
COMPILED_DIR=./compiled
BIN_DIR=`npm bin`

rm -rf $WORK_DIR
rm -rf $COMPILED_DIR
${BIN_DIR}/tsc
cp -r $COMPILED_DIR $WORK_DIR
cp ./serverless.yml $WORK_DIR
cp ./package.json $WORK_DIR
.....
cp ./firebase-api-key.json $WORK_DIR
cp ./staging-firebase-api-key.json $WORK_DIR
cd $WORK_DIR
npm i --production --unsafe-perm
npx serverless deploy --stage $ENV_NAME --force

然后运行

  

bash -x sls-deploy.sh