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

时间:2017-09-08 14:56:10

标签: node.js azure azure-functions

我使用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 个答案:

答案 0 :(得分:0)

根本原因应该是因为您没有在功能应用程序的Kudu控制台中运行 npm install 命令来安装功能应用程序中定义的必要节点模块。 s package.json。

请遵循以下指南:Node version and Package Management

以下是上述参考指南中的一些要点。

  

上传package.json文件后,运行 npm install 命令   在 Kudu远程执行控制台中。

     

此操作会下载   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'});

答案 1 :(得分:0)

似乎问题出在Azure功能的共享/消费模型上。我注意到在运行npm install时,大多数情况下进程会超时,node_modules文件夹中没有包,只留下.staging文件夹。使用专用的应用服务计划创建新的功能应用程序后,一切都按预期工作。

另一个(可能更好的)解决方案是包含azure-sb模块,instead of azure。它提供了足够的功能来查询Azure Service Bus,虽然它明显更小,但Kudu甚至可以使用Shared Tier资源来获取它。