部署到特定的子域。使用命令行 firebase 托管或指定要使用的 json

Deploy to a particular subdomain. using command line firebase hosting or specifying a json to use

我在带有一些子域的 firebase 托管上有一个开发和生产环境。

我在 gitlab 上的 CI/CD 在 dev 和 prod 上部署工作正常,具体取决于合并的分支(dev 用于 dev env 或 master 用于 prod)

我在 gitlab 中使用这个 CI :

script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-dev
    - firebase use env-dev --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting --non-interactive --token $FIREBASE_TOKEN

对于 prod,我只需要更改为使用 env-prod,它将毫无问题地部署到主域

现在对于子域,它们需要在 firebase.json 中用 :

精确
{
  "hosting": {
    "site": "myproject-dashboard-prod", // can be also myproject-dashboard-dev for dev env
    "public": "dist",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

我的问题是,google 网站上的 hsoting API 参考资料在哪里?我很难找到它 因为我希望有一种方法可以直接在 firebase 命令中进行规定,如果 google 允许的话,我的想法是这样的:

 - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting --non-interactive --token $FIREBASE_TOKEN --site myproject-dashboard-dev

这将解决我从自动化部署 CI/CD 的问题,否则我不知道如何在 json 对象中使站点动态化(module.export 不起作用在那种情况下,因为它不是导入的,而是直接由 firebase 命令读取的)或者也许有一种方法可以精确地确定 firebase 命令应该使用哪个 json,我可以制作其中的 2 个?

经过一些挖掘,发现您实际上可以在 firebase.json 中使用数组并确定应该在命令行中使用哪些设置,因此您可以像这样在子域上部署到 2 环境:

-firebase.json :

{
  "hosting": [
    {
      "site": "mydomain-subdomain-prod",
      "public": "dist",
      "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    },
    {
      "site": "mydomain-subdomain-dev",
      "public": "dist",
      "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    }
  ]
}

-.gitlab-ci.yml

dev:
  stage: deploy
  only:
    - dev
  script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-dev
    - firebase use mydomain-dev --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting:mydomain-subdomain-dev --non-interactive --token $FIREBASE_TOKEN

prod:
  stage: deploy
  only:
    - master
  script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-prod
    - firebase use mydomain-prod --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting:mydomain-subdomain-prod --non-interactive --token $FIREBASE_TOKEN

这是关联的firebase documentation

看起来site和target是一回事,有firebase的会员能解释一下这两者有什么区别吗?