尝试在与未找到 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.js 和 npm.
具体问题是这样的:
Expected directory: node-v57-win32-ia32-unknown
Found: [node-v72-win32-x64-unknown]
我尝试了太多东西。所以,我会尝试把我认为真正解决这个问题的那些。
首先,我不得不说我的本地环境和Azure Functions环境不一样。所以,我让他们都有节点版本8.10.0。
这解决了node-v57和node-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 找不到。
我希望这可以帮助其他遇到同样问题的人。
让我们首先说我在 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.js 和 npm.
具体问题是这样的:
Expected directory: node-v57-win32-ia32-unknown
Found: [node-v72-win32-x64-unknown]
我尝试了太多东西。所以,我会尝试把我认为真正解决这个问题的那些。
首先,我不得不说我的本地环境和Azure Functions环境不一样。所以,我让他们都有节点版本8.10.0。 这解决了node-v57和node-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 找不到。
我希望这可以帮助其他遇到同样问题的人。