@svgr/webpack
설치npm i -D @svgr/webpack
next는 next.config.js
를 프로젝트 루트에 작성하여 기존 설정을 수정할 수 있게 함
// `next.config.js` 작성하기
module.exports = {
webpack(config) {
config.module.rules.push({ // 웹팩설정에 로더 추가함
test: /\.svg$/,
issuer: {
test: /\.(js|ts)x?$/,
},
use: ['@svgr/webpack'],
});
return config;
},
};
module.exports = {
// ...생략
module: {
rules: [
//... 로더 생략
{
test: /\.svg$/,
use: ['@svgr/webpack'],
},
],
},
// ... 생략
};
svgr로더만 설정했을때는 .SVG 파일을 컴포넌트로 가져와서 사용할수 있게된다.
import Star from './star.svg' // 이미지를 불러오면 컴포넌트에 담김!
const App = () => (
<div>
<Star /> // 컴포넌트로 사용
</div>
)
url-loader
와 함께쓰기url로 설정하고싶다면 url-loader 추가
물론 url-loader 설치할 것!
npm i -D url-loader file-loader
공식문서에는 file-loader도 설정하라고 되어 있는데, 🧐 같이 쓰니적용이 안되는 듯허이... url-loader만 적용
file-loader의 확장자 목록에 추가해봐도 적용 안됨
// webpack.confign.js
module.exports = {
// ...생략
module: {
rules: [
//... 로더 생략
{
test: /\.svg$/,
use: ['@svgr/webpack','url-loader'], // file-loader는 적용안됨..
},
],
},
// ... 생략
};
url/파일명.svg
사용하기import starUrl, { ReactComponent as StarComponent } from './star.svg'
const App = () => (
<div>
<StarComponent /> // 기본 svgr-컴포넌트 방식
// url-loader & file-loader 동시 적용 후
<img src={starUrl} alt="star" /> // img파일 불러와서 요소에 url적용
<StarImage> // style속성에 url적용
</div>
)
const StarImage = styled.div`
background-image: url('/svg-file.svg');
`;
svgr-로더만 설정했을때
- style속성 url()경로 설정가능 : 정적파일제공 폴더인
public
경로 이하만 작성/파일명.svg
- 컴포넌트형으로 이미지 삽입가능
url-loader 설정후
- 태그 요소에 src속성에 url 입력가능
file-loader 는 설정 적용이 안되서 확인안됨