css를 모듈화하여 사용하는 방식으로 css 클래스를 만들면 자동으로 고유한 클래스네임을 생성하여 스코프를 지역적으로 제한한다.
modules
: true → css 모듈 활성화localIdentName
→ css 모듈에서 고유하게 생성되는 클래스네임 형식//config/webpack.config.js
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
localIdentName: '[path][name]__[local]--[hasg:base64:5]'
}),
sideEffects: true,
}
//App.scss
.box {
display: inline-block;
width: $size;
height: $size;
border: 1px solid black;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
npm install classnames -save
//App.js
import React, { Component } from 'react';
import styles from './App.scss';
import classNames from 'classnames/bind';
const cx = classNames.bind(styles);
class App extends Component {
render() {
const isBlue = true;
return (
<div className={cx('box', { blue: isBlue })}>
<div className={cx('box-inside')}></div>
</div>
)
}
}
export default App;
node-sass
, sass-loader
//config/webpack.config.js
{
test: sassRegex,
exclude: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
localIdentName: '[path][name]__[local]--[hash:base64:5]'
},
'sass-loader'
),
sideEffects: true,
},
전역에서 사용하도록 경로 설정