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

Azure Web应用中node:process的"Cannot use import outside a module"调试难题

问题根源

错误出现在Azure启动时调用npx serve的环节:serve@14.x是纯ES模块,但其bin文件的解析逻辑在Azure Linux环境下和本地不一致。你的package.json设置了"type": "module",导致Node尝试以ES模块方式加载serve的bin脚本,但该脚本的执行入口没有正确适配CommonJS环境的调用方式,最终触发语法错误。

解决方案

1. 直接调用serve的ES模块入口文件

替换Azure的启动命令,绕过npx和bin脚本的解析问题:

cd /home/site/wwwroot && node node_modules/serve/build/main.js -s build -l $PORT

在Azure Portal的配置 > 常规设置 > 启动命令中填入上述命令即可。

2. 修改package.json的serve脚本

将package.json里的serve脚本改为直接调用ES模块入口:

"scripts": {
  // ...其他脚本
  "serve": "node node_modules/serve/build/main.js -s build -p $PORT"
}

然后Azure启动命令设置为npm run serve,同时确保Azure的PORT环境变量已配置为8080。

3. 降级serve到CommonJS版本

serve@13.x及以下版本是CommonJS格式,不会出现模块解析问题:

npm install serve@13.0.2 --save

更新package.json后重新部署到Azure。

4. 临时移除package.json的"type": "module"

你的React应用依赖react-scripts构建,本身会处理ES模块转译,移除"type": "module"后,Node会默认以CommonJS方式解析模块,避免serve的bin脚本被误判为ES模块。注意:若你的自有代码中有非react-scripts管控的ES模块语法,需额外处理。

5. 检查GitHub Actions部署流程

  • 确认部署流程中包含npm run build步骤,确保build产物正确生成并上传到Azure;
  • 用npm ci代替npm install安装依赖,保证依赖版本和本地一致;
  • 可在部署步骤后添加验证环节,检查/home/site/wwwroot/node_modules/serve目录是否存在,以及package.json的type字段是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:05:54