運作方式
Extension.js 會依以下順序決定設定檔模式:- 當
profile: false或EXTENSION_USE_SYSTEM_PROFILE=true時使用系統設定檔模式 - 明確指定的
profile路徑(若有提供) - 受管理設定檔模式(預設)
- 預設為暫存(短暫)模式
- 當
persistProfile: true或keepProfileChanges: true時改為持久模式
--profile 的值如何被讀取
CLI 是以字串傳遞旗標的值,因此 Extension.js 會先做正規化:
--profile=false(或設定檔中的profile: false)代表使用瀏覽器自己的預設設定檔。--profile=true代表受管理的預設值,等同於不設定這個選項。- 其他任何字串都會被當成明確指定的設定檔路徑。
--profile 路徑是相對於專案(編譯情境)解析,而不是相對於你 shell 的工作目錄。這可以避免依序執行不同專案時全部塌縮到同一個共用設定檔。
Firefox 與其他 Gecko 瀏覽器上的系統設定檔模式
Extension.js 透過遠端除錯把附加元件安裝進 Gecko 瀏覽器,而瀏覽器自己的設定檔預設關閉遠端除錯。因此在使用--profile=false、profile: false 或 EXTENSION_USE_SYSTEM_PROFILE=true 時,dev、start 與 preview 會在瀏覽器啟動之前停下,不會有任何東西以你平常使用的設定檔開啟。這適用於 CLI 啟動的每一個 Gecko 目標:firefox、waterfox、librewolf、zen、floorp 與 gecko-based。
這三個指令都會輸出一段說明,指出該設定的來源以及兩條出路。瀏覽器名稱會隨你的目標而變,SET BY 行會列出每一個生效的來源(--profile=false、profile: false in extension.config.js 或 EXTENSION_USE_SYSTEM_PROFILE=true):
extension dev 會讓開發伺服器繼續執行並監看,ready.json 處於 error(代碼 browser_launch_failed,browserLaunchFailedCode: "E_FLAG_NOT_SUPPORTED_HERE")。extension start 與 extension preview 以結束代碼 1 結束。使用 --output json 時,每個指令都會以 E_FLAG_NOT_SUPPORTED_HERE 與 status: "usage" 失敗。
較早的版本會以你自己的設定檔啟動瀏覽器,但其中沒有載入任何東西。要得到可用的工作階段,請選擇這段說明中提到的兩條出路之一:
- 拿掉
--profile=false(以及profile: false或EXTENSION_USE_SYSTEM_PROFILE),讓 Extension.js 管理設定檔並安裝附加元件。加上persistProfile: true可在多次執行間保留登入與狀態,也可以用copyFromProfile從既有設定檔為受管理設定檔建立初始內容。 - 傳入
--profile=<path>,以你自己的設定檔目錄啟動。Extension.js 會把附加元件安裝進去。
設定檔功能
以 copyFromProfile 建立初始內容
copyFromProfile 會在啟動前把來源目錄複製到受管理設定檔中。只有當目標是全新的,也就是不存在或為空時才會複製。因此持久化的設定檔只會被複製一次,你之後的變更會在每次執行後保留下來。
設定檔模式
Extension.js 會在下列位置建立受管理設定檔:
dist/extension-js/profiles/<browser>-profile/<...>
dist/extension-js/profiles/<browser>-profile/dev
brave-magenta-heron。這個名稱每次執行都是隨機的,所以不要寫死。想知道某次執行使用的是哪個設定檔,請讀取該工作階段 ready.json 中的 profilePath 欄位。
在 extension.config.* 中設定
CLI 用法
直接使用明確的設定檔路徑:start 與 preview 的用法類似。
生命週期說明
- Extension.js 會為每次執行建立暫存的受管理設定檔。
- Extension.js 會在多次執行間重複使用持久的受管理設定檔(
dev)。 - 每個暫存設定檔都帶有一個
.extension-js-managed-profile標記檔。瀏覽器結束時,Extension.js 只會移除帶有該標記的目錄,因此被保留的設定檔與明確指定的設定檔永遠不會被回收。 - Extension.js 也會在下次啟動時清掃過期的帶標記設定檔。可透過
EXTENSION_TMP_PROFILE_MAX_AGE_HOURS控制最長保留時間(預設 12 小時)。 - 每次啟動 Firefox 時,Extension.js 都會刪除該設定檔的
startupCache目錄。否則被釘選或持久化的設定檔可能在整次 dev 重新啟動後仍提供過期的擴充功能程式碼。
被鎖定的 Chromium 設定檔
在 Chromium 啟動前,Extension.js 會讀取該設定檔的SingletonLock 產物。若鎖指向一個已結束的程序或另一台主機,它就是過期的。Extension.js 會移除過期的 SingletonLock、SingletonSocket 與 SingletonCookie 檔案,然後正常啟動。若持有它的程序在本機仍在執行,啟動則會中止。該工作階段的 ready.json 會標上 profile_locked 錯誤碼,因此機器端的使用者永遠不需要解析錯誤句子。
隱私
受管理設定檔是一份完整的瀏覽器設定檔。它保存了你在那個瀏覽器工作階段中所做的一切留下的 cookie、瀏覽紀錄與登入資料。Extension.js 會在dist/extension-js 中寫入一次帶有 * 規則的 .gitignore,因此設定檔與工作階段狀態永遠不會進入 git。不要提交或散布這個目錄。
最佳實務
- 以受管理的暫存設定檔做基線測試:減少隱藏狀態與難以重現的問題。
- 以
persistProfile進行長時間除錯:在多次執行間保留登入/工作階段/開發者工具狀態。 - 每個瀏覽器家族使用各自的自訂設定檔:避免跨瀏覽器互相污染。
- 有意識地使用系統設定檔模式:適合在 Chromium 家族瀏覽器上重現問題,但隔離程度不如受管理設定檔。Extension.js 會拒絕在這種模式下啟動 Gecko 瀏覽器。

