生产槽中Microsoft Azure Web应用部署失败问题求助
Azure Web应用ZIP Deploy部署失败排查
问题描述
自7月底至8月底,通过Azure DevOps或Kudu部署Web应用时持续失败,错误日志显示语法解析错误,具体部署日志如下:
2022-09-06T16:11:48.4467209Z Using the following command to generate deployment script: 'azure site deploymentscript -y --no-dot-deployment -r "C:\local\Temp\zipdeploy\extracted" -o "C:\home\site\deployments\tools" --basic --sitePath "C:\local\Temp\zipdeploy\extracted"'. 2022-09-06T16:11:48.4468177Z C:\PROGRA~2\SITEEX~1\NODEAP~1\298144~1.4\nodejs\node_modules\open\index.js:38 2022-09-06T16:11:48.4468606Z } catch {} 2022-09-06T16:11:48.4468848Z ^ 2022-09-06T16:11:48.4468969Z 2022-09-06T16:11:48.4469262Z SyntaxError: Unexpected token { 2022-09-06T16:11:48.4469684Z at createScript (vm.js:80:10) 2022-09-06T16:11:48.4470105Z at Object.runInThisContext (vm.js:139:10) 2022-09-06T16:11:48.4470545Z at Module._compile (module.js:616:28) 2022-09-06T16:11:48.4471047Z at Object.Module._extensions..js (module.js:663:10) 2022-09-06T16:11:48.4471513Z at Module.load (module.js:565:32) 2022-09-06T16:11:48.4471942Z at tryModuleLoad (module.js:505:12) 2022-09-06T16:11:48.4472389Z at Function.Module._load (module.js:497:3) 2022-09-06T16:11:48.4472810Z at Module.require (module.js:596:17) 2022-09-06T16:11:48.4473206Z at require (internal/module.js:11:18) 2022-09-06T16:11:48.4473789Z at Object.<anonymous> (C:\PROGRA~2\SITEEX~1\NODEAP~1\298144~1.4\nodejs\node_modules\@azure\identity\dist\index.js:22:12) 2022-09-06T16:11:48.4476491Z C:\PROGRA~2\SITEEX~1\NODEAP~1\298144~1.4\nodejs\node_modules\open\index.js:38\r\n } catch {}\r\n ^\r\n\r\nSyntaxError: Unexpected token {\r\n at createScript (vm.js:80:10)\r\n at Object.runInThisContext (vm.js:139:10)\r\n at Module._compile (module.js:616:28)\r\n at Object.Module._extensions..js (module.js:663:10)\r\n at Module.load (module.js:565:32)\r\n at tryModuleLoad (module.js:505:12)\r\n at Function.Module._load (module.js:497:3)\r\n at Module.require (module.js:596:17)\r\n at require (internal/module.js:11:18)\r\n at Object.<anonymous> (C:\PROGRA~2\SITEEX~1\NODEAP~1\298144~1.4\nodejs\node_modules\@azure\identity\dist\index.js:22:12)\r\nC:\Program Files (x86)\SiteExtensions\Kudu\97.40810.5869\bin\Scripts\starter.cmd "C:\Program Files (x86)\SiteExtensions\Kudu\97.40810.5869\bin\node_modules\.bin\kuduscript.cmd" -y --no-dot-deployment -r "C:\local\Temp\zipdeploy\extracted" -o "C:\home\site\deployments\tools" --basic --sitePath "C:\local\Temp\zipdeploy\extracted" 2022-09-06T16:11:48.4479031Z Deployment Failed. 2022-09-06T16:11:48.4505538Z ##[error]Failed to deploy web package to App Service. 2022-09-06T16:11:48.4513364Z ##[error]Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
原因分析
日志中的SyntaxError: Unexpected token {指向open模块的} catch {}语法,这是ES2019引入的可选catch绑定语法(无需声明错误变量)。而当前Kudu环境使用的Node.js版本(从路径和vm.js版本判断为v10.x)不支持该语法,导致部署脚本执行失败。
解决方案
方法1:指定应用Node.js版本
在项目根目录创建.node-version文件,写入支持ES2019的Node.js版本号(如14.21.0),Azure部署时会自动使用该版本运行相关脚本,避免语法兼容问题。
方法2:升级Web应用的Node.js版本
- 登录Azure门户,进入目标Web应用
- 导航至配置 > 通用设置
- 在Node.js版本下拉菜单中选择v14.x或更高版本(如14 LTS)
- 保存设置后重新发起部署
方法3:降级依赖包版本
如果无法升级Node.js,可降级open包到兼容旧版本的版本:
- 修改项目
package.json中的open依赖版本为^7.4.2(该版本不使用可选catch绑定语法) - 执行
npm install更新依赖 - 重新打包并部署
方法4:使用自定义部署脚本
跳过Kudu自动生成的脚本,手动编写部署脚本(如deploy.cmd),直接完成文件复制、依赖安装等操作,避免调用依赖高版本Node.js的模块。
内容的提问来源于stack exchange,提问作者yfouillet
相关产品推荐
相关产品推荐

