尝试在与未找到 gRPC 二进制模块相关的 Azure Functions 上 运行 Node.js 时出错

Error when trying to run Node.js on Azure Functions related to gRPC binary module not being found

让我们首先说我在 Azure Functions 和 C# 方面有一些经验,但这是我第一次在 Azure Functions 上使用 Node.js。 所以,这可能是一个新手问题,也可能根本不是一个正确的问题。

我用Node.js开发了几个函数(版本:2.x)并将它们部署为Azure 函数。所有这些都在本地和 Azure 上正常工作,除了 对于依赖 Firebase

的人

在我的 index.js 文件中,在我函数的相应 文件夹 中,我声明了这些依赖项:

// Firebase App (the core Firebase SDK) is always required and must be listed before other Firebase SDKs
var firebase = require("firebase/app");
// Add the Firebase products that you want to use
require("firebase/firestore");

然后,在 package.json 文件中我有以下 dependencies (我只粘贴了相关部分):

" ": {},
  "devDependencies": {
    "firebase": "7.6.1"    
  }

这在本地工作正常。我可以 运行 它并在 本地 调试它没有问题但是一旦我将它部署在 Azure 上,如果我 run 手动或使用触发器我会收到以下错误(在这种情况下 计时器触发器 ):

Result: Failure
Exception: Worker was unable to load function NotifySpToUpdateCapacity: 'Error: Failed to load gRPC binary module because it was not installed for the current system
Expected directory: node-v57-win32-ia32-unknown
Found: [node-v72-win32-x64-unknown]
This problem can often be fixed by running "npm rebuild" on the current system
Original error: Cannot find module 'D:\home\site\wwwroot\node_modules\grpc\src\node\extension_binary\node-v57-win32-ia32-unknown\grpc_node.node''
Stack: Error: Failed to load gRPC binary module because it was not installed for the current system
Expected directory: node-v57-win32-ia32-unknown
Found: [node-v72-win32-x64-unknown]

我的理解是找不到 gRPC 模块。另外,据我所知,找不到它是因为它不在预期的目录中,但是...

我该如何解决这个问题?我需要更改或做什么才能找到正确的目录或安装正确的依赖项?

此外,我已经在我的 CI 管道中添加了一个 "npm rebuild",正如某些帖子中所建议的那样,但它似乎无法解决我当前情况下的任何问题。 我还尝试将 Node 版本从 ~10 更改为 ~8,但我不太确定我是否生效。 我需要一些帮助,或者是否有人可以指出正确的方向。

我终于解决了我的问题。正如我在这个问题上所说,我不熟悉 Node.jsnpm.

具体问题是这样的:

Expected directory: node-v57-win32-ia32-unknown
Found: [node-v72-win32-x64-unknown]

我尝试了太多东西。所以,我会尝试把我认为真正解决这个问题的那些。

首先,我不得不说我的本地环境Azure Functions环境不一样。所以,我让他们都有节点版本8.10.0。 这解决了node-v57node-v72之间的差异

我无法将 Azure 环境设置为 32(因为错误中正在查找的依赖项是 'node-v57-win32-ia32-unknown'),即使我将其配置为 32。

然后,我意识到我的 Azure DevOps Pipeline 可以发挥作用。我没有在我最初的问题中提到这一点,因为我迷失了 Node.js 和 npm 的东西,我没有意识到这一点。

所以,在我的管道中,我首先放了一个安装相同节点版本的步骤。 最后,我认为解决问题的最后一点是执行此操作的额外步骤:

npm rebuild --target=8.10.0 --target_arch=ia32 --update-binary

这使得预期的目录:node-v57-win32-ia32-unknown 找不到。

我希望这可以帮助其他遇到同样问题的人。