文件
Storybook 文件

編譯器支援

JavaScript 編譯器在優化和轉換程式碼、提升效能,以及確保跨不同環境的相容性方面至關重要。Storybook 提供對主要編譯器的支援,確保使用 SWC 實現閃電般的建置時間和執行速度,或者利用 Babel 及其廣泛的插件和預設生態系統,讓您可以使用該生態系統的最新功能,而對您基於 Webpack 的專案只需最少的設定。

SWC

SWC 是一個快速、高度可擴充的工具,用於編譯和捆綁現代 JavaScript 應用程式。它由 Rust 提供支援,可提高效能並縮短建置時間。Storybook 包含與 SWC 的內建整合,允許零設定設定和 API 的內建類型。如果您在基於 Webpack 的專案中使用任何支援的框架(除了 Angular、Create React App、Ember.js 和 Next.js)初始化 Storybook,它會自動將 SWC 作為其預設值,為您提供更快的載入時間。

SWC 建置工具的支援目前對於 Next.js 專案處於實驗階段,並且預設不啟用。它需要您選擇加入才能使用。如需有關使用支援的框架設定 SWC 的詳細資訊,請參閱SWC API 文件。

Babel

Babel 是一個廣泛採用的 JavaScript 編譯器,提供模組化架構和廣泛的插件系統,以支援廣泛的用例,從而可以存取工具生態系統的尖端功能。Storybook 提供與 Babel 的無縫整合,讓您可以在您的專案和 Storybook 之間共用標準設定,而無需任何額外的設定。

如果您未使用 Storybook 7,請參閱先前的文件,以取得有關設定 Babel 設定的指引。

設定

預設情況下,Babel 提供了一個固執己見的設定,適用於大多數專案,依賴兩種不同的方法來設定使用該工具的專案

  • 專案範圍設定:Babel 會在您的專案根目錄中尋找 babel.config.js 或等效檔案,並使用它來設定您專案的 Babel 設定。
  • 檔案相關設定:Babel 會尋找 .babelrc.json 或等效檔案,內省專案結構,直到找到設定檔為止。這將讓您可以為專案的多個方面個別設定 Babel。

Storybook 依賴不可知的設定 Babel 方法,使您可以為您的專案提供必要的設定,它將會使用它。根據支援的框架、建置工具和附加元件,它可能包含微小的調整,以確保與 Storybook 的功能相容。

對於自訂專案設定(例如,您有多個 Storybook 設定的單一存放庫),在您專案目前的工作目錄中建立 .babelrc.json 檔案可能不足夠。在這些情況下,您可以建立 babel.config.js 檔案來覆寫 Babel 的設定,而 Storybook 會自動偵測並使用它。如需詳細資訊,請參閱 Babel 文件

使用 Create React App

如果您正在使用以 Create React App 初始化的專案,Storybook 會自動偵測並使用該工具提供的 Babel 設定,該設定透過 @storybook/preset-create-react-app 預設值啟用,讓您無需任何額外設定即可使用 Storybook。

問題排解

SWC 編譯器不適用於 React

如果您在基於 React 的專案中啟用了 SWC 建構器選項,並且您沒有在 jsx|tsx 檔案中明確導入 React,這可能會導致 Storybook 無法載入。當使用 SWC 建構器時,SWC 不會自動導入 jsx-runtime 模組。若要解決此問題,您需要調整 Storybook 設定檔 (即 .storybook/main.js|ts),並將 swc 選項設定如下

.storybook/main.ts
// Replace your-framework with the webpack-based framework you are using (e.g., react-webpack5)
import type { StorybookConfig } from '@storybook/your-framework';
 
const config: StorybookConfig = {
  framework: {
    name: '@storybook/your-framework',
    options: {},
  },
  swc: (config, options) => ({
    jsc: {
      transform: {
        react: {
          runtime: 'automatic',
        },
      },
    },
  }),
};
 
export default config;

Babel 設定無法運作

Storybook 開箱即用,可以偵測並套用您專案中提供的任何 Babel 設定。但是,如果您遇到設定未被使用的情況,您可以設定 BABEL_SHOW_CONFIG_FOR 環境變數,並將其設定為您要檢查的檔案。例如

BABEL_SHOW_CONFIG_FOR=.storybook/preview.js yarn storybook

當命令執行時,它會輸出套用至您指定檔案的 Babel 設定,儘管在主控台中顯示轉譯錯誤並阻止 Storybook 載入。這是 Babel 的已知問題,與 Storybook 無關,您可以透過檢查設定後關閉環境變數並重新啟動 Storybook 來解決此問題。