Firexport指南

如何导出 Firestore 安全规则和索引

Firebase 控制台会在编辑器中显示 Firestore 安全规则、在表格中显示索引,却没有把其中任何一个保存为文件的按钮。Firebase CLI 部署的是 firestore.rules 和 firestore.indexes.json 这两个文件。要得到它们,有三种方法。哪一种合适,取决于你是否从项目文件夹部署,以及你需要哪个版本的规则。

更新于 2026年10月27日。 方法 1 中的扩展程序 Firexport 是我们开发的。方法 2 和 3 不需要它。

简短回答

  • 不用 CLI,直接从控制台把规则或索引保存为文件: 用浏览器扩展程序从规则(Rules)和索引(Indexes)标签页导出。 方法 1
  • 一个用 firebase deploy 进行部署的项目文件夹: firebase init firestore,或 firebase firestore:indexes。 方法 2
  • 只要规则,而且只要一次: 从规则(Rules)标签页复制。 方法 3
1. 控制台 + 扩展程序2. Firebase CLI3. 从控制台复制
准备工作安装一个 Chrome 扩展程序Node.js 和 Firebase CLI无
规则firestore.rules,免费firestore.rules粘贴到文件中
旧版本和草稿可以,以编辑器显示的为准不可以,只有最新发布的规则可以
索引JSON 格式的表格,免费。Advanced 为 firestore.indexes.jsonfirestore.indexes.json不可以

1. 用 Firexport 从 Firebase 控制台导出

Firexport 是一款免费的 Chrome 扩展程序,会在 Firestore 的规则(Rules)和索引(Indexes)标签页上添加一个导出按钮。无需登录,也不会从你的数据库读取任何内容:Firexport 保存的是控制台已经显示的内容。

安全规则

  1. 从 Chrome 应用商店安装 Firexport。
  2. 在 Firebase 控制台中,打开 Firestore Database > 规则(Rules)。
  3. 要导出旧版本,请在左侧列表中选择它。编辑器中尚未发布的更改会按当前状态导出。
  4. 点击编辑器上方那一栏右端的导出。Firexport 会把编辑器中的文本保存为 firestore.rules。

文件内容与编辑器中的内容逐字节一致,包括注释和空行。导出规则在所有方案中都免费。

Firebase 控制台中 Firestore 的规则标签页,左侧是以往的版本,规则编辑器上方是 Firexport 添加的“导出”按钮
“导出”按钮位于编辑器上方,保存的是你在左侧选择的版本。

索引

  1. 打开 Firestore Database > 索引(Indexes)。
  2. 点击添加索引(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 控制台中 Firestore 的索引标签页,列出了复合索引,“添加索引”旁边是 Firexport 添加的“导出”按钮
“导出”按钮位于“添加索引”旁边。翻动表格的页面不会从你的数据库读取任何内容。

不用安装 Firebase CLI,直接从控制台导出 Firestore 规则和索引。

添加到 Chrome — 免费

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.json
  • init 会询问项目和文件名,并写出一个指向这些文件的 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 保存它们,都不会从你的数据库读取任何内容。