[英]Storybook: component level styles failing with sass-loader 12
I have Storybook setup in my project.我的项目中有 Storybook 设置。 The following is the
main.js
file:以下是
main.js
文件:
const path = require('path');
const {
webpack
} = require('../craco.config');
module.exports = {
stories: ['../src/components/**/*.stories.@(js|jsx|ts|tsx)', '../src/components/**/*.stories.mdx'],
addons: ['@storybook/addon-essentials'],
framework: '@storybook/react',
webpackFinal: async config => {
config.resolve.alias = {
...config.resolve.alias,
...webpack.alias
};
config.module.rules.push({
test: /.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true
}
},
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: [path.resolve(__dirname, '../src/styles/_variables.scss')]
}
}
]
});
return config;
},
core: {
builder: 'webpack5'
}
};
This config enables the modules (so scss modules work as expected) but the regular scss does not work at all.此配置启用模块(因此 scss 模块按预期工作)但常规 scss 根本不起作用。 The opposite happens if
modules: true
is not there but I cannot make it work both at the same time.如果
modules: true
不存在但我不能让它同时工作,则会发生相反的情况。
If I create two rules (one for .modules.scss
and another for *.scss
(not including modules):如果我创建两条规则(一条用于
.modules.scss
,另一条用于*.scss
(不包括模块)):
const patterns = [
'.module.scss',
'(?!.*\.module\.scss$).*\.scss'
];
patterns.forEach(pattern => {
const rule = {
test: new RegExp(`${pattern}$`),
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: pattern === '.module.scss',
}
},
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: [path.resolve(__dirname, '../src/styles/_variables.scss')]
}
}
]
};
console.log(rule);
config.module.rules.push(rule);
});
I get the following error:我收到以下错误:
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/button/style.module.scss 33:98 root stylesheet
at processResult (/Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:758:19)
at /Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:860:5
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:400:11
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:252:18
at context.callback (/Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:124:13)
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:5)
SassError: SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/button/style.module.scss 33:98 root stylesheet
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:14)
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/modal/style.module.scss 33:98 root stylesheet
at processResult (/Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:758:19)
at /Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:860:5
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:400:11
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:252:18
at context.callback (/Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:124:13)
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:5)
SassError: SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/modal/style.module.scss 33:98 root stylesheet
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:14)
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/text-area/style.module.scss 33:98 root stylesheet
at processResult (/Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:758:19)
at /Users/nkivatinetz/src/forseti/node_modules/webpack/lib/NormalModule.js:860:5
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:400:11
at /Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:252:18
at context.callback (/Users/nkivatinetz/src/forseti/node_modules/loader-runner/lib/LoaderRunner.js:124:13)
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:5)
SassError: SassError: expected "{".
╷
33 │ var api = require("!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
│ ^
╵
src/components/text-area/style.module.scss 33:98 root stylesheet
at Object.loader (/Users/nkivatinetz/src/forseti/node_modules/sass-loader/dist/index.js:69:14)
After doing some research I found that it may be a duplication of the loader but those files should be landing in only one rule.在做了一些研究之后,我发现它可能是加载程序的重复,但这些文件应该只在一个规则中登陆。
Oh, I finally made it work.哦,我终于成功了。 I had to add to the rules:
我必须添加规则:
{
loader: 'css-loader',
options: {
modules: true, // Enable modules to help you using className
}
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.