目前我有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
。我不知道为什么...... 8.9.4
,但是某些ES6功能如async arrow functions
会引发错误serverless deploy
命令时,它都会重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION
值重置为默认值,即6.5.0
Azure功能的另一个问题:当我部署带有更改的功能时,Azure门户网站UI仍然显示我没有更新功能(旧功能),而该功能的新版本正在那里运行。奇怪的...
如果您有任何人遇到这些问题,请告诉我,也许有人知道原因甚至是解决方案。谢谢。
答案 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:
答案 2 :(得分:1)
您可以通过从以下位置检查nodejs版本来设置 WEBSITE_NODE_DEFAULT_VERSION D://程序文件(x86)/ nodejs。 它将列出所有可用的版本。选择一个并更新 WEBSITE_NODE_DEFAULT_VERSION
这对我有用。 我已经将8.11更改为8.11.1
答案 3 :(得分:-2)