跳轉到主要內容
瀏覽器擴充功能會使用 JavaScript、TypeScript、HTML、CSS 與 manifest.json 來定義行為、UI、權限與瀏覽器整合。本頁介紹你在瀏覽器擴充功能專案中會看到的副檔名,以及它們各自的歸屬。 如果你想找的是「擴充功能」這個詞所指的 Chrome 或 Firefox 軟體附加元件,請改從什麼是瀏覽器擴充功能? 開始。

JavaScript 副檔名:.js.mjs

瀏覽器擴充功能接受與其他 Web 平台相同的 JavaScript 副檔名:
副檔名意義
.js純 JavaScript。視載入方式而定,可能被當成 ES module 或傳統 script。
.mjsES module。當你想強制使用 module 語意(尤其是 service worker)時很有用。
.cjsCommonJS。在擴充功能原始碼中很少見;有時會出現在 extension.config.cjs
在 Manifest V3 中,當 manifest.jsonbackground 區塊包含 "type": "module" 時,背景的 service_worker 會以 module 形式執行。詳見 Manifest V3 疑難排解

TypeScript 副檔名:.ts.tsx

TypeScript 在 Extension.js 中是一流的原始碼語言:
副檔名意義
.ts不含 JSX 的 TypeScript。
.tsx含 JSX 的 TypeScript(React、Preact)。
.d.ts型別宣告檔。不會輸出至建置結果。
你不需要從零撰寫 tsconfig.json。Extension.js 內建合理的預設值。chrome.*browser.*import.meta.env 以及公開環境變數的型別來自 @types/chrome 與 Extension.js 自家的環境型別。詳見 TypeScript

React 副檔名:.jsx.tsx

在瀏覽器擴充功能中使用 React 採用標準的 JSX 副檔名:
副檔名意義
.jsx含 JSX 的 JavaScript。
.tsx含 JSX 的 TypeScript。
React 可以在擴充功能頁面(popup、options、side panel、new-tab)中執行,也可以在注入網頁的 content script 中執行。設定與 shadow DOM 模式請見 React

瀏覽器擴充功能檔案:manifest.json、背景、content script、頁面

除了 JavaScript 與 TypeScript 原始碼外,擴充功能資料夾通常還包含:
檔案或資料夾用途
manifest.json宣告名稱、版本、權限、進入點與中繼資料。
背景進入點長時間執行的事件處理。Chromium 上的 Manifest V3 是 service worker。
Content script注入符合 URL 條件網頁的程式碼。
擴充功能頁面popup、options、side panel 或 new-tab HTML。
語系資源_locales/<lang>/messages.json 翻譯字串。
圖示與資產工具列圖示、web-accessible 資源、字型、圖片。
Extension.js 會把你的 .ts.tsx.jsx.vue.svelte.css.less.scss.module.* 原始碼編譯成上述磁碟結構,並為每個瀏覽器目標產出獨立資料夾(dist/chromedist/firefoxdist/edge)。

Extension.js 如何編譯 JavaScript 與 TypeScript 擴充功能

當你執行 extension devextension build 時,Extension.js 會:
  1. 讀取 manifest.json,找出每個進入點(背景、content script、popup、options、side panel、new-tab、web-accessible HTML)。
  2. 解析這些進入點所引用的原始檔,包含跨 .ts.tsx.jsx.vue.svelte 與各種樣式類型的 import。
  3. 透過 Rspack 以擴充功能感知的預設值編譯:在有幫助的地方做 code splitting,在瀏覽器不允許的地方(service worker、content script)則不切分。
  4. 把結果輸出到 dist/<browser>,並附上專為該目標過濾過的 manifest。
你可以用上述任何副檔名撰寫原始碼。Extension.js 會處理打包、polyfill、儲存即重新載入循環,以及各瀏覽器的封裝。

下一步