Skip to main content
啟動已建置的擴充功能輸出進行接近正式版的手動測試。 preview 不會編譯你的專案,它會載入既有的未打包擴充功能根目錄,並執行瀏覽器啟動流程。

何時使用 preview

  • 不重新建置,直接執行既有的建置輸出。
  • 快速比較不同瀏覽器目標下的打包後行為。
  • 除錯與正式版產物有關、而非開發/監看模式的執行階段問題。

Preview 指令功能

preview 只執行,不建置。當 dist/<browser> 輸出存在時優先使用。你也可以指向其他已包含 manifest.json 的未打包擴充功能資料夾。

用法

如果省略路徑,Extension.js 會使用目前工作資料夾。

preview 如何選擇要執行的內容

preview 會依序檢查這些位置:
  1. 你傳入的 --output-path <dir>。它的優先權高於其他一切。
  2. 所選瀏覽器目標的 dist/<browser>。
  3. 你提供的專案路徑或目前工作資料夾。
該資料夾必須包含含有 manifest.json 的未打包擴充功能。是否在同一個指令中執行過 build 並不重要。

引數與旗標

--author 與 --author-mode 是 --debug 的隱藏、已淘汰別名。

瀏覽器支援

preview 沒有 Safari 路徑。傳入 --browser safari(或 webkit-based)會以 E_COMMAND_UNSUPPORTED_FOR_TARGET 結束。Safari 是受支援的瀏覽器,但這個指令無法啟動它。這個結論是量測出來的:Safari 的 WebDriver 路徑確實能載入未封裝的資料夾,background 也確實會執行,但 Safari 給這個擴充功能的主機來源是零個。content script 永遠不會注入,之後也沒有任何 API 呼叫可以補上這個存取權。Safari 目標請改用 dev 或 build。

遠端 URL 與 light 模式

當路徑引數是遠端 http(s) URL 時,preview 會自動設定 EXTJS_LIGHT=1。這會讓下載回來的擴充功能以 light 模式啟動。若你事先自行設定 EXTJS_LIGHT,就會覆寫這個行為。 在 --output json 下,下載進度行會寫到 stderr,因此 stdout 只包含結果影格。

阻止瀏覽器啟動

兩個旗標聽起來很像,作用卻不同:
--no-browser 還有設定寫法 commands.preview.noBrowser: true,以及環境變數寫法 EXTENSION_CLI_NO_BROWSER=1。dev、start 與 preview 都接受這兩個旗標。

自動化中介資料

preview 會把就緒中介資料寫入:
  • dist/extension-js/<browser>/ready.json
對於 --no-browser 流程,它能提供確定性的指令狀態:
  • starting:指令初始化中
  • ready:僅執行的驗證完成
  • error:缺少必要輸出或啟動失敗
  • runId 與 startedAt:讓腳本/代理可關聯特定工作階段
preview 沒有 --wait 閘道旗標。要把 preview 自動化,直接讀取 ready.json。

用 --output json 取得機器可讀輸出

--output json 會在 stdout 印出一個 schema-1 信封:
  • 執行成功會印出 status: "ready" 影格。它的 value 帶有專案路徑與被預覽的瀏覽器清單。
  • 專案路徑不存在時,會印出 ok: false,並帶 status: "usage" 與 error.code: "E_PROJECT_NOT_FOUND"。資料夾存在但沒有 manifest 時,狀態相同,代碼為 E_MANIFEST_NOT_FOUND。這兩種影格都不帶提示。
  • 專案存在、但輸出路徑下沒有未封裝的擴充功能時,該影格為 ok: false,並帶 status: "not-found" 與 error.code: "E_PREVIEW_NO_DIST"。它的提示會請你先執行 extension build。
  • --chromium-binary 或 --gecko-binary 固定的執行檔有問題時,會印出 ok: false,並帶 status: "usage" 與 error.code: "E_BROWSER_BINARY_INVALID"。這包括路徑不存在、檔案無法執行,以及執行檔在 10 秒內沒有回應版本探測。命令隨即結束,不會留下任何執行中的程序。
  • 遠端 URL 沒有提供可用的封存檔時,會印出 ok: false 與 status: "failed"。回傳的不是 ZIP 封存檔、封存檔已損毀或含有位於其資料夾之外的條目時代碼為 E_REMOTE_ZIP_INVALID,逾時為 E_REMOTE_FETCH_TIMEOUT,連線遭拒或 HTTP 錯誤為 E_REMOTE_DOWNLOAD。
  • 瀏覽器無法啟動時會印出 ok: false 與 status: "failed"。二進位檔可以執行但系統無法啟動它,或 Firefox 在除錯器回應之前就結束時代碼為 E_BROWSER_LAUNCH,Firefox 在執行但除錯器始終沒有回應時為 E_BROWSER_CONNECT。設定檔載入失敗時會以同樣的狀態印出 E_CONFIG_LOAD。
  • 其他失敗會印出 ok: false 與 status: "failed",接著行程以 1 結束。

記錄旗標

這些旗標屬於實驗性質,可能在次要版本之間變動。

共用全域選項

也支援 全域旗標。

範例

預覽本地擴充功能

在 Edge 與 Chrome 中預覽

預覽但不啟動瀏覽器

行為說明

  • preview 只執行,從不編譯專案。
  • preview 優先使用既有的建置輸出(dist/<browser>),但可退回到其他未打包擴充功能根目錄。
  • preview 不會執行監看模式或 Hot Module Replacement (HMR)。
  • 腳本/代理請依賴 ready.json,避免解析終端機輸出。

最佳實務

  • 測試全新的正式版產物時,先執行 build 再 preview。
  • 當你的未打包擴充功能不在預設的專案輸出位置時,請傳入專案路徑引數。
  • 使用 --browser 在打包前跨目標驗證行為。

後續步驟