And*_*rew 11 sass reactjs webpack storybook
我目前面临使用scss进行 Storybook React 的问题。我正在使用sb init创建故事书文件。一切正常,所有插件均已加载,但只有样式不起作用。如果我使用css文件,该样式将起作用。
@storybook/preset-scss我已经按照有关使用和配置的文档中的说明进行操作webpackFinal,但它仍然无法正常工作
这是故事书文件的示例
导入'./button.scss'; 无法正常工作
import React from 'react';
import PropTypes from 'prop-types';
import './button.scss'; -> this one not working
export const Button = ({ primary, backgroundColor, size, label, ...props }) => {
const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
return (
<button
type="button"
className={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
style={backgroundColor && { backgroundColor }}
{...props}
>
{label}
</button>
);
};
Button.propTypes = {
primary: PropTypes.bool,
backgroundColor: PropTypes.string,
size: PropTypes.oneOf(['small', 'medium', 'large']),
label: PropTypes.string.isRequired,
onClick: PropTypes.func,
};
Button.defaultProps = {
backgroundColor: null,
primary: false,
size: 'medium',
onClick: undefined,
};
Run Code Online (Sandbox Code Playgroud)
这是我的/storybook/main.js文件
const path = require('path')
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/preset-scss"
],
webpackFinal: async (config, { configType }) => {
// `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION'
// You can change the configuration based on that.
// 'PRODUCTION' is used when building the static version of storybook.
// Make whatever fine-grained changes you need
config.module.rules.push({
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../src'),
});
// Return the altered config
return config;
},
}
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
const path = require('path')
const merge = require('webpack-merge')
const baseConfig = require('./webpack.base')
const config = {
output: {
path: path.resolve(__dirname, 'lib'),
filename: 'index.js',
libraryTarget: 'commonjs2',
library: 'violets'
}
}
module.exports = merge(baseConfig, config)
Run Code Online (Sandbox Code Playgroud)
webpack.base.js
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const autoprefixer = require('autoprefixer')
module.exports = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [
new TerserPlugin(),
new OptimizeCSSAssetsPlugin({})
],
},
entry: './src/index.js',
module: {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/,
loader: require.resolve('babel-loader'),
options: {
compact: true
}
},
{
test: /\.css$/,
loaders: ['style-loader', 'css-loader'],
},
{
test: /\.scss$/,
sideEffects: true,
use: [
{
loader: MiniCssExtractPlugin.loader
},
{
loader: 'css-loader',
options: { importLoaders: 1 }
},
{
loader: require.resolve('sass-loader')
},
{
loader: 'postcss-loader',
options: {
plugins: [
/* eslint global-require: ["off"] */
require('postcss-flexbugs-fixes'),
autoprefixer({
flexbox: 'no-2009'
})
]
}
}
]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
loader: 'file-loader'
},
]
},
externals: {
react: 'react',
'react-dom': 'react-dom'
},
plugins: [
new MiniCssExtractPlugin({
filename: 'violets.min.css'
})
]
}
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,以下 Github 线程为我修复了:
以下是摘要(确保您已安装 scss):
就我而言,我没有安装preset-scss 插件。我是通过使用以下方法做到的:
npm install @storybook/preset-scss --save
在你的情况下,预设 scss 插件似乎已经存在。
注释掉main.js文件中的配置规则:
config.module.rules.push({
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"],
include: path.resolve(__dirname, "../"),
});
如果这不起作用,请尝试将您的 scss 文件导入到preview.jsStorybook config 文件夹中。
.storybook > preview.js > import your CSS file;
最后,一些可能对您有用的参考: SCSS-Presets
| 归档时间: |
|
| 查看次数: |
21211 次 |
| 最近记录: |