如何从 firebase cli 切换应用程序?

How do I switch apps from the firebase cli?

这似乎是一件很容易做的事情,但不知为何,我被打败了。

我正在尝试使用 firebase-tools CLI 与我的数据库进行交互。我可以毫无问题地登录,当我输入 firebase list 时,我会得到一个包含我当前所有应用程序的列表。它还会告诉我当前连接到哪个应用程序。

我的问题是,我想连接到其他应用程序之一。我正在 运行 查询我的暂存应用程序,我需要 运行 在我的生产应用程序上查询它们。我可以在列表中看到正式版应用,但我找不到切换到该应用的方法。

想法?

在您运行firebase list所在的目录中,会有一个名为firebase.json的文件。如果您在文本编辑器中打开它,您将在其中看到应用名称。您可以在那里更改它或删除 firebase.json 以更改应用程序。

或者像 Jason 所说的那样省去编辑文本文件的麻烦:使用 firebase init.

在这里找到了一些有用的信息Firebase CLI Reference

以下代码适合我。

firebase use <project_id>

我宁愿使用脚本。考虑这样的项目结构:

your-project
├── .firebaserc
└── functions
   ├── package.json
   └── index.js

转到 .firebaserc 并遵循下一个示例

{
  "projects": {
    "default": "project-name",
    "prod": "other-name"
  }
}

然后转到 package.json 并添加以下脚本(changeToProdchangeToDev)。

{
  ...
  "scripts": {
    ...
    "changeToProd": "firebase use prod",
    "changeToDev": "firebase use default"
  },
  "dependencies": {
    ...
  },
  ...
}

如果您的 IDE 支持 npm 脚本,您可以 运行 使用 IDE UI,否则可以 运行 使用命令控制台。确保您位于 functions 文件夹中。

npm run-script changeToProd

您可以通过运行从终端输入以下命令或像我们刚才那样添加到脚本来验证您当前的项目

firebase use

你可以只使用命令行开关

--project=my-firebase-project

要更改 firebase 应用目标项目,您可以键入 "firebase use myProjectName"。我也用上面的答案 "firebase list" 来检查我有什么项目 (使用 angular 7 app 在 firebase cli 7.4 中为我工作)

如果您在 windows 上使用 Node.js,您的答案应该是

firebase use <project_id>

但没有 <> 例如

firebase use chat-app-2a150

您可以使用以下代码查看您的所有项目,以便选择正确的项目 ID 来使用

firebase projects:list

2020:

官方推荐的方式是使用“别名”:

在您的 .firebaserc 中,像这样设置不同的项目 ID:

{
  "projects": {
    "production": "my-project-id",
    "testing": "my-testing-project-id"
  }
}
// you can also add them interactively with `firebase use --add`

然后在 CLI 中切换项目 firebase use testing , firebase use production.

注意:切换项目不会产生任何 git 差异,它只会被记住在您的本地计算机中。使用firebase use查看当前正在使用的项目。

不常见的情况:

  • 如果您想使用自己的 ID 而不向项目所有者的 .firebaserc 提交更改,请按照接受的答案中所述在本地执行 firebase use my-own-id
  • 如果您希望人们分叉您的代码然后使用他们自己的 ID,请将 .firebaserc 添加到 .gitignore

补充@cutiko的回答

package.json

"scripts": {
...
"prod": "echo \"Switch to Production environment\" && firebase use prod && npm run runtimeconfig",
"dev": "echo \"Switch to Development environment\" && firebase use default && npm run runtimeconfig"
...

npm run runtimeconfig 获取自定义配置环境

.firebaserc

{
  "projects": {
    "default":"{project-dev-id}",
    "prod": "{project-prod-id}"
  }
}

我可能错了,但最初的问题似乎是关于在给定项目中更改应用程序,而不是简单地更改项目。

此答案是关于在项目中更改应用程序和 site_IDs。

就我而言,我有一个包含 2 个网络应用程序的项目 (CoolProject):

  • 评估表:form
  • 一个主要网站:website

这两个应用程序在本地和 GitHub 中都位于单独的存储库中。

每个应用程序都有自己特定的 site_ID:

  • 形式:coolproject-form[.web.app]
  • 网站:coolproject-website[.web.app]

我首先设置 form 应用程序并毫无问题地部署到 coolproject-form。但是当我创建 web 应用程序(并关联 coolproject-website site_ID)并尝试使用 firebase deploy --only hostingfirebase deploy --only hosting:website 部署它时,它错误地将其部署到 coolproject-form 覆盖 form 应用程序。

这就是我最终解决问题的方式(基于此Firebase documentation):

  1. 检查两个应用程序和相应的 site_IDs 是否正确设置:
firebase apps:list
firebase hosting:sites:list
  1. 设置 website 托管部署目标(通过 .firebaserc
firebase target:apply hosting website coolproject-website
  1. 更新 firebase.json(针对 website 应用程序):
...
"hosting": [{
    "target": "website",
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }],
...
  1. 部署
firebase deploy --only hosting

现在 website 应用程序已正确部署到 coolproject-website.web.app