如何匯出 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:無論顯示的是哪個表格,複合式索引和欄位覆寫都會一起寫入,格式與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)以外的資料庫,請把--database <id>加進firestore:indexes指令。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 讀取的格式寫出複合式索引和欄位覆寫。
如何把 Firestore 索引複製到另一個專案?
從第一個專案匯出 firestore.indexes.json,然後執行 firebase deploy --only firestore:indexes --project 並指定另一個專案的 ID。新索引會在背景中建立,需要該索引的查詢在它顯示為已啟用(Enabled)之前都會失敗。
可以取得舊版本的 Firestore 規則嗎?
可以,從控制台取得。規則(Rules)分頁的左側列出過去的版本;選擇其中一個即可查看,然後複製它,或用 Firexport 匯出。firebase init firestore 只會下載最新發布的規則。
匯出規則或索引會消耗 Firestore 讀取次數嗎?
不會。規則和索引定義不是文件,所以無論是從控制台、CLI 還是 Firexport 儲存,都不會從你的資料庫讀取任何內容。
