我在 Firebase 托管上托管 NextJS Web 应用程序。我希望使用 Github Actions Integration 来分发我的 Web 应用程序。
在文档中,
public
字段是必需的,但我指定了source
:https://firebase.google.com/docs/hosting/full-config#specify-files-to-deply
当我在本地计算机上运行
firebase deploy --only hosting
(没有 public
)时,一切都会按预期运行,并且我的 Web 应用程序已部署。
我的问题是使用 Github Actions。当我在 Github 上批准我的 Pull 请求时,操作会触发,但在
FirebaseExtended/action-hosting-deploy@v0
步骤上出现错误:
Must supply a \"public\" directory or at least one rewrite or redirect in each \"hosting\" config.
{
"hosting": {
"source": ".",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"frameworksBackend": {
"region": "us-central1"
}
}
}
这是由
firebase init hosting
命令自动生成的。
name: Deploy to Firebase Hosting on PR merge
"on":
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm ci && npm run build
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_CHECKMATE_PROD }}"
channelId: live
projectId: myproject
我将
"public": "public"
添加到 .firebaserc
中,部署成功,但页面如下所示:
据我所知,我的问题是:
public
字段,但 Firebase Hosting 在文件中看不到任何内容。也许我没有指定正确的 public
目录?不确定如果 NextJS 构建运行,这是否有所不同。
out
作为公共目录,但这导致了错误 Error: Directory 'out' for Hosting does not exist.
source
,但 Firebase 托管需要 public
(但如果我在本地部署,我可以摆脱 public
)我发现升级
firebase-tools
使这个问题消失了。
npm install firebase-tools
当我升级并重新运行时,v2 变为 v3:
steps:
- uses: actions/checkout@v3
- run: npm ci && npm run build
- uses: FirebaseExtended/action-hosting-deploy@v0
还有无数其他权限问题需要解决,但至少这个问题不再是这样。
要修复错误
Directory 'out' for Hosting does not exist.
,只需从out
中删除.gitignore,
条目或对其进行评论,就像这样,
# next.js
/.next/
#/out/