@storybook/addon-styling-webpack
使用常用样式工具更快地开始 Storybook 7.
✨ 特性
- 🤖 通过代码修改实现常用工具的零配置.
- 🧩 常用工具的配置模板
- ⚡️ 支持 CSS Modules, 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 和 Tailwind 的 示例项目 与 Storybook 配合使用
CSS Modules
{
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,
},
},
],
},
]
}
}
故障排除
Monorepos 是一种更高级的设置,可能需要更多的配置。要了解更多信息,请参阅 Storybook FAQ 中关于 monorepos 的部分。
🤝 贡献
如果你想为此插件贡献力量,非常感谢,我非常乐意接受你的帮助🙏
📝 开发脚本
pnpm build
构建和打包你的插件代码
🌲 分支结构
- next - npm 上的
next
版本,也是主要开发工作进行的分支 - main - npm 上的
latest
版本,也是大多数用户使用的稳定版本
🚀 发布流程
- 所有 PR 都应以
next
分支为目标,该分支依赖于 Storybook 的next
版本。 - 合并后,该包的新版本将在
next
NPM 标签上发布。 - 如果更改包含需要修补回稳定版本的错误修复,请在 PR 描述中注明。
- 标有
pick
的 PR 将被拣选回main
分支,并在latest
npm 标签上生成一个版本。