firebase-tools:
[email protected]
平台:
苹果系统
MacOS的,节点10.15.3, [email protected]
在Firebase控制台上创建两个托管网站。
跑
'firebase目标:应用托管dev firebase-hosting-id'
跑
'firebase部署-仅托管:dev '
部署成功
[info] Project Console: https://console.firebase.google.com/project/project-name/overview
[debug] [2019-05-01T19:12:12.726Z] TypeError: Cannot read property 'deploys' of undefined
at /Users/reeda/.nvm/versions/node/v10.15.3/lib/node_modules/firebase-tools/lib/deploy/index.js:88:36
at process._tickCallback (internal/process/next_tick.js:68:7)
[error]
[error] Error: An unexpected error has occurred.
最近在此流程中进行了一些调整。 该错误来自(源): https :
@Memeriaj ,您最近可以处理这个问题吗?
我想我可能知道这是怎么回事。 您的firebase.json
配置文件中是否有"target": "dev"
? 我相信我们过滤掉了所有与hosintg:dev
不匹配的配置,并且留下了一个空数组。 然后,我们完成了该空阵列的所有部署步骤,实际上什么也没做。 然后,最后显示控制台链接和指向您新部署的主机站点的链接,由于我们实际上并未部署任何内容,因此会弹出此错误。
在这种情况下,我们肯定需要适当的错误,以说明我们没有部署任何东西。
(与问题无关:通常,您希望在Firebase项目级别上切换环境级别,而不是在同一项目内的不同托管站点上切换(尽管您可能有一个Blog站点,一个Web应用站点,以及文档所在的网站都位于同一项目的不同托管网站上的相同环境中。)主要是因为诸如Firebase Auth之类的东西在项目中只有一个实例。理想情况下,您的firebase.json
文件是以这样的方式进行设置,您将能够像firebase use dev
, firebase deploy
,检查dev以确保一切正常, firebase use staging
, firebase deploy
,...)
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
}
}
我认为您提到的配置位于firebase bashrc文件中,而不是firebase json文件中。
在firebase.json文件的托管部分下,您需要具有"target": "dev"
才能使firebase deploy --only hosting:dev
工作。 --only
标志的作用类似于过滤器,并且在Hosting配置中没有target
字段,然后CLI不会部署任何内容(这应该是一条带有有用消息的错误,但现在只是盲目地接受它)。
抱歉,目前尚不清楚json在目标字段中的放置位置,我将其放置在json的根目录(它没有用)还是应该在托管的根目录中(对我也没有用)。
另外,我的firebaserc文件引用了我的根项目,但没有引用我的第二个托管站点,因此我不确定CLI工具将如何理解要部署到的位置。
它应该放在firebase.json
文件的Hosting部分中,因此看起来像:
{
// ...
"hosting": [{ // Can be an array and have multiple configs, or an object if you've only got a single config
"target": "blog",
"public": "build/blog"
// ...
}],
// ...
}
该文档页面详细介绍了每个步骤,并简要介绍了为什么您可能会使用目标和多个站点。
对于firebase target:apply hosting dev firebase-hosting-id
则firebase-hosting-id
应该是您计划部署到的站点名称。 这会将目标设置为您当前在CLI中使用的项目,该项目来自firebase use
命令。 但是也许我误解了您要完成的工作。
谢谢,我似乎取得了一些进展,但现在我找不到404错误实体。
假设我在Firebase中的项目是reedy-1,而我的目标是reedy-1-api
当我在托管中将目标添加为reedy-1-api时,尝试部署它时,它抱怨未找到该实体。
我可以在目标下的firebaserc文件中看到
"targets": {
"reedy-1": {
"hosting": {
"dev-api": [
"reedy-1-api"
]
}
}
}
您的.firebaserc
文件中的摘录对我来说是正确的。
可能的问题(您可能已经检查了这些,但是我列出了它们是为了防止其他人稍后发现此问题):
firebase use
的正确项目firebase use --add
的项目列表为您完成此操作)<site-name>.firebaseapp.com
轻松找到)如果您尝试使用debug标志进行部署,那么哪一部分将返回404? 我怀疑它会来自POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions
因为这是实际托管部署的第一个请求。 如果是这种情况,那么我认为您设置为目标的站点名称有问题。 如果这是之前的要求,那么我最好的猜测是您的项目有什么问题。
好的,设法弄清楚发生了什么。
您也需要一个更好的错误消息,因此,如果您未处于火热之中,那么错误消息是404,则由于价格计划,我无法部署该消息并不明显。
升级后,繁荣,一切正常。
感谢您的帮助,很高兴关闭此问题。
哇,等等。 您需要升级到Blaze才能使部署正常工作吗? 这是什么原因,因为您尚未创建新的托管站点,并且需要升级才能创建新的托管站点? 还是您先前已升级到Blaze,创建了第二个托管站点,降级了计费计划,然后尝试部署?
您是否还偶然知道哪个请求引发了该错误? 因为您是对的,所以该错误根本无济于事,我想找出错误的出处,以便让我提供关于操作的指导,而不是一些通用的404文本。
是的,这有点令人困惑,我很确定我在免费层上创建了第二个站点,然后我在部署时遇到了问题,并认为可能是这样,所以我进行了升级。 当我意识到我需要在github上提出问题时,我降级了,当我这样做时,firebase Web控制台中开始发生奇怪的事情。 第二个托管网站将出现,但是当我单击它时,它将显示一个空白屏幕。
收到您的支持后,我便尝试进行部署,部署时显示404。 所以我想我会升级回火,就像魔术一样奏效。
有同样的问题
@isevcik真的吗? 我相当确定我们已解决了该问题(我确实应该解决此问题)。 您是否做了类似的事情来升级您的项目,然后降级它?
您可能应该通过电子邮件发送给支持部门,以便我们获得您项目的详细信息并进行修复。 您应该确保和我一起提及这个GitHub问题,以便他们知道将其发送给谁。
@isevcik我遇到了同样的错误,并认为我也遇到了同样的问题,但事实证明这是.firebaserc中projectid中的错字。
我使用此命令添加了这些目标,而不是手动执行,并且它起作用了。
注意:您还必须将目标添加到firebase.json。
firebase target:应用type target-name resource-name
您好,同样的问题:
[debug] [2019-08-09T17:34:19.322Z] TypeError: Cannot read property 'deploys' of undefined
at /Users/kevinliu/.npm-global/lib/node_modules/firebase-tools/lib/deploy/index.js:84:36
at processTicksAndRejections (internal/process/task_queues.js:85:5)
[error]
[error] Error: An unexpected error has occurred.
index.js
:
if (deployedHosting) {
_.each(context.hosting.deploys, function (deploy) {
logger.info(clc.bold("Hosting URL:"), utils.addSubdomain(api.hostingOrigin, deploy.site));
});
const versionNames = context.hosting.deploys.map((deploy) => deploy.version);
return { hosting: versionNames.length === 1 ? versionNames[0] : versionNames };
}
@hpoit我也遇到那个错误。 您解决了吗? 如果是这样,您做了什么更改?
[debug] [2019-08-16T18:44:01.159Z] TypeError: Cannot read property 'deploys' of undefined
at C:\Users\Kraken\AppData\Roaming\npm\node_modules\firebase-tools\lib\deploy\index.js:84:36
at process._tickCallback (internal/process/next_tick.js:68:7)
[error]
[error] Error: An unexpected error has occurred.
对于与@Memeriaj建议联系的支持者,此问题是否已解决? 如果可以,可以在此处发布详细信息以备将来参考吗?
@MaxInertia是的,我解决了它,格式化并擦除了我的整个机器:-)
我认为当在配置中找不到部署目标时,它只会抛出此错误。 我会在两个config firebase文件中检查您的配置。 如果您需要其他意见,请在此处发布内容。
同样的事情,当尝试使用Firebase 7.3.1部署辅助网站时
实际上,错误在firebase.json中,我指定了错误的“目标”
在此指南的帮助下,我可以通过创建新的部署目标来解决此问题:
https://firebase.google.com/docs/hosting/multisites?authuser=1#set_up_deploy_targets
我发出了一个命令:
firebase target:apply hosting blog myapp
并将target
密钥添加到我的firebase.json
{
"hosting": {
"target": "myapp",
...
}
...
}
编辑:当我在全新的firebase项目上设置首次托管时,我就遇到了这个问题。
我也能够解决它。 我的问题是,当我使用文档中概述的命令创建部署目标时:$ firebase target:apply hosting target-name resource-name ,我将主项目作为资源名称。 我在.firebaserc文件中对此进行了更改,并运行了firebase deploy命令,它可以正常工作。 下面的例子:
"targets": {
"firebase-project-name": {
"hosting": {
"admin": [
"admin-project"
]
}
}
}
嗨,我也面临着相同的问题,只是方式有所不同(对于自定义添加域)
我可以部署到具有不同目标名称的多个托管中。 但是当我尝试部署到我的自定义添加域中时。 我收到错误:HTTP错误:404,找不到请求的实体。
我的自定义域是3dprinter.froozen.in(通过单击添加自定义域按钮添加到默认主机内的firebase中)
我的自定义域已添加到我的项目默认域内。
请帮助我进一步进行
我们将需要显示确切的失败呼叫的调试日志,以提供帮助
诊断问题。
2020年1月4日星期六,上午12:52 nandha [email protected]写道:
嗨,我也面临着相同的问题,只是方式有所不同(自定义
添加域)我可以部署到具有不同目标名称的多个托管中。 但
当我尝试部署到我的自定义添加域中时。 我收到错误消息:HTTP错误:404,找不到请求的实体。我的自定义域是3dprinter.froozen.in(已添加到firebase中
通过单击添加自定义域按钮进行默认托管)
我的自定义域已添加到我的项目默认域内。
请帮助我进一步进行-
您收到此消息是因为您已订阅此线程。
直接回复此电子邮件,在GitHub上查看
https://github.com/firebase/firebase-tools/issues/1232?
或退订
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
。
嗨@mbleigh ,
我的问题解决了
如果没有其他查询,我们可以关闭此问题
如有疑问,请在下面评论
我尝试使用“错误:HTTP错误:404,找不到请求的实体”的问题
```
“目标”:{
“项目名”: {
“托管”:{
“ dev”:[
“ dev.site.com”
],
“产品”:[
“ site.com”
]
}
}
}
istead of
```
"targets": {
"projectname": {
"hosting": {
"dev": [
"dev-site-name"
],
"prod": [
"ez-site-name"
]
}
}
}
我通过确保解决了我的问题:
targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
{
"projects": {
"default": "my-project-id"
},
"targets": {
"my-project-id": {
"hosting": {
"my-blog": [
"my-blog-host-id"
]
}
}
}
}
targets
部分可以使用命令firebase target:apply hosting my-blog my-blog-host-id
hosting
作为数组,并且其项必须具有target: <TARGET_NAME>
{
"hosting": [{
"target": "my-blog",
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}]
}
重要的部分是将hosting
制成一个数组,并将target
到其项目中。
我今天也受到了打击,将firebase.json hosting
为array确实很痛苦!
现在,我需要复制每个条目(即使目标相同,即使条目相同),这些条目在所有环境中都有很多标头配置,突然之间我需要管理4x json配置。
无论如何要重用Firebase JSON中的默认托管?
同一项目中的多个站点不打算用作“环境”-如果您具有“ staging”,“ dev”等站点,则这些站点应该是不同项目中的站点,并且firebase use
命令可以提供帮助您可以在它们之间切换/独立部署。
如果这不是您要执行的操作,您能否帮助我理解您项目中每个站点的firebase.json
配置为何相同?
好吧,总的来说,我们目前在不同的GCP项目中有4个不同的环境,但是我们需要部署一个临时环境(包括其他部分,而不仅仅是Firebase托管),重新使用现有环境要简单得多GCP项目需要一两个月,而不是添加一个全新的项目。
实现此atm的唯一方法是将Firebase.json托管配置重复5次,并向每个配置添加唯一的目标。
我猜想混淆的根源是如果您具有默认的主机配置,则期望它可以与任何目标或项目一起使用,但是我想这是与项目+目标相比不同项目如何使用它的误解。
显然仍然可以使它起作用,只是花了一个时间来了解为什么出现此错误。
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined
错误消息肯定是不好的,FWIW我们现在正在开发中的“临时预览”有更好的解决方案😄
只是添加到“数组修复”中,我们部署了两个站点,在将目标更改为数组之后,我能够定位正确的站点:
{
"hosting": [
{
"target": "web",
"public": "public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
{
"target": "admin",
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
]
}
但是,当我们使用React时,“管理员”返回了一个空白页,诀窍是让Build成为Public点。
"public": "build",
我遇到了这个问题,根据以上内容和文档,一切都正确。 但是我仍然得到错误。 不管我使用哪个目标,即使所有文件和设置都报告为正确的,它似乎也不尊重它。 上面没有其他内容吗?
运行: firebase target:apply hosting second-project-id second-project-id
然后打开.firebaserc文件,并确保它看起来如下
`{
“目标”:{
“ main-project-id”:{
“托管”:{
“ second-project-id”:[
“ second-project-id”
]
}
}
}
}`
然后打开firebase.json文件并确保其具有以下内容
“ target”:“ second-project-id”,
嗯,我不知道该怎么做才能使它正常工作,但是目前它可以与.firebaserc
:
{
"projects": {
"default": "mainProjectId"
},
"targets": {
"mainProjectId": {
"hosting": {
"production": [
"mainProjectId"
],
"staging": [
"secondProjectId"
]
}
}
}
}
最有用的评论
我通过确保解决了我的问题:
targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
targets
部分可以使用命令firebase target:apply hosting my-blog my-blog-host-id
hosting
作为数组,并且其项必须具有target: <TARGET_NAME>
重要的部分是将
hosting
制成一个数组,并将target
到其项目中。