Github Actions部署Azure时无法找到package.json问题求助
GitHub Actions部署Azure Web应用时找不到package.json的解决方法
近期使用GitHub Actions部署Azure托管的Web应用,突然频繁在npm install阶段失败,提示无法找到package.json文件。此前该部署流程已成功执行数百次,代码未做任何变更,原Workflow配置及项目结构如下:
原Workflow配置
on: push: branches: - development workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Node.js version uses: actions/setup-node@v1 with: node-version: '18.x' #zips the repo, helps with transferring a large amount of files - name: Zip artifact for deployment run: zip release.zip ./* -r - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: release.zip deploy: runs-on: ubuntu-latest needs: build environment: name: 'development' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: - name: Download artifact from build job uses: actions/download-artifact@v2 with: name: node-app - name: unzip artifact for deployment run: unzip release.zip # removes the release.zip from being pushed to the final deployment - name: Remove File uses: JesseTG/rm@v1.0.0 with: path: release.zip - name: npm install, build, and test run: | npm install npm run build --if-present - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: 'redacted' slot-name: 'redacted' publish-profile: ${{ redacted }} package: .
项目结构
--project: ---github/workflows ---public ---src --.gitignore --.prettierrc.cjs --package-lock.json --package.json --server.js
问题原因
核心问题出在打包和解包的路径处理上:
- 原打包命令
zip release.zip ./* -r会将当前目录下的所有文件/文件夹以./前缀打包,解包时这些内容会被放到当前工作目录的子层级中,导致项目根文件(如package.json)不在npm install执行的根路径下。 - 后续执行
npm install时,自然找不到package.json文件。
解决步骤
方法1:修正打包命令
将打包命令改为直接打包当前目录的所有内容,避免路径前缀导致的层级问题:
zip -r release.zip * .[^.]*
*匹配所有非隐藏文件,.[^.]*匹配所有隐藏文件(如.gitignore),确保完整复制项目结构。
方法2:修正解包命令
在解包步骤添加-d .参数,强制将内容解压到当前工作目录根路径:
unzip release.zip -d .
方法3:简化Workflow(推荐)
将build和deploy合并为单个job,减少文件传输环节的潜在问题,同时提升部署效率:
on: push: branches: - development workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest environment: name: 'development' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: - uses: actions/checkout@v2 - name: Set up Node.js version uses: actions/setup-node@v1 with: node-version: '18.x' - name: npm install, build, and test run: | npm install npm run build --if-present - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: 'redacted' slot-name: 'redacted' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: .
内容的提问来源于stack exchange,提问作者Austin Howard
相关产品推荐
相关产品推荐

