如何在 Azure 上升级 nodejs 版本

How to upgrade nodejs version on Azure

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

1) package.json

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

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

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

2) 应用程序设置

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

这个方法有3个问题:


Azure Functions 的另一个问题:当我部署有更改的函数时,Azure Portal web UI 仍然显示我未更新函数(旧函数),而该函数的新版本是 运行宁那里。奇怪...

如果你们中有人遇到过这些问题,请告诉我,也许有人知道原因甚至解决方案。谢谢。

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

nodeProcessCommandLine: some_dir\nodejs.9.4\node.exe

logging process.version in function shows me 6.11.0.

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

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

(注意runtime switch可能会导致breaking changes,如果出错可以新建一个function app代替。)

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

some ES6 features like async arrow functions throws an error

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

each time I run serverless deploy command it recreates service and resets WEBSITE_NODE_DEFAULT_VERSION value to default one

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

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

When I deploy a function with changes, Azure Portal web ui still shows me not updated function (old one), while new version of that function is running there

同样的事情发生在我这边。我发现脚本可以在应用服务编辑器中正确显示。但是在 portal 和 kudu 中,update 显示不出来。我还检查了 kudu 中的日志文件,它说 Script for function 'functionname' changed. Reloading.

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

根据我的评论,只是形式化:Functions runtime v1 被锁定到特定的 Node.js 版本(当前为 6.11.2),根据 this reference document.

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

您可以通过检查 nodejs 版本来设置 WEBSITE_NODE_DEFAULT_VERSION D://program files(x86)/nodejs. 它将列出所有可用版本。选择一个并更新 WEBSITE_NODE_DEFAULT_VERSION

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