如何在Azure上升级nodejs版本

时间:2018-04-11 00:14:44

标签: node.js azure azure-functions serverless-framework

目前我有Azure函数和默认定义的Node.js版本6.5.0。目标是升级它。我已经检查了Azure上可用的Node.js版本列表,最新的版本是8.9.4。我已经阅读了一些关于它的documentation,其中提到了两种方法。

1)package.json

将以下配置放入package.json文件

"engines": {
    "node": "8.9.4"
}

所以我做到了,但没有成功。

2)应用程序设置

转到“应用程序设置”,并将WEBSITE_NODE_DEFAULT_VERSION的值更新为8.9.4

这里我有3个问题:

  • 在功能中记录process.version会向我显示6.11.0。我不知道为什么......
  • 实际上它是Node.js 8.9.4,但是某些ES6功能如async arrow functions会引发错误
  • 每次运行serverless deploy命令时,它都会重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION值重置为默认值,即6.5.0

Azure功能的另一个问题:当我部署带有更改的功能时,Azure门户网站UI仍然显示我没有更新功能(旧功能),而该功能的新版本正在那里运行。奇怪的...

如果您有任何人遇到这些问题,请告诉我,也许有人知道原因甚至是解决方案。谢谢。

4 个答案:

答案 0 :(得分:6)

  记录process.version函数显示我6.11.0。

正如@David所说,Azure Functions运行时v1(~1)将您的节点版本锁定在v6.11

WEBSITE_NODE_DEFAULT_VERSION更改为8.9.4时,您还需要在应用程序设置中将运行时版本FUNCTIONS_EXTENSION_VERSION更改为beta

(请注意,运行时切换可能会导致重大更改,如果发生错误,您可以创建新的功能应用程序。)

使用package.json的第一种方法在我的测试中不起作用。

  

某些ES6功能(如异步箭头功能)会抛出错误

成功更新节点版本后,async arrow functions在我的测试中也能正常工作。

  

每次运行无服务器部署命令时,它都会重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION值重置为默认值

serverless deploy是部署整个服务的命令。因此,重新创建(返回默认值v6.5)是正常的,因为yml文件中的节点版本没有参数。

为避免这种情况,请使用serverless deploy -f <functionname>部署特定功能,而不是整个应用。

  

当我部署带有更改的功能时,Azure门户网站ui仍然显示我没有更新功能(旧版本),而该功能的新版本正在那里运行

同样的事情发生在我身边。我发现脚本可以在App Service Editor中正确显示。但在portal和kudu中,更新无法显示。我还检查了kudu中的日志文件,它说Script for function 'functionname' changed. Reloading.

在github上打开了关于我们遇到的最后一期的issue

答案 1 :(得分:3)

只是为了形式化,从我的评论:函数运行时v1被锁定到特定的Node.js版本(当前为6.11.2),每this reference document

要使用可配置的Node.js运行时,您需要将Functions运行时升级到v2.x:

Function overview page

Function app settings, to change runtime

答案 2 :(得分:1)

您可以通过从以下位置检查nodejs版本来设置 WEBSITE_NODE_DEFAULT_VERSION D://程序文件(x86)/ nodejs。 它将列出所有可用的版本。选择一个并更新 WEBSITE_NODE_DEFAULT_VERSION

这对我有用。 我已经将8.11更改为8.11.1

答案 3 :(得分:-2)

转到您的App目录,您将看到iisnode.yml。确保还在那里正确指定了node.js版本。 应该是这样的:

nodeProcessCommandLine: some_dir\nodejs\8.9.4\node.exe

enter image description here