开发适用于 Azure 的 JavaScript 应用程序时,在本地开发环境和主机运行时环境中对齐 Node.js 版本至关重要。 此版本对齐可确保兼容性,降低运行时错误的可能性,并使用 Azure 平台的完整功能。 本文介绍如何为 Azure 托管的应用程序和服务选择适当的 Node.js 版本。
Node.js 版本
Node.js 遵循可预测的发布计划,其中包括长期支持(LTS)和当前版本。 LTS 版本是为长期维护和稳定性指定的,因此非常适合生产环境。 这些版本在较长时间内收到关键的 bug 修复、安全更新和性能改进,通常为 30 个月。 Node.js 使用偶数/奇数编号系统来区分 LTS 和当前版本:偶数版本(例如 20、22、24)是 LTS 版本,而奇数版本(例如 21、23、25)是当前版本。 当前版本包括最新功能和改进,但仅支持 6 个月,之后它们会过渡到 LTS 版本(如果它们为偶数)。
不应在生产环境中使用当前版本,因为六个月的窗口与 Azure 托管平台运行时和 SDK 不一定对齐。 你会注意到 Node.js 的 开发容器 不提供奇数版本和当前版本。
先决条件
所有 Azure SDK 和托管服务都使用 Node.js的 LTS 版本 。 如果应用程序代码在不支持的 Node.js版本中运行,则应更新应用程序源代码,以在当前支持的 LTS 运行时上运行。
还应知道要部署到哪个托管服务以及部署的应用程序使用的任何 Azure 服务。
跨环境兼容性
了解应用程序使用哪些 Azure 服务和 SDK 后,请确保应用程序的所有环境都可以生成并运行相同版本的 Node.js:
- 本地开发环境或开发容器
- CI/CD 流程环境
- 应用程序主机运行时
- Azure SDK
有关环境中使用不同版本相关的问题的说明,请参阅 兼容性问题。
托管服务
使用 Azure 托管服务时,可以选择将容器部署到主机,也可以选择 Node.js 版本作为主机的运行时。 在这两种情况下,都需要使运行时版本、应用程序代码和依赖项(如 Azure SDK)保持一致。
若要查找运行时信息,请使用下表:
服务
版本信息
适用于 Linux 运行时。 还可以运行以下 Azure CLI 命令以查看所有受支持的版本。
az webapp list-runtimes | grep node
新项目应使用最新的编程模型。
如果在 Static Web Apps 中托管 API,则需要考虑两种不同的运行时:前端和 API。
SWA CLI 提供开发环境功能,包括代理、身份验证和其他配置。
Azure SDK
Azure SDK 需要 Node.js LTS 版本,如 支持策略中所述。 托管环境支持的 LTS 版本和 SDK 不匹配时,可能会有一段时间,因为验证新的 Node.js LTS 版本需要时间。 由于通常有三个版本的 Node.js 标记为长期支持版本,因此通常可以面向中间版本。 通过此目标,你可以有一段时间来测试和验证应用程序是否可以移动到下一个 LTS 版本。
管理多个版本的 Node.js
如果需要跨本地和远程环境管理多个版本的 Node.js,建议:
- 开发容器:使用具有特定 Node.js 版本的容器。 可以使用容器跨多个环境管理 Node.js 的版本。 Visual Studio Code 的 远程容器扩展 简化了此过程。
- NVM (节点版本管理器):用于设置或切换本地版本的命令行接口 Node.js。
根据预期用途下载并安装 Node.js
可以根据要求下载并安装 Node.js。
兼容问题
下面是 Node.js 版本在环境中不匹配时可能出现的一些常见兼容性问题类别:
安全漏洞:使用具有已知安全漏洞的过时版本可能会使应用程序面临安全风险。
语法错误:使用较旧 Node.js 版本不支持的最新 JavaScript 语法的应用程序可能会导致语法错误。 这些错误可防止应用程序运行。
弃用的 API:较新的 Node.js 版本中弃用的 API 仍存在于较旧版本中,这会导致出现意外行为或运行时错误(如果版本不一致)。
性能降低:较新的 Node.js 版本通常包括性能改进。 在旧版本上运行应用程序可能会导致执行时间变慢并降低性能。
不一致行为:Node.js 版本处理某些作(例如缓冲区处理、事件循环行为或模块解析)的差异可能导致环境间的行为不一致。
依赖项冲突:Node.js 与一个版本的 Node.js 兼容的模块或包可能与另一个版本不兼容,从而导致依赖项冲突和运行时错误。
生成失败:使用与本地开发环境不同的 Node.js 版本的 CI/CD 管道可能会导致生成失败,从而导致开发和发布过程延迟。
通过确保所有环境都使用相同的版本 Node.js,可以缓解这些兼容性问题,并确保更流畅的开发和部署过程。