@bellerofonte

Как изменить имя файла в loader-е wabpack-а и передать новое имя в другой loader (или как на уровне сборки менять стили)?

Как сказать webpack-у, чтобы он преобразовывал имя файла, удовлетворяющего маске '*__style__.css' в другое имя в зависимости от переданных в webpack параметров и вызывал следующий loader с преобразованным именем?
Вот пример конфига:

rules: [
  {
    test: /.*__style__\.css$/,
    loader: /* 
        ... как заменить '__style__' на `${env.STYLE_REF}` и 
        and передать дальше в css-loader ???? 
     */
  },
  /*...и т.д. ....*/


Задача - заставить компонент импортировать стиль в зависимости от окружения.
Например, test-component.jsx:

import React from 'react';
import css from './__style__.css';
/* ... component code ...*/


Если запустить webpack --env.STYLE_REF=dark, то компонент должен импортировать стиль из './dark.css'
А если webpack --env.STYLE_REF=light, то из './light.css'
Это возможно сделать с помощью webpack? Или есть какие-то более простые решения?
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Первое, что приходит в голову, это как-то так:
import(`__${theme}__`.css)
А из вебпака в код передавать переменную theme через DefinePlugin.

Второй вариант — динамически генерить resolve.alias, а в коде писать import '__current-theme.css'. Как-то так:
alias: {
  '__current-theme.css': path.resolve(__dirname, process.env.STYLE_REF)
}

Лучше второй вариант, пожалуй, в первом получится ненужный code splitting.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы