代码之家  ›  专栏  ›  技术社区  ›  Zack Shapiro

尝试在非本地服务器上获取FireStore中的任何内容时,部署到不带虚拟机的AWS错误:找不到模块“grpc”

  •  0
  • Zack Shapiro  · 技术社区  · 6 年前

    我可以在本地成功运行我的代码,连接到同一个FireStore,但是当我将代码推送到发布服务器并到达同一个端点时,我会得到以下错误:

    { Error: Cannot find module 'grpc'
        at Function.Module._resolveFilename (module.js:547:15)
        at Function.Module._load (module.js:474:25)
        at Module.require (module.js:596:17)
        at require (internal/module.js:11:18)
        at Object.<anonymous> (/var/app/current/node_modules/google-gax/build/src/grpc.js:46:19)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)
        at Module.require (module.js:596:17)
        at require (internal/module.js:11:18)
        at Object.<anonymous> (/var/app/current/node_modules/google-gax/build/src/index.js:33:16)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32) code: 'MODULE_NOT_FOUND' }
    

    包装袋 dependencies 包括:

    "firebase-admin": "^6.4.0",
    "firebase-functions": "2.1.0",
    

    在我的 index.js :

    var firestore = require("firebase-admin");
    var serviceAccount = require("./firestore-config.json");
    firestore.initializeApp({
      credential: firestore.credential.cert(serviceAccount)
    });
    

    在我的 main.js :

    Parse.Cloud.define("sendPush", function (request, response) {
      var db = firestore.firestore();
    
      db.collection("myCollection")
        .doc(request.params.id)
        .get()
        .then(docSnapshot => {
           // code that never hits
        }).catch(error => {
            console.log("there was some error...");
    
            response.error("Unable to get mute settings for group b");
            assert.ok(true);
        });
    

    我的代码一部署就落入catch块中。知道这是怎么回事吗?谢谢

    编辑:

    我的本地实例和服务器都没有运行Docker、Vagrant或任何类型的虚拟机,NPM安装是在我的AWS计算机上作为部署过程的一部分完成的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Zack Shapiro    6 年前

    我在附近打猎后找到了答案 firebase-admin-node GitHub issues :

    我添加了一个 .npmrc 文件到我的项目根目录并添加 unsafe-perm=true 作为文件中的唯一一行。已部署,运行良好。

    核心问题与安装所需的用户权限有关 gprc 这在上面的链接中有详细说明。