運作方式
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 的工作目錄。這可以避免依序執行不同專案時全部塌縮到同一個共用設定檔。
設定檔功能
以 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進行長時間除錯:在多次執行間保留登入/工作階段/開發者工具狀態。 - 每個瀏覽器家族使用各自的自訂設定檔:避免跨瀏覽器互相污染。
- 有意識地使用系統設定檔模式:適合重現問題,但隔離程度不如受管理設定檔。

