Project

SVGR jest ํ…Œ์ŠคํŒ… ์—๋Ÿฌ

๐Ÿถzio 2024. 12. 7. 18:14

 

์ปดํฌ๋„ŒํŠธ๋ฅผ Test ํ•˜๋ฉด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. (Jest๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋‹ค.)

์›์ธ์€ Next.js์—์„œ svgํŒŒ์ผ์„ SVGR๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. (์›์ธ์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ๋„ ํ•œ ์‹œ๊ฐ„ ๊ฑธ๋ฆฐ ๋“ฏํ•˜๋‹ค๐Ÿ™ƒ)

SVGR ๊ณต์‹ ๋ฌธ์„œ์— ์นœ์ ˆํ•˜๊ฒŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋‚˜์™€์žˆ๋‹ค.

 

Jest - SVGR

 

SVGR - Transforms SVG into React Components. - SVGR

Transforms SVG into React Components.

react-svgr.com

 

 

1. __mock__ ํด๋”์— svg.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

export default 'SvgrURL'
export const ReactComponent = 'div'

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋ฏธ mocksํด๋”๊ฐ€ ์žˆ์–ด svg.js ํŒŒ์ผ๋งŒ ์ƒ์„ฑํ–ˆ๋‹ค.

 

2.jest.config.ts ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

module.exports = {
  moduleNameMapper: {
    // ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ฃผ์ž
    '\\.svg$': '<rootDir>/__mocks__/svg.js',
    '\\.svg$': '<rootDir>/src/__mocks__/svg.js',
    '\\.svg$': '<rootDir>/src/mocks/svg.js', 
  },
}

์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๋ฉด

 

์–ด๋ฆผ๋„ ์—†์ง€ ๋ฐ”๋กœ ๊ฐ™์€ ์—๋Ÿฌ ๋ฐœ์ƒ. ๋„๋Œ€์ฒด ์™œ?!?!?!? ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ธ๊ฐ€. ์ด๋•Œ๋ถ€ํ„ฐ ํญํ’ ๊ฒ€์ƒ‰์ด ์‹œ์ž‘๋๋‹ค.

 

 

๊ฒฐ๋ก ์€ ํ—ˆํƒˆํ•˜๊ฒŒ๋„ ์ •๊ทœํ‘œํ˜„์‹ ์ˆ˜์ •์œผ๋กœ ํ•ด๊ฒฐ๋œ๋‹ค.

module.exports = {
  moduleNameMapper: {
  // ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ฃผ์ž
    '^.+\\.(svg)$': '<rootDir>/src/mocks/svg.js', 
  },
}
  • \\.svg$: ๋ฌธ์ž์—ด ์ค‘. .svg๋กœ ๋๋‚˜๋Š” ๋ถ€๋ถ„๋งŒ ๊ฒ€์‚ฌํ•œ๋‹ค.
  • ^.+\\.(svg)$: ํŒŒ์ผ ๊ฒฝ๋กœ ์ „์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ .svg๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค.

 

 

??? ์—ฌ์ „ํžˆ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ผ๋‹จ ํ•˜๋‚˜ ์•Œ๊ฒŒ ๋œ ๊ฑด ๊ณต์‹๋ฌธ์„œ

 

 

 

์ถ”๊ฐ€๋กœ ๋‚˜๋Š” svg.js๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ–ˆ๋‹ค.

export default 'svg';
export const ReactComponent = 'div';

 

 

์ฐธ๊ณ ์ž๋ฃŒ

nextjs @svgr/webpack jest + @issue ํ•ด๊ฒฐ