Я использую webpack, css-loader и style-loader для включения модулей css в моем приложении React.Это следующие настройки:
Конфигурация Webpack:
module.exports = {
mode: "development",
entry: __dirname + "/app/index.js",
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.css$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
modules: true,
localIdentName: "[name]__[local]___[hash:base64:5]"
}
}
]
}
]
},
output: {
filename: "bundle.js",
path: __dirname + "/build"
},
plugins: [HTMLWebpackPluginConfig]
};
И в моем компоненте React я закодировал это:
import React from "react";
import styles from "./Carousel.css";
class Carousel extends React.Component {
render() {
return (
<div className={styles["carousel"]}>
<img
className={styles["test"]}
src="https://i2.wp.com/beebom.com/wp-content/uploads/2016/01/Reverse-Image-Search-Engines-Apps-And-Its-Uses-2016.jpg?resize=640%2C426"
/>
</div>
);
}
}
export default Carousel;
В моем файле Carousel.css:
.carousel {
background-color: red;
.test {
width: 200px;
}
}
Когда я проверяю визуализированный HTML, я вижу класс карусели и его свойства, приходящие в родительский div.Но дочерний тег img показывает имя класса, но с ним не связано ни одно свойство.
Есть идеи, что я здесь не так делаю?
РЕДАКТИРОВАТЬ: Сэма сработало, и я суммируюИзменения, которые решили эту проблему:
Поскольку вложение является функцией CSS, нам нужно использовать sass или меньше.И для этого я использовал postcss-loader.
Обновлен раздел правил конфигурации webpack:
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.css$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
modules: true,
localIdentName: "[name]__[local]___[hash:base64:5]"
}
},
*"postcss-loader"*
]
}
Также добавлен файл postcss.config.js, подобный этому:
module.exports = {
plugins: [
require("postcss-nested")({
/* ...options */
})
]
};
И добавили postcss-loader, вложенные в postcss пакеты, используя опцию npm install -D.