如何在 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个问题:
- 在函数中记录
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 仍然显示我未更新函数(旧函数),而该函数的新版本是 运行宁那里。奇怪...
如果你们中有人遇到过这些问题,请告诉我,也许有人知道原因甚至解决方案。谢谢。
转到您的 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
目前我有 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个问题:
- 在函数中记录
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 仍然显示我未更新函数(旧函数),而该函数的新版本是 运行宁那里。奇怪...
如果你们中有人遇到过这些问题,请告诉我,也许有人知道原因甚至解决方案。谢谢。
转到您的 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