如何导出 Firestore 安全规则和索引
Firebase 控制台会在编辑器中显示 Firestore 安全规则、在表格中显示索引,却没有把其中任何一个保存为文件的按钮。Firebase CLI 部署的是 firestore.rules 和 firestore.indexes.json 这两个文件。要得到它们,有三种方法。哪一种合适,取决于你是否从项目文件夹部署,以及你需要哪个版本的规则。
更新于 2026年10月27日。 方法 1 中的扩展程序 Firexport 是我们开发的。方法 2 和 3 不需要它。
简短回答
| 1. 控制台 + 扩展程序 | 2. Firebase CLI | 3. 从控制台复制 | |
|---|---|---|---|
| 准备工作 | 安装一个 Chrome 扩展程序 | Node.js 和 Firebase CLI | 无 |
| 规则 | firestore.rules,免费 | firestore.rules | 粘贴到文件中 |
| 旧版本和草稿 | 可以,以编辑器显示的为准 | 不可以,只有最新发布的规则 | 可以 |
| 索引 | JSON 格式的表格,免费。Advanced 为 firestore.indexes.json | firestore.indexes.json | 不可以 |
1. 用 Firexport 从 Firebase 控制台导出
Firexport 是一款免费的 Chrome 扩展程序,会在 Firestore 的规则(Rules)和索引(Indexes)标签页上添加一个导出按钮。无需登录,也不会从你的数据库读取任何内容:Firexport 保存的是控制台已经显示的内容。
安全规则
- 从 Chrome 应用商店安装 Firexport。
- 在 Firebase 控制台中,打开 Firestore Database > 规则(Rules)。
- 要导出旧版本,请在左侧列表中选择它。编辑器中尚未发布的更改会按当前状态导出。
- 点击编辑器上方那一栏右端的导出。Firexport 会把编辑器中的文本保存为
firestore.rules。
文件内容与编辑器中的内容逐字节一致,包括注释和空行。导出规则在所有方案中都免费。

索引
- 打开 Firestore Database > 索引(Indexes)。
- 点击添加索引(Add index)旁边的导出。
- 在免费版中,Firexport 会把你正在查看的表格的每一页保存为 JSON:手动(Manual)下是复合索引,自动(Automatic)下是单字段索引豁免。它就是控制台显示的那张表格,所以
firebase deploy无法读取它,文件名也不是firestore.indexes.json。 - 使用 Advanced 时,Firexport 保存的是
firestore.indexes.json:无论当前显示的是哪张表格,复合索引和字段覆盖(field overrides)都会一起保存,格式与firebase firestore:indexes输出的相同。对于命名数据库,文件名是firestore.<database>.indexes.json。 - 与 CLI 生成的文件有一处不同:设置了 TTL 政策但没有索引豁免的字段不在其中,因为控制台不会加载这些字段。

不用安装 Firebase CLI,直接从控制台导出 Firestore 规则和索引。
2. 用 Firebase CLI 下载
Firebase CLI 在文件夹中设置 Firestore 时会写出这两个文件:firebase init firestore 会下载已部署到项目的规则和索引。如果只要索引,firebase firestore:indexes 会输出 firestore.indexes.json。两者都免费,都需要 Node.js。
npm install -g firebase-tools
firebase login
# Rules and indexes, into firestore.rules and firestore.indexes.json
firebase init firestore
# Or only the indexes
firebase firestore:indexes --project your-project-id > firestore.indexes.jsoninit会询问项目和文件名,并写出一个指向这些文件的firebase.json。它下载的是最新发布的规则,而不是旧版本或未发布的草稿。- 对于
(default)以外的数据库,请给firestore:indexes加上--database <id>。init会询问要设置哪个数据库,但查找规则时不带数据库名称,所以请确认firestore.rules来自你想要的那个数据库。
3. 从控制台复制规则
如果只需要一次当前的规则,仅用控制台就够了。打开 Firestore Database > 规则(Rules),在编辑器中点击一下,按 Ctrl+A(Mac 上为 ⌘A)全选,复制后粘贴到名为 firestore.rules 的文件中。要复制旧版本,请先在左侧选择它。
索引没有这样的捷径。索引(Indexes)标签页是表格而不是文本,所以要得到索引文件,就得把每个索引手动写进 firestore.indexes.json。
把文件部署回去
这两个文件要放在一个指明它们的 firebase.json 旁边,也就是 firebase init firestore 写出的那个文件:
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
}
}然后运行 firebase deploy --only firestore;只部署其中一个时,改用 firestore:rules 或 firestore:indexes。
- 如果项目中有文件未列出的索引,CLI 会把它们列出来,并在删除之前征求你的确认。
--force会不经询问直接删除它们。文件中缺少的 TTL 政策不会被删除。 - 加上
--project,就能把同样的规则和索引部署到另一个项目,例如从生产环境部署到预发布环境。 - 部署的规则会立即对所有客户端生效,所以请先在 Firestore 模拟器中试验更改。
常见问题
Firebase 控制台能下载 Firestore 安全规则吗?
没有按钮可以下载。规则(Rules)标签页在编辑器中显示它们,你可以从中复制;firebase init firestore 会把它们下载到 firestore.rules;Firexport 这样的浏览器扩展程序会添加一个“导出”按钮,把它们保存为 firestore.rules。
如何把 Firestore 索引导出为 firestore.indexes.json?
用 Firebase CLI 运行 firebase firestore:indexes > firestore.indexes.json,或者用 Firexport Advanced 从索引(Indexes)标签页导出这个文件。两者都会以 firebase deploy 读取的格式写出复合索引和字段覆盖(field overrides)。
如何把 Firestore 索引复制到另一个项目?
从第一个项目导出 firestore.indexes.json,然后运行 firebase deploy --only firestore:indexes --project,并带上另一个项目的 ID。新索引会在后台构建,需要该索引的查询在它显示为已启用(Enabled)之前都会失败。
可以获取 Firestore 规则的旧版本吗?
可以,通过控制台。规则(Rules)标签页在左侧列出以往的版本;选择一个即可查看,然后复制它,或者用 Firexport 导出。firebase init firestore 只会下载最新发布的规则。
导出规则或索引会消耗 Firestore 读取次数吗?
不会。规则和索引定义不是文档,所以无论通过控制台、CLI 还是 Firexport 保存它们,都不会从你的数据库读取任何内容。
