在Azure上如何升级nodejs版本

4
目前我有一个Azure函数和Node.js版本,其中默认使用版本为6.5.0。目标是将其升级。我检查了Azure上可用的Node.js版本列表,最新的版本是8.9.4。我阅读了一些有关此问题的文档,其中提到了两种方法。 1)package.json 将以下配置放入package.json文件中:
"engines": {
    "node": "8.9.4"
}

我试过了,但没有成功。

2) 应用程序设置

进入应用程序设置,更新WEBSITE_NODE_DEFAULT_VERSION的值为8.9.4

这种方法有以下三个问题:

  • 在函数中记录process.version显示6.11.0。我不知道为什么...
  • 实际上是Node.js 8.9.4,但一些ES6特性如async arrow functions会抛出错误。
  • 每次运行serverless deploy命令都会重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION的值重置为默认值,即6.5.0

Azure Functions还有一个问题:当我部署带有更改的函数时,Azure Portal Web UI仍然显示旧函数(而非更新后的函数),但新版本的函数正在运行。奇怪...

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


嗯。那么,您是将Azure Functions作为应用服务计划的一部分部署,还是按需部署?我怀疑您尝试的解决方案仅适用于前者(我没有部署按需函数,所以不太确定)。 - David Makogon
这是App Service计划的一部分,也不知道有按需功能。无论如何,我需要让当前的事情工作起来 :) - Rashad Ibrahimov
3
这份文档指出,Azure Functions runtime v1.x 锁定在 node v6.11 ,如果你想使用更高版本的 Node.js ,需要使用 Azure Functions runtime v2.x。你知道自己正在使用哪个版本的 Functions runtime 吗?也许这就是问题所在? - David Makogon
1
哦,我一直在查看这份文档,但不知怎么错过了。 - Rashad Ibrahimov
没问题 - 希望有所帮助。我将我的评论正式化为一个答案,以便完整(并加入了更多细节)。 - David Makogon
是的,非常感谢您的时间,这是有用的信息。我真的很想接受您的答案,但是@Jerry Liu给出了更详细的解释和测试,所以...无论如何,感谢您的帮助 :) - Rashad Ibrahimov
4个回答

6
在函数中记录 process.version 显示为 6.11.0。正如 @David 所说,Azure Functions 运行时 v1(~1)将您的 node 版本锁定在 v6.11。当将 WEBSITE_NODE_DEFAULT_VERSION 更改为 8.9.4 时,您还需要在应用程序设置中将运行时版本 FUNCTIONS_EXTENSION_VERSION 更改为 beta。请注意,运行时切换可能会导致破坏性更改,如果出现错误,可以创建一个新的函数应用程序。而使用 package.json 的第一种方法在我的测试中不起作用。一些 ES6 功能(如 async 箭头函数)会抛出错误。成功更新 node 版本后,async 箭头函数在我的测试中也能正常工作。每次运行 serverless deploy 命令时,它都会重新创建服务并重置 WEBSITE_NODE_DEFAULT_VERSION 值为默认值。

serverless deploy是一个用于部署整个服务的命令。因此,在您的yml文件中没有节点版本参数时,看到重新创建(回到默认v6.5)是很正常的。

为了避免这种情况,使用serverless deploy -f <functionname>来部署特定的函数,而不是整个应用程序。

当我部署有更改的函数时,Azure Portal Web UI仍然显示未更新的函数(旧函数),而新版本的该函数正在运行。

我的情况也发生了同样的事情。我发现可以在App Service Editor中正确显示脚本。但在门户和kudu中,更新无法显示。我还在kudu中检查了日志文件,它说函数'functionname'的脚本已更改。重新加载。

关于我们遇到的最后一个问题,我在github上开了一个issue


感谢您的测试和详细回答。清晰易懂,非常有帮助 :) - Rashad Ibrahimov
很高兴解决方案有效。还要感谢@David,他的建议非常宝贵,为我们节省了几个小时的时间。 - Jerry Liu

3

为了正式化我的评论:Functions runtime v1 版本锁定在特定的 Node.js 版本(目前是 6.11.2),参见 此参考文档

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

Function overview page

Function app settings, to change runtime


2

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

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


-2

进入您的应用程序目录,您会看到 iisnode.yml 文件。确保在那里正确指定了 node.js 版本。 应该有类似于以下内容:

nodeProcessCommandLine: some_dir\nodejs\8.9.4\node.exe

enter image description here


不,那不会影响Azure的Functions,只会影响Web应用程序。David Makogon的评论已经给出了答案。 - evilSnobu
谢谢你的努力,@Shamkhal,但这不是我需要的。 - Rashad Ibrahimov

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