Rant : Одна из многих причин, по которой я против create-react-app
(CRA), заключается в том, насколько гибкой она может быть, когда дело доходит до настройки . Если вы хотите включить функции, я бы порекомендовал создать собственную конфигурацию веб-пакета. Почему? Вы познакомитесь с Webpack, как его настроить, как работать в его пределах и как добавлять / изменять / настраивать пакеты в соответствии с вашими потребностями.
При этом CRA поставляется с обоими глобальными настройками. и локальный (модуль) CSS импортирует и конфликтует с babel-plugin-react-css-modules
(BPRCM). CRA ожидает, что .css
файлы без module.css
будут обычным глобальным импортом. Между тем, BPRCM ожидает, что файлы .css
будут импортированы локально. Это не только конфликт, но и несоответствие. По умолчанию CRA ищет App.module.css
, где module.css
указывает, что это модулированный импорт, например так: import { App } from "./App.module.css";
. Таким образом, он назначает localIdentNames как [file/folder]_[local]_[hash]
, как указано здесь , здесь и в пределах извлеченного config/webpack.config.js
(строки 432-456 - используется пакет react-dev-utils/getCSSModuleLocalIdent
).
Чтобы разрешить эти конфликты, вам нужно установить sh a localIdentName
(по умолчанию BPCRM использует это generateScopedName
: [путь] ___ [имя] __ [локальный] ___ [ха sh: base64: 5] (4-й вариант в таблице), поэтому я буду использовать его для моего примера ниже), затем вам нужно будет добавить BPRCM к webpack.config.js
в babel-loader
поскольку CRA не ищет конфигурацию babel, вам придется удалить правило импорта модуля CSS и, наконец, вам нужно добавить некоторые параметры в их глобальное правило CSS, чтобы сделать его локальным и использовать localIdentName
.
Вот рабочий пример : https://github.com/mattcarlotta/cra-css-modules
Для использования репо выше :
- откройте окно терминала на
~/Desktop
и клонируйте репо: git clone git@github.com:mattcarlotta/cra-css-modules.git
- cd в папку
cra-css-modules
и введите yarn install
или npm install
- тип
yarn start
или npm start
для запуска примера
Что я изменил :
- Объявлено localIdentName для соответствия Имя класса BPRCM по умолчанию (, вы можете изменить это имя на любое другое, и оно все равно будет работать с приведенным выше примером репозитория ).
- Добавлено BPRCM к
babel-loader
rule. - Добавлена конфигурация modules для переключения глобального CSS правила на локальное CSS rule
- Удалены локальные модули CSS rule .
- Изменены все
classNames
на styleName
в App. js файле.