У меня есть div <main> в моем реагирующем компоненте, и я импортирую какое-то имя класса из файла класса css, но имя класса не интегрируется в основной div, когда я пытаюсь проверить его в браузере. когда я просто использую другие имена классов, он работает как <main className = "test">, но импорт классов не работает.
Это моя составляющая:
import React from 'react';
import Aux from '../../hoc/Aux';
import classes from './Layout.css';
const layout = (props) => (
<Aux>
<div>
Test paragraph
</div>
<main className = {classes.Content}>
{props.children}
</main>
</Aux>
);
export default layout;
Это мой css
.Content{
color: red;
margin-top: 20px;
}
Я выполнил команду npm run eject после создания, если что-то связано с файлом конфигурации веб-пакета, пожалуйста, помогите мне
(я не внес никаких изменений после команды извлечения)
Вот часть css конфигурационного файла webpack dev
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
}),
},
// Adds support for CSS Modules (https://github.com/css-modules/css-modules)
// using the extension .module.css
{
test: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
}),
},





Разве вам не нужно указывать расширение файла, например import classes from './layout.css';?
Попробуйте установить пакеты style-loader и css-loader. Затем добавьте в свой веб-пакет это:
{
test: /\.css$/,
loaders: [
'style-loader?sourceMap',
'css-loader?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]'
]
}
Я получил его от документация по css-модулям, и я надеюсь, что он поможет вам достичь того, что вам нужно.
Я попытался включить расширение, но все еще не работал "импорт классов из './Layout.css';"
Я использовал приложение create-response-app для создания структуры папок и использования npm run eject, так что они не (style-loader и css-loader установлены и настроены из коробки), или я должен снова включить это в файл конфигурации?
import './Layout.css';
Затем используйте его как обычный CSS
<main className = "Content">
Вы также можете использовать свои классы как объекты в этом формате:
В вашем файле CSS:
Оберните свои классы и идентификаторы в :local(.className)
Пример:local(.Content) { width: 100px; }
В вашем компоненте React:import classes from './stylesheet.css'
<div className = {classes.Content}></div>
ух ты!! Он работает, спасибо, чувак. Я думал, что мне еще нужно использовать его с реквизитом.
Рад, что смог помочь. Напомним, что при переходе от разработки к производству возникает проблема с учетом регистра. Это источник огромного разочарования, если вы не знаете, что ищете.
Просто будьте осторожны, потому что, когда вы импортируете файл css таким образом, ваши классы css становятся глобальными. Поэтому будьте осторожны, если вы захотите использовать класс с именем Content где-нибудь еще в коде, потому что он будет применять стили из этого класса.
Возвращаясь к этому вопросу: я не могу использовать этот синтаксис: <main className = {classes.Content}> для правильного получения классов из файлов css, мне нужно сделать это таким образом, как мне это сделать? Есть что-то, что у меня есть что делать с "npm eject" штукой?
У вас есть два пакета, предложенные sebinq?
Я все еще не могу использовать свои классы как <main className = {classes.Content}>, я включил конфигурацию загрузчика в свой файл конфигурации wbpack, но все еще бесполезен.
Проверьте мой новый ответ. Не нужно ничего особенного, кроме небольшого изменения в вашем файле css
Используйте этот метод для глобального css и новый ответ для css для конкретных компонентов
Чтобы использовать имена классов как объекты, вам нужно сделать 2 вещи:
import * as classes from './Layout.css';Пример для Typescript - создайте файл Layout.css.d.ts с export const Content: string;
Убедитесь, что вы определили опцию camelCase для css-loader, чтобы разрешить тире-классы в свойства верблюжьего регистра, которые вы определяете в Layout.css.d.ts.
На самом деле я использовал это так:
import classes from './Layout.module.css';
Как вы видите в тексте вашего вопроса:
// using the extension .module.css
Правильный ответ. В новых версиях это работает, если Вы используете расширение "module.css" вместо ".css"
Вам нужно настроить некоторые кадры. Следуй этим шагам:
npm run eject запустите эту команду в корневом каталоге вашего проекта.найдите cssRegex и добавьте следующие строки в use: getStyleLoaders({
modules:true,
localIdentName:'[name]__[local]__[hash:base64:5]'
Наслаждаться!
Вот решение:
yarn run ejectЗаходим в config / webpack.config.js
Обновите файл как снимок экрана.
// "postcss" loader applies autoprefixer to our CSS.
// "css" loader resolves paths in CSS and adds assets as dependencies.
// "style" loader turns CSS into JS modules that inject <style> tags.
// In production, we use MiniCSSExtractPlugin to extract that CSS
// to a file, but in development "style" loader enables hot editing
// of CSS.
// By default we support CSS Modules with the extension .module.css
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
localIdentName:'[name]__[local]__[hash:base64:5]',
}),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
// Adds support for CSS Modules (https://github.com/css-modules/css-modules)
// using the extension .module.css
{
test: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent
}),
},Если вы используете Windows, не называйте файл «Aux», это зарезервированное имя.
Решение - просто назвать ваши файлы CSS как (в вашем случае) Layout.module.css, а затем импортировать их как таковые.
Вам не нужно извлекать, как из Создать приложение React 2.0, поскольку он использует модули CSS из коробки.
Пятно на. :-) :-)
Для последней версии не нужно устанавливать
localIdentName: '[name] [местный] [hash: base64: 5]', // не нужно указывать где
Просто укажите свое имя css с постфиксом, например FileName.module.css ex Personal.module.css
Затем имя класса, как показано ниже filename_classname_randomstring
Personal_Person__3L9tz
это работает для меня
это работает для меня
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: {
localIdentName: '[name]__[local]___[hash:base64:5]'
}
}
другие ответы не сработали для меня поэтому я использовал это решение и отлично работал
1: запустите команду npm run eject
2: перейдите к config/webpack.config.js и найдите cssRegex
3: используйте этот код в этом конкретном разделе
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
modules:{
localIdentName:'[name]__[local]__[hash:base64:5]'
},
}),
Просто добавьте приведенную ниже конфигурацию в config / webpack.config.js после запуска npm run eject в командной строке в папке проекта и выберите «Да», когда это будет предложено.

Я заметил много ссылок на блок test: cssRegex, хотя у вас его может не быть в конфигурации webpack.
Если это ваш случай, попробуйте открыть webpack.config.dev.js и найти блок, начинающийся с test: /\.css$/, (строка 160 в моем случае). Затем добавьте следующие строки, чтобы окончательный результат выглядел так:
{
test: /\.css$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: true,
localIdentName: '[name]__[local]__[hash:base64:5]'
},
},
Это должно позволить модулям css работать.
Ни одно из вышеперечисленных решений не помогло мне, если вы используете версию реакции с [email protected] и выше, они, вероятно, не будут работать и для вас.
вы должны использовать модули CSS вместе с обычными таблицами стилей, используя соглашение об именах файлов [name] .module.css. Модули CSS позволяют определять область действия CSS путем автоматического создания уникального имени класса в формате [имя файла] _ [имя класса] __ [хэш].
пример Header.module.css nb: заголовок здесь может быть любым
Вы хоть пробовали? Это действительно не так уж и умно. Например, когда вы импортируете файл SVG, вам необходимо указать расширение файла.