React应用本地正常,部署至Azure Web App后无法运行求助
问题分析
从Kudu日志的Cannot find module './cli'错误来看,核心问题出在生产环境的启动逻辑和部署配置上:
- Azure Web App默认执行
npm start,但你的start脚本是启动Parcel开发服务器,而Parcel属于devDependencies,生产环境部署时默认不会安装开发依赖,导致CLI模块缺失。 - 当前GitHub Actions部署了整个项目目录,包括本地构建的node_modules,但Azure生产环境不会自动安装dev依赖,进一步加剧了依赖缺失问题。
- 生产环境不需要启动Parcel开发服务器,应该用静态文件服务器托管Parcel构建好的
dist文件夹。
解决方案
1. 修正package.json启动脚本
将start脚本替换为生产环境的静态服务启动命令,保留开发环境的启动脚本用于本地调试:
{ "name": "myapp", "version": "0.1.3", "private": true, "scripts": { "start": "serve -s dist", "build": "npx parcel build index.html", "start:dev": "npx parcel index.html --port=8081" }, // 其余依赖配置保持不变 }
2. 优化GitHub Actions工作流
只部署生产所需的必要文件,避免冗余的dev依赖和代码文件:
修改构建阶段的上传步骤
# 替换原build job中的Upload artifact步骤 - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: | dist/ package.json package-lock.json
在部署阶段添加生产依赖安装
# 在deploy job的Deploy to Azure Web App步骤前添加: - name: Install production dependencies run: npm ci --only=production
3. 验证Azure Web App配置
- 确认Azure Web App的
WEBSITE_NODE_DEFAULT_VERSION设置为18.x,与构建环境的Node版本一致。 - 若需自定义启动命令,可在Azure门户的「配置」->「常规设置」中设置启动命令为
npm start(默认即为该值,一般无需修改)。
4. 清理旧部署文件
通过Kudu控制台清空/home/site/wwwroot目录,避免旧文件干扰新部署。
验证流程
- 推送修改后的代码到main分支,触发GitHub Actions构建部署。
- 部署完成后访问Azure Web App URL,检查页面是否正常加载。
- 查看Kudu日志,确认启动命令为
serve -s dist,无模块缺失类错误。
内容的提问来源于stack exchange,提问作者wmk
相关产品推荐
相关产品推荐

