Firebase技术疑问:部署时区分托管与云函数及跨端项目配置
嘿,我来帮你拆解这两个Firebase部署相关的问题,都是日常开发里很常见的场景:
问题1:使用
firebase deploy命令部署至托管服务时,Firebase如何判断是部署至托管而非云函数? Firebase CLI判断部署目标的核心依据是项目根目录下的firebase.json配置文件,以及你执行命令时的参数,具体逻辑是这样的:
- 首先看
firebase.json里的配置项:如果文件里包含hosting字段(定义了托管的静态文件目录、域名规则等),CLI就知道你有托管服务需要部署;如果有functions字段,就知道有云函数需要部署。 - 其次看你执行的命令参数:
- 如果你直接运行
firebase deploy,CLI会自动检测所有已启用的服务(对应firebase.json里的配置项),一起部署所有服务(包括托管和云函数,如果你都配置了的话)。 - 如果你只想部署托管,需要加上
--only hosting参数(即firebase deploy --only hosting),这时候CLI会只处理托管相关的配置和文件,完全忽略云函数部分。 - 反过来,部署云函数用
firebase deploy --only functions就只会处理云函数。
- 如果你直接运行
- 额外补充:你当初执行
firebase init时选择的服务,会自动生成对应的firebase.json配置项,这也是CLI识别服务的基础。比如你当初选了Functions,就会生成functions字段;现在要加Hosting,要么重新init选Hosting,要么手动添加hosting配置。
问题2:已有云函数的Firebase项目,如何新增网站托管部署?
既然你已经有了运行正常的云函数项目,要加托管非常简单,按下面的步骤来就行:
添加托管配置
打开你的项目根目录,运行firebase init hosting:- 选择你已有的Firebase项目(和云函数用同一个);
- 指定托管的静态文件目录(默认是
public,你可以改成自己的网站目录,比如dist或者build,只要是你的网站编译后的静态文件所在的地方就行); - 询问是否配置为单页应用(如果你的网站是React/Vue这类SPA,选
Yes,否则选No); - 询问是否覆盖现有文件?选
No!避免把你现有的云函数配置或者其他文件覆盖了。
执行完后,你的firebase.json会自动新增hosting字段,不会影响原来的functions配置。
准备网站文件
把你的网站静态文件(HTML、CSS、JS、图片等)放到你刚才指定的目录里(比如默认的public)。如果是框架项目,先执行编译命令生成静态文件(比如npm run build),再把build/dist里的内容移到指定目录。部署托管服务
运行firebase deploy --only hosting,这个命令只会部署托管服务,完全不会影响你已经运行正常的云函数。部署完成后,CLI会给你一个托管的域名,直接访问就能看到你的网站了。
如果之后你想同时部署云函数和托管,直接运行firebase deploy就行,CLI会自动处理两个服务的部署。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

