【问题标题】:How to upgrade nodejs version on Azure如何在 Azure 上升级 nodejs 版本
【发布时间】:2018-09-20 17:15:20
【问题描述】:

目前我在此处默认定义了 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,但是像 async arrow functions 这样的一些 ES6 特性会抛出错误
  • 每次我运行serverless deploy 命令时,它都会重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION 值重置为默认值,即6.5.0

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

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

【问题讨论】:

  • 嗯。那么,您是将 Azure Functions 部署为应用服务计划的一部分,还是按需部署?我怀疑您尝试的解决方案仅适用于前者(我没有部署按需功能,所以我不太确定)。
  • 它是应用服务计划的一部分,也不知道按需功能。无论如何,我需要让当前的事情正常工作:)
  • This doc 指出 Azure Functions 运行时 v1.x 已锁定在节点 v6.11,您需要使用 Azure Functions 运行时 v2.x 来获取更高版本。您知道您使用的是哪个版本的 Functions 运行时吗?也许这就是问题所在?
  • 哦,我一直在看这个文档,但不知何故错过了。
  • 不用担心 - 希望它有所帮助。我在一个答案中正式发表了我的评论,只是为了完整性(更详细一点)。

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


【解决方案1】:

函数中的记录 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 在我的测试中也可以正常工作。

每次我运行 serverless deploy 命令时,它都会重新创建服务并将 WEBSITE_NODE_DEFAULT_VERSION 值重置为默认值

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

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

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

同样的事情发生在我身边。我发现脚本可以在应用服务编辑器中正确显示。但在门户和 kudu 中,更新无法显示。我还检查了 kudu 中的日志文件,上面写着Script for function 'functionname' changed. Reloading.

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

【讨论】:

  • 感谢您的测试和详细解答。清晰而有帮助:)
  • 很高兴该解决方案有效。还要感谢@David,他的建议非常有价值,为我们节省了时间。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      nodeProcessCommandLine: some_dir\nodejs\8.9.4\node.exe

      【讨论】:

      • 不,这不影响 Azure Functions,仅影响 Web 应用程序。 David Makogon 的评论给出了答案。
      • 感谢您的努力@Shamkhal,但这不是我需要的。
      猜你喜欢
      • 2018-04-09
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2018-10-27
      • 2022-12-20
      • 2023-02-14
      • 1970-01-01
      相关资源
      最近更新 更多