업데이트:
PostCSS?
PostCSS는 cra(create react app) 에서 기본적으로 제공되는 도구로서, Sass와 같이 변수, 믹스인 등의 기능을 제공하고 현재 사용에 제약이 있는 CSS의 속성을 사용할 수 있도록 트랜스파일링을 해주는 역할을 한다.
크로스브라우징을 위한 autoprefixer와 normalize 처리도 해주는데 즉, hidden이라는 속성은 최신 브라우저에서 제공되는 속성이라 별도 선언없이 잘 작동하지만 하위 브라우저에서는 css에 별도로 명시해주어야 한다. 이러한 내용을 알아서 PostCSS에서 제공해주는 것이다.
그렇다면 크로스브라우징을 어디까지 적용할 지의 기준은 어디서 설정할까? 그것은 package.json
내부에 browserslist
항목에 제공된 쿼리를 기준으로 한다.
이 쿼리는 https://browserl.ist/ 에서 확인해 볼 수 있고, https://github.com/browserslist/browserslist#full-list에서 쿼리문을 참조할 수 있다.
시작하기
craco 패키지 설치하기
두 개의 패키지를 우선 설치한다. craco는 cra에 숨겨진 webpack.config.js를 꺼내지 않고 설정하기 위해 필요한 패키지이다.
> npm i @craco/craco
> npm i craco-alias -D
postcss.config.js 추가
우선 프로젝트 폴더 루트에 postcss.config.js
파일을 생성하고 아래 소스를 입력한다.
이 코드는 cra에 기본으로 제공되는 코드내용이다.
const postcssNormalize = require('postcss-normalize');
module.exports = {
plugins: [
require('postcss-flexbugs-fixes'),
require('postcss-preset-env')({
autoprefixer: {
flexbox: 'no-2009'
},
stage: 0,
}),
postcssNormalize()
]
};
craco.config.js 추가
프로젝트 루트 폴더에 craco.config.js
파일을 추가하고 아래 코드를 넣어준다.
const { POSTCSS_MODES } = require("@craco/craco");
module.exports = {
style: {
postcss: {
mode: POSTCSS_MODES.file
}
},
};
normalize 설정
프로젝트에 src/index.css
에 최상단에 @import-normalize
를 선언하면 된다.
@import-normalize;
/* reset을 위한 css 정의 */
여기까지는 prefix와 normalize 등을 위한 설정이 완료되었다.
절대경로 설정하기
import 문으로 css파일과 js 등의 리소스를 가져와 사용할 수 있는데, 이때 파일의 위치를 상대 경로로 정의하면서 깔끔하지 않은 코드와 번거로움을 느끼게 된다. 이것을 깔끔한 코드로 사용할 수 있게 바꿔보자.
/* 상대경로 */
import ../../../../styles/index.scss
/* 절대경로 */
import @styles/index.scss
craco.config.js 코드 추가
위에서 추가한 코드 아래에 내용을 추가한다.
const { POSTCSS_MODES } = require("@craco/craco");
const CracoAlias = require('craco-alias'); //추가
module.exports = {
style: {
postcss: {
mode: POSTCSS_MODES.file
}
},
plugins: [ //추가
{
plugin: CracoAlias,
options: {
source: 'jsconfig',
baseUrl: "./src"
},
},
],
};
jsconfig.json 파일 추가
assets, components, styles는 src아래에 생성된 폴더를 의미한다. 즉, 각각의 폴더가 있고 그 안에있는 파일을 찾을 수 있도록 설정한 것이다.
{
"compilerOptions": {
"baseUrl": "src",
"paths": {
"~/*": [
"./*"
],
"@assets/*": [
"assets/*",
"assets"
],
"@components/*": [
"components/*",
"components"
],
"@styles/*": [
"styles/*",
"styles"
]
}
}
}
//사용예시
import Button from '@components/UI/Button/Button';
import Button from '@assets/icons/arrow-right.png';
여기까지 설정을 하면, PostCSS를 위한 설정은 모두 끝이났다. 여러 자료를 보고 설정했는데도, 시행착오가 있었다. 도움을 얻은 자료를 한번 더 정리함으로서 이해하는데 도움이 많이 됐다.
[참고자료]
야무님 자료
벨로퍼트님 자료
@craco 자료
craco-alias 자료
*야무님 유튜브 강의 내용이 참 좋은데 사람들이 많이 이용했으면 좋겠다.
*벨로퍼트님 React 서적도 초보자에게도 쉬운 설명으로 도움을 많이 받아서 추천한다.
댓글남기기