Azure Windows应用服务部署Node/React应用时出现const严格模式错误
Azure Windows应用服务部署Node/React应用时"const在严格模式中使用"错误的排查与解决
错误日志
应用抛出未捕获异常并终止:
Application has thrown an uncaught exception and is terminated: SyntaxError: Use of const in strict mode. at Module._compile (module.js:434:25) at Object..js (module.js:464:10) at Module.load (module.js:353:31) at Function._load (module.js:311:12) at Module.require (module.js:359:17) at require (module.js:375:17) at Object.<anonymous> (C:\Program Files\iisnode\interceptor.js:459:1) at Module._compile (module.js:446:26) at Object..js (module.js:464:10) at Module.load (module.js:353:31)
环境信息
- 本地Node版本:v18.3.0
- Azure应用服务配置:
WEBSITE_NODE_DEFAULT_VERSION: "~18.3.0" - TypeScript配置(tsconfig.json):
{ "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "./build", "sourceMap": true, "strict": true, "esModuleInterop": true, "noImplicitAny": false, "allowJs": true, "moduleResolution": "node", "lib": [ "es6", "dom", "dom.iterable" ], "downlevelIteration": true } }
问题原因分析
从错误栈可以看到,异常触发自C:\Program Files\iisnode\interceptor.js,说明iisnode模块实际调用的Node版本并非你配置的v18.3.0,而是不支持严格模式下使用const的旧版本(如Node.js 0.10.x或更早)。
Azure Windows环境下的常见诱因:
WEBSITE_NODE_DEFAULT_VERSION配置未生效,可能是拼写错误、版本格式问题,或应用未重启加载配置- iisnode优先使用系统默认的旧版Node,未关联到你指定的Node版本
- 部署包包含本地
node_modules,部分依赖触发了旧版Node的兼容逻辑
解决方法
1. 确认Node版本配置并重启应用
- 进入Azure门户,打开目标应用服务的「配置」→「应用程序设置」,检查
WEBSITE_NODE_DEFAULT_VERSION是否准确设置为~18.3.0 - 可通过Kudu站点验证实际Node版本:进入应用服务「高级工具」→「Go」,在Debug Console中执行
node -v - 修改配置后必须重启应用服务,确保配置生效
2. 配置iisnode指向指定Node版本
在应用根目录创建或修改web.config,明确指定Node.exe路径:
<configuration> <system.webServer> <iisnode nodeProcessCommandLine=""%programfiles%\nodejs\18.3.0\node.exe"" /> <!-- 保留原有其他配置 --> </system.webServer> </configuration>
注意:路径中的版本号需与Azure实际安装的Node版本一致,可通过Kudu查看C:\Program Files\nodejs目录下的版本文件夹
3. 清理部署包中的本地依赖
部署前删除本地node_modules文件夹,让Azure重新安装适配环境的依赖。可在部署脚本(如GitHub Actions、Azure DevOps Pipeline)中添加清理步骤,或在package.json的build命令中前置清理操作
4. 检查TypeScript编译输出
本地执行tsc命令,查看build目录下的输出文件:
- 确认
const是否被转译为var(因target设置为es5) - 若存在未转译的ES6语法,检查是否有未被TypeScript处理的JS文件,或调整
allowJs配置
内容的提问来源于stack exchange,提问作者Mackey
相关产品推荐
相关产品推荐

