1

让我们首先说我有一些Azure Functions使用 C# 的经验,但这是我第一次使用Node.json Azure Functions。所以,这可能是一个新手问题,也可能根本不是一个合适的问题。

我使用Node.js开发了几个函数(版本: 2.x)并将它们部署为 Azure Functions。除了依赖于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手动或使用触发器(在本例中为Timer 触发器),我会收到以下错误:

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 重建”,正如一些帖子中所建议的那样,但它似乎并不能解决我当前的情况。我也尝试将 Node 版本从 ~10 更改为 ~8,但我不确定我是否生效。我需要一些帮助,或者是否有人可以指出我正确的方向。

4

1 回答 1

2

我终于解决了我的问题。正如我在问题上所说,我不熟悉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,我也无法将其设置为 32(因为错误中正在查找的依赖项是“node-v57-win32- ia32 -unknown ”)。

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

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

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

这使得 Expected directory: node-v57-win32-ia32-unknown 被发现。

我希望这可以帮助其他人在同样的问题上挣扎。

于 2020-01-11T14:59:34.690 回答