Skip to main content
在開發期間以受管理、持久或自訂的設定檔,控制瀏覽器狀態的隔離程度。 依照工作流程,讓瀏覽器工作階段保持隔離或持續可重用。Extension.js 啟動瀏覽器時會套用設定檔感知的預設值。可選擇全新的乾淨執行、可重用的狀態,或是明確指定的本地設定檔路徑。

運作方式

Extension.js 會依以下順序決定設定檔模式:
  1. profile: falseEXTENSION_USE_SYSTEM_PROFILE=true 時使用系統設定檔模式
  2. 明確指定的 profile 路徑(若有提供)
  3. 受管理設定檔模式(預設)
    • 預設為暫存(短暫)模式
    • persistProfile: truekeepProfileChanges: 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 用法

直接使用明確的設定檔路徑:
startpreview 的用法類似。

生命週期說明

  • 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 設定檔

如果同一台機器上另一個仍在執行的瀏覽器程序正持有該設定檔,Extension.js 會拒絕啟動,而不是把它弄壞。請先關閉那個瀏覽器,或改用其他設定檔。
在 Chromium 啟動前,Extension.js 會讀取該設定檔的 SingletonLock 產物。若鎖指向一個已結束的程序或另一台主機,它就是過期的。Extension.js 會移除過期的 SingletonLockSingletonSocketSingletonCookie 檔案,然後正常啟動。若持有它的程序在本機仍在執行,啟動則會中止。該工作階段的 ready.json 會標上 profile_locked 錯誤碼,因此機器端的使用者永遠不需要解析錯誤句子。

隱私

受管理設定檔是一份完整的瀏覽器設定檔。它保存了你在那個瀏覽器工作階段中所做的一切留下的 cookie、瀏覽紀錄與登入資料。Extension.js 會在 dist/extension-js 中寫入一次帶有 * 規則的 .gitignore,因此設定檔與工作階段狀態永遠不會進入 git。不要提交或散布這個目錄。

最佳實務

  • 以受管理的暫存設定檔做基線測試:減少隱藏狀態與難以重現的問題。
  • persistProfile 進行長時間除錯:在多次執行間保留登入/工作階段/開發者工具狀態。
  • 每個瀏覽器家族使用各自的自訂設定檔:避免跨瀏覽器互相污染。
  • 有意識地使用系統設定檔模式:適合重現問題,但隔離程度不如受管理設定檔。

後續步驟