使用多个项目时,Firebase部署到错误的主机

使用多个项目时,Firebase部署到错误的主机,firebase,firebase-hosting,firebase-cli,Firebase,Firebase Hosting,Firebase Cli,我有两个firebase项目:myapp用于prod,以及myapp dev用于dev环境。 我首先使用firebase cli用“myapp”初始化我的项目,因此所有文件都是用它生成的,包括托管资源myapp(因此我可以将我的应用部署到myapp.web.app) 然后,我添加了第二个firebase项目(“myapp-dev”)。我负责这些 firebase use --add myapp-dev # I have selected the right myapp-dev firebase

我有两个firebase项目:
myapp
用于prod,以及
myapp dev
用于dev环境。
我首先使用firebase cli用“myapp”初始化我的项目,因此所有文件都是用它生成的,包括托管资源
myapp
(因此我可以将我的应用部署到
myapp.web.app

然后,我添加了第二个firebase项目(“myapp-dev”)。我负责这些

firebase use --add myapp-dev  # I have selected the right myapp-dev firebase project and set `dev` as short name
firebase target:apply hosting myapp-dev myapp  # note here that I also use name "myapp" as resource
我已经手动更改了我的
.firebasesrc
,因为我希望开发项目是默认的

因此,我的
.firebasesrc
如下所示

{
  "projects": {
    "default": "myapp-dev",
    "prod": "myapp"
  },
  "targets": {
    "myapp": {
      "hosting": {
        "myapp": [
          "myapp"
        ]
      }
    },
    "myapp-dev": {
      "hosting": {
        "myapp": [
          "myapp"
        ]
      }
    }
  }
}
firebase.json

{
  "hosting": [
    {
      "target": "myapp",
      "public": "public",
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    }
  ],
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint"
    ]
  }
}

现在,当我运行这些行时,webapp被部署到prod env,而
函数被部署到dev env

firebase use myapp-dev
firebase deploy
编辑
运行
firebase目标:应用托管myapp myapp dev
帮助

我认为您的配置应该是这样的

文件
.firebassrc

  "targets": {
    "myapp-dev": {
      "hosting": {
        "myapp-dev": [
          "myapp-dev"
        ],
        "myapp": [
          "myapp"
        ]
      }
    }
  }
文件
firebase.json:

  "hosting": [
    {
      "target": "myapp-dev",
      "public": "build",
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    },
    {
      "target": "myapp",
      "public": "dist/myapp", /* folder */
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    }
  ]

然后使用
target

部署在我的案例中,我将同一个应用部署到两个不同的环境(开发和生产)。关于这个场景的文档不是很清楚,为了获得正确的配置,我们花了一些时间

.firebaserc

{
  "projects": {
    "production": "myapp-prod",
    "development": "myapp-dev"
  },
  "targets": {
    "myapp-prod": {
      "hosting": {
        "myapp": [
          "site-name-prod"
        ]
      }
    },
    "myapp-dev": {
      "hosting": {
        "myapp": [
          "site-name-dev"
        ]
      }
    }
  }
}
firebase.json

{
  "hosting": [{
    "target": "myapp",
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [ {
      "source": "**",
      "destination": "/index.html"
    } ]
  }]
}
部署到生产运行

firebase use production
firebase deploy
部署发展

firebase use development
firebase deploy
在项目中运行firebase deploy时,它将使用firebase.json的hosting部分中指定的目标来部署到.firebaserc中目标的hosting部分中指定的站点名称

{
  "projects": {
    "production": "myapp-prod",
    "development": "myapp-dev"
  },
  "targets": {
    "myapp-prod": {
      "hosting": {
        "myapp": [
          "site-name-prod"
        ]
      }
    },
    "myapp-dev": {
      "hosting": {
        "myapp": [
          "site-name-dev"
        ]
      }
    }
  }
}