Как я могу использовать Astroturf с приложением Create React?

Я пробовал использовать его плагин babel, но это не сработало.

Я также использую Craco для расширения / настройки приложения Create React, но я не знаю достаточно Webpack, чтобы заставить Craco работать с Astroturf.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
820
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы заставить астротурф работать, вы должны отправить одно новое правило, сгенерированное правилами веб-пакета Create React App:

{
    test: /\.(js|mjs|jsx|ts|tsx)$/,
    use: [
        {
            loader: 'astroturf/loader',
            options: { extension: '.module.scss' },
        },
    ],
}

С реагировать-приложение-перепрограммированоconfig-overrides.js будет выглядеть так:

module.exports = (config) => {
    config.module.rules.push({
        test: /\.(js|mjs|jsx|ts|tsx)$/,
        use: [
            {
                loader: 'astroturf/loader',
                options: { extension: '.module.scss' },
            },
        ],
    });
    return config;
};

С craco должно быть аналогично

Примечание:.module.scss следует заменить на .module.css в случае простого css

Я обнаружил, что ответ Антона не работает для моего проекта - загрузчик astroturf перезаписал встроенный загрузчик от CRA. Я добился успеха с этим config-overrides.js:

const { override, getBabelLoader, addWebpackModuleRule } = require("customize-cra");

const addAstroturf = plugin => config => {
  const babel = getBabelLoader(config);
  babel.loader = [
    { loader: babel.loader, options: babel.options },
    { loader: 'astroturf/loader', options: { extension: '.astroturf.css' } }
  ];
  babel.options = undefined;
  return config;
};

module.exports = override(
  addWebpackModuleRule({
    test: /\.astroturf\.css$/,
    use: ['style-loader', 'astroturf/css-loader'],
  }),
  addAstroturf()
);

Функция addAstroturf - это настраиваемое переопределение CRA, которое расширяет загрузчик с помощью Astroturf вместо перезаписи. Кроме того, я обнаружил, что использование astroturf означает, что import './Foo.css' больше не работает - настраиваемое правило расширения и модуля webpack для astroturf.css работает, чтобы изолировать astroturf от остальной части цепочки сборки.

Вот мои зависимости, на случай, если это изменится для CRA в будущем:

"create-react-app": "^4.0.0",
"astroturf": "^0.10.5",
"customize-cra": "^1.0.0",
"react": "^17.0.1",
"react-app-rewired": "^2.1.6",

Другие вопросы по теме