使用GitHub Actions部署Azure App Service Node API时遇package.json找不到问题
问题分析
你的部署流程存在两个核心问题:
- 构建产物上传错误:构建阶段你上传的是整个仓库根目录(
path: .),而非api子文件夹的内容。这导致部署到Azure后,站点根目录下仍保留api子文件夹,应用启动时的工作目录是站点根目录,代码里的../package.json自然找不到(因为站点根目录的上一级不存在)。 - .deployment文件未生效:
azure/webapps-deploy动作不会读取仓库根目录的.deployment配置,该文件仅在FTP/本地Git部署等场景下生效,所以你的project = api设置没有起到作用。
解决方案
推荐采用第一种方案,直接上传api文件夹的内容,确保部署后的目录结构与本地开发一致:
方案1:修改构建阶段的产物上传路径
更新GitHub Actions YAML中build任务的Upload artifact步骤,将path改为api/:
- name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: api/
这样部署后,Azure App Service的站点根目录就是原仓库api文件夹的内容,代码里的路径引用(比如./package.json)会正常工作,不会出现向上级目录查找的错误。
方案2:调整部署目标路径并设置启动命令
如果需要保留上传整个仓库的逻辑,可修改部署步骤的package路径为./api,同时配置Azure的启动命令确保在api目录下运行应用:
- 更新部署步骤:
- name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: 'hobbeez' slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_16C52153CB9348578BF747E038921ED6 }} package: ./api
- 配置Azure启动命令:
进入Azure门户的App Service -> 配置 -> 常规设置,在「启动命令」中填入npm start(或你的实际启动命令,比如node server.js),确保应用在api目录上下文启动。
额外检查
如果上述方案仍未解决问题,检查你的Node.js代码中是否存在硬编码的../package.json引用,本地运行正常是因为本地开发时工作目录是api文件夹,但部署后工作目录变化导致路径错误,这种情况需要将代码中的路径修正为./package.json。
内容的提问来源于stack exchange,提问作者Miaourt
相关产品推荐
相关产品推荐

