Исключить определенный тип файла из ранее определенного определения правил - PullRequest
0 голосов
/ 24 октября 2019

Я работаю с Сборником рассказов , который имеет. предопределенная конфигурация веб-пакета, в которой есть набор правил с загрузчиками, которая выглядит следующим образом:

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;
};
...