Azure Functions + node.js - 找不到模块

6

我已经使用Azure CLI创建了一个应用程序和一个函数,它们有适当的结构,因此:

/host.json
/local.settings.json
/mycustomfunction/function.json
/mycustomfunction/index.js
/mycustomfunction/package.json
/node_modules

从BitBucket下载源代码,使用Kudu部署,构建(获取node_modules之类的依赖项,其中包括azure),一切都正常。
在依赖项方面,只有一个 - "azure": "^2.0.0-preview" 但是当我在Azure上运行该函数时,出现错误 2017-09-08T13:59:06.091 JavaScript HTTP trigger function processed a request. 2017-09-08T13:59:06.216 Exception while executing function: Functions.mycustomfunction. mscorlib: Error: Cannot find module 'azure' at Function.Module._resolveFilename (module.js:469:15) 当使用func host start本地运行相同的函数时,一切正常...
我做错了什么? :)
2个回答

4
根本原因可能是您在函数应用的Kudu控制台中没有运行npm install命令,以安装函数应用包含的package.json中定义的必要的node模块。请按照以下指南操作:Node版本和包管理 。下面是参考指南的一些要点:
上传package.json文件后,需要在Kudu远程执行控制台中运行npm install命令。此操作会下载package.json文件中指定的软件包并重新启动函数应用。成功安装所需软件包后,通过调用require('packagename')将它们导入到您的函数中,如以下示例所示:
// Import the underscore.js library
var _ = require('underscore');
var version = process.version; // version === 'v6.5.0'

module.exports = function(context) {
    // Using our imported underscore.js library
    var matched_names = _
        .where(context.bindings.myInput.names, {first: 'Carla'});

是的,我已经按照这个教程进行了操作,并运行了npm install。我还认为当您从源代码存储库中获取源代码时,npm install会自动运行。但不知何故,模块仍未被找到。 - Lech Migdal
好的,我尝试了另一个具有相同依赖项(Azure)的应用程序,从我所看到的来看,npm install存在一些问题。至少看起来我得到了一个.staging文件夹,而不是node_modules文件夹中的软件包。我将尝试将依赖关系放在我需要的特定模块上,而不是完整的Azure模块上。 - Lech Migdal

1
似乎问题出在Azure Functions的共享/消费模型上。我注意到,运行npm install时,大多数情况下进程会超时,而node_modules文件夹中没有显示任何软件包,只留下.staging文件夹。创建一个带有专用应用服务计划的新函数应用程序后,一切都按预期工作。
另一个(可能更好的)解决方案是包括azure-sb模块,而不是azure。它提供了足够的功能来查询Azure Service Bus,同时它的体积要小得多,Kudu能够使用共享层资源获取它。

第二次尝试时,我正准备尝试安装单独的模块,结果它就成功了。我以为这可能有助于超时问题,但第二次我一定是在最后关头才成功的。 - Mark Dornian
另一个选择是尝试使用Kudu放置一个压缩的node_modules文件。我没有尝试过,所以不知道这是否有帮助。 - Mark Dornian
如果你坚持使用共享消耗模型,有时候你必须尝试几次。删除 node_modules,执行 npm i,工作了吗?不行的话就重复以上步骤。 - Flacito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接