You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Azure上的NodeJS应用调用Nodemailer报错求助

问题分析与解决方案

从错误信息SyntaxError: Unexpected token ...来看,核心问题是当前运行环境的Node.js版本不支持代码中使用的ES6扩展运算符语法。虽然你在Kudu控制台看到Node版本是8.9.0(理论上支持扩展运算符),但结合你的场景,可能的原因和对应解决方案如下:

1. Azure App Service运行时Node版本与Kudu不一致

Kudu控制台的Node版本和App Service实际运行应用的版本可能存在差异,这是Azure App Service的常见坑点。

解决方案:

  • 登录Azure门户,进入你的应用服务,依次点击配置 > 常规设置,在“Node.js版本”下拉框中手动选择8.9.0,保存设置后重启应用。
  • 额外保险:在应用服务的配置 > 应用程序设置中添加一个新的设置:
    • 名称:WEBSITE_NODE_DEFAULT_VERSION
    • 值:8.9.0
      这会强制App Service使用指定的Node版本运行你的应用。

2. nodemailer版本过高,依赖更高版本的Node.js

你的package.json中nodemailer使用了"*",这会安装最新版本的nodemailer。而最新版的nodemailer(比如v7及以上)要求Node.js版本至少为10.x,你的8.9.0版本不支持其中的新语法,导致报错。

解决方案:

  • 修改package.json中的nodemailer依赖为兼容Node 8.9.0的版本,比如:
    "nodemailer": "^6.9.10"
    
    (v6.x是最后支持Node 8的分支)
  • 在Kudu控制台执行以下命令重新安装依赖:
    rm -rf node_modules package-lock.json
    npm install
    
  • 重新部署你的应用。

3. 部署时依赖缓存导致不兼容的nodemailer版本残留

有时候Azure部署过程中会缓存旧的node_modules,导致实际运行的nodemailer版本和你预期的不一致。

解决方案:

  • 在Kudu控制台手动清理缓存并重装依赖:
    cd D:\home\site\wwwroot
    rm -rf node_modules package-lock.json
    npm install
    
  • 开启部署时自动构建:在应用服务的配置 > 应用程序设置中添加SCM_DO_BUILD_DURING_DEPLOYMENT=true,这样每次部署时Azure会自动重新安装依赖,避免缓存问题。

额外验证步骤

你提到在Kudu控制台运行node app.js没有报错,这说明Kudu的环境是正常的。可以尝试在Kudu中执行node -v确认版本,同时执行npm list nodemailer查看实际安装的nodemailer版本,对比是否和你预期的一致。


内容的提问来源于stack exchange,提问作者Noltibus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:20:01