buffer、stream 或 crypto,建置時你會看到解析錯誤。下面說明何時該加入 polyfill,又何時該改用瀏覽器原生方案。
什麼情況下適合加入 Node polyfill
- 必要的相依套件在瀏覽器執行期中需要 Node 核心模組。
- 你正在從以 Node 為主的套件逐步遷移程式碼。
- 你可以為了特定執行期能力,接受較大的 bundle 體積。
範本範例
new-typescript

content-typescript

new-crypto

crypto polyfill 的用法。
預設行為
- 建置目標以瀏覽器為主(
web)。 - 模組解析優先採用瀏覽器匯出(
browser、module、main)。 - Extension.js 預設停用 Node 核心 fallback(例如
crypto、path、fs)。
設定 Node polyfill
使用extension.config.js(或 .mjs / .cjs)擴充 Rspack 設定,並定義安全的 fallback。
安裝選用的 polyfill 套件
擴充功能 API 與 Node API 的差別
在 CLI/設定中將polyfill 設為 true,會啟用 webextension-polyfill——一個讓 Chromium 瀏覽器可取用 browser.* API namespace 的相容層。它不會啟用 Node 核心模組的 polyfill。
只有當函式庫無法在標準 Web API 下執行時,才使用 Node polyfill。
注意事項
- 不要假設擴充功能執行期可以存取檔案系統;除非你有明確的瀏覽器安全策略,否則請保持
fs: false。 - 盡量採用 Web Crypto(
crypto.subtle),而非引入體積較大的 Node crypto shim。 - Polyfill(Node API 的瀏覽器相容替代品)會增加 bundle 體積,可能影響擴充功能頁面與 content script 的啟動時間。
- 部分使用
node:specifier 的套件可能需要明確的 fallback 處理。
下一步
- 了解如何自訂 Rspack 設定。
- 了解如何管理 Extension 設定。

