@storybook/addon-styling-webpack
使用常用的樣式工具,在 Storybook 7 中更快上手。
✨ 功能
- 🤖 透過程式碼轉換器,對常用工具進行零設定。
- 🧩 常用工具的設定範本
- ⚡️ CSS 模組、PostCSS、Sass、Less 和 Vanilla-extract 的選項
🏁 開始
🤖 自動設定
若要開始,請使用 Storybook CLI 安裝套件
pnpm
pnpm dlx storybook@latest add @storybook/addon-styling-webpack
yarn
yarn dlx storybook@latest add @storybook/addon-styling-webpack
npm
npx storybook@latest add @storybook/addon-styling-webpack
這是做什麼的? 在幕後,這會在您的專案中安裝套件,並將擴充功能新增至您的 main.js
檔案。之後,它會執行 npx @storybook/auto-config styling
。這是一個程式碼轉換器套件,會嘗試偵測您專案中的樣式工具,並據此設定您的 storybook。
如果程式碼轉換器失敗,請嘗試手動執行 npx @storybook/auto-config styling
。如果仍然失敗,請在 auto-config 儲存庫中提出問題。
🛠️ 手動設定
@storybook/addon-styling-webpack
會取得您樣式工具的 Webpack 模組規則,並取代 Storybook Webpack 設定中的現有規則。這可避免重複規則而導致 Storybook 建置失敗。
{
name: '@storybook/addon-styling-webpack',
options: {
rules: [
// Replaces existing CSS rules with given rule
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
],
}
]
}
}
它也可以採用 Webpack 外掛程式來新增至 Storybook 設定。
{
name: '@storybook/addon-styling-webpack',
options: {
plugins: [
new MiniCssExtractPlugin(),
]
}
}
🧩 常用設定
以下是一些常用樣式工具的常用設定,可協助您入門。結合以下不同的規則,可以實現更複雜的設定。
PostCSS
// Often used for tailwind
{
name: '@storybook/addon-styling-webpack',
options: {
rules: [
// Replaces existing CSS rules to support PostCSS
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: { importLoaders: 1 }
},
{
// Gets options from `postcss.config.js` in your project root
loader: 'postcss-loader',
options: { implementation: require.resolve('postcss') }
}
],
}
]
}
}
您也可以參考這個範例專案,其中將 PostCSS 用於搭配 Storybook 的 Tailwind
CSS 模組
{
name: '@storybook/addon-styling-webpack',
options: {
rules: [
// Replaces existing CSS rules to support CSS Modules
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
auto: true,
localIdentName: '[name]__[local]--[hash:base64:5]',
},
},
}
],
}
]
}
}
Sass
{
name: '@storybook/addon-styling-webpack',
options: {
rules: [
// Replaces any existing Sass rules with given rules
{
test: /\.s[ac]ss$/i,
use: [
"style-loader",
"css-loader",
{
loader: "sass-loader",
options: { implementation: require.resolve("sass") }
},
],
},
]
}
}
Less
{
name: '@storybook/addon-styling-webpack',
options: {
rules: [
// Replaces any existing Sass rules with given rules
{
test: /\.less$/i,
use: [
"style-loader",
"css-loader",
{
loader: "less-loader",
options: { implementation: require.resolve("less") }
},
],
},
]
}
}
Vanilla-extract
{
name: '@storybook/addon-styling-webpack',
options: {
plugins: [
new VanillaExtractPlugin(),
new MiniCssExtractPlugin(),
],
rules: [
{
test: /\.css$/,
sideEffects: true,
use: [
require.resolve("style-loader"),
{
loader: require.resolve("css-loader"),
options: {},
},
],
exclude: /\.vanilla\.css$/,
},
{
// Targets only CSS files generated by vanilla-extract
test: /\.vanilla\.css$/i,
sideEffects: true,
use: [
MiniCssExtractPlugin.loader,
{
loader: require.resolve('css-loader'),
options: {
// Required as image imports should be handled via JS/TS import statements
url: false,
},
},
],
},
]
}
}
疑難排解
Monorepo 是更進階的設定,可能需要更多設定。若要瞭解更多資訊。請參閱 Storybook 常見問題集中關於monorepo 的說明。
🤝 貢獻
如果您想為此擴充功能貢獻,非常感謝,我很樂意得到您的協助 🙏
📝 開發腳本
pnpm build
建置和封裝您的擴充功能程式碼
🌲 分支結構
- next - npm 上的
next
版本,以及進行大多數工作的開發分支 - main - npm 上的
latest
版本,以及大多數使用者使用的穩定版本
🚀 發佈程序
- 所有 PR 都應以
next
分支為目標,這取決於 Storybook 的next
版本。 - 合併時,這個套件的新版本將在
next
NPM 標籤上發佈。 - 如果變更包含需要修補回穩定版本的錯誤修正,請在 PR 說明中註明。
- 標示為
pick
的 PR 會被挑選回main
分支,並在latest
npm 標籤上產生版本。