Я работаю с Сборником рассказов , который имеет. предопределенная конфигурация веб-пакета, в которой есть набор правил с загрузчиками, которая выглядит следующим образом:
module.exports = async ({config}) => {...} //predefined webpack config is not something I can change
Все, что я возвратил из этой функции, является конфигурацией веб-пакета, используемой Storybook. Одно из этих правил определяется следующим образом:
{
test: /\.css$/,
use: [
//bunch of loaders
]
}
Теперь я не хочу, чтобы какой-либо из этих загрузчиков применялся к .st.css
файлам, которые, к сожалению, также проходят случай test
. Причина этого заключается в том, что при использовании StylableWebpackPlugin в документах прямо указывается, что к файлам .st.css
не следует применять загрузчики.
В настоящее время я пытаюсь обойти это:
const cssRule = config.module.rules.find(rule => rule.test.toString().includes('css'));
cssRule.exclude = /\.st\.css$/;
Сначала я ищу правило css, а затем добавляю к нему свойство exclude. Это работает, но выглядит довольно неуклюже, если Storybook решит изменить значение rule.test
на что-то другое, мой код сломается.
В идеале я просто хотел бы добавить новое правило в массив, который перезаписываетпредыдущее правило, но только для st.css
файлов, чтобы я не зависел от того, что уже определено.
Я уже пробовал следующее, которое не работает, webpack просто добавит пустой массивзагрузчиков к ранее определенным загрузчикам для правила css
вместо его перезаписи:
{
test: /\.st.css$/,
loader: []
}
В псевдокоде мне интересно, существует ли что-то вроде следующего:
{
test: /\.st.css$/`,
excludePreviousLoaders: true
}
Полный конфиг вставлен сюда для справки:
module.exports = async ({config}) => {
config.plugins.push(new StylableWebpackPlugin());
config.module.rules.push(svgRule);
const cssRule = config.module.rules.find(rule => rule.test.toString().includes('css'));
cssRule.exclude = /\.st\.css$/;
return config;
};