Firebase 托管配置在使用 Github Actions 时需要公共字段,但如果在本地部署则有效?

问题描述 投票:0回答:2

我在 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. 

.firebaserc

{
  "hosting": {
    "source": ".",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "frameworksBackend": {
      "region": "us-central1"
    }
  }
}

.github/workflows/deploy-to-firebase-hosting.yml

这是由

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 构建运行,这是否有所不同。
    • ChatGPT 建议我使用
      out
      作为公共目录,但这导致了错误
      Error: Directory 'out' for Hosting does not exist.
  • 包括
    source
    ,但 Firebase 托管需要
    public
    (但如果我在本地部署,我可以摆脱
    public
firebase github-actions firebase-hosting
2个回答
0
投票

我发现升级

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

还有无数其他权限问题需要解决,但至少这个问题不再是这样。


0
投票

要修复错误

Directory 'out' for Hosting does not exist.
,只需从
out
中删除
.gitignore,
条目或对其进行评论,就像这样,

# next.js
/.next/
#/out/
© www.soinside.com 2019 - 2024. All rights reserved.