Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Frontend

[Frontend] prettier ์ ์šฉํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

 

 

 

โœจ Prettier๋ž€

Prettier๋Š” ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•ด์ฃผ๋Š”

์˜๊ฒฌ ์—†๋Š” (Opinionated) ์ฝ”๋“œ ํฌ๋งทํ„ฐ์ด๋‹ค.

 

์‚ฌ๋žŒ๋งˆ๋‹ค ๋“ค์—ฌ์“ฐ๊ธฐ, ์„ธ๋ฏธ์ฝœ๋ก , ๋”ฐ์˜ดํ‘œ ๋“ฑ ์Šคํƒ€์ผ์ด ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—

Prettier๊ฐ€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 


๐Ÿค” ์™œ ํ•„์š”ํ• ๊นŒ

1๏ธโƒฃ ํŒ€ ํ˜‘์—…์—์„œ ์ฝ”๋“œ ์Šคํƒ€์ผ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

2๏ธโƒฃ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ค„์ด๊ณ  ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

3๏ธโƒฃ ์ž๋™ํ™”๋œ ํฌ๋งทํŒ…์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

4๏ธโƒฃ CI / CD ์— ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฒ€์‚ฌ๋ฅผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿ’ป Prettier ์„ค์น˜ ๋ฐ ์ ์šฉ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์„ค์น˜

pnpm์„ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ

pnpm add -D prettier

 

npm์„ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ

npm install --save-dev prettier

 

 

2๏ธโƒฃ .prettierrc ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.

touch .prettierrc

 

 

3๏ธโƒฃ ์ถ”์ฒœ ์„ค์ • ์˜ˆ์‹œ

{
  "semi": true,              // ๋ฌธ์žฅ ๋์— ์„ธ๋ฏธ์ฝœ๋ก  ๋ถ™์ด๊ธฐ
  "singleQuote": true,       // ํ™‘๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ
  "tabWidth": 2,             // ํƒญ ๋„ˆ๋น„ ์„ค์ •
  "trailingComma": "all",    // ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์‰ผํ‘œ
  "bracketSpacing": true,    // ์ค‘๊ด„ํ˜ธ ์‚ฌ์ด์— ๊ณต๋ฐฑ
  "arrowParens": "avoid"     // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๊ด„ํ˜ธ ์‚ฌ์šฉ ์—ฌ๋ถ€
}

 


โš™ VS Code์—์„œ Prettier ์ž๋™ ์ ์šฉ ์„ค์ • ๋ฐฉ๋ฒ•

1๏ธโƒฃ Prettier ํ™•์žฅ ์„ค์น˜ํ•˜๊ธฐ

2๏ธโƒฃ settings.json์— ์•„๋ž˜์˜ ์„ค์ • ์ถ”๊ฐ€ํ•˜๊ธฐ

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}

 

 

๐Ÿ“Œ settings.json ์œ„์น˜

vs code ์™ผ์ชฝ ํ•˜๋‹จ์— ๋ณด์ด๋Š” ์„ค์ • ์•„์ด์ฝ˜์„ ํด๋ฆญํ•œ ํ›„,

์„ค์ • ์„ ํด๋ฆญํ•˜๋ฉด,

 

 

์ด๋Ÿฐ ํ™”๋ฉด์ด ๋ณด์ด๋Š”๋ฐ,

์—ฌ๊ธฐ์„œ ์šฐ์ธก ์ƒ๋‹จ์— ์žˆ๋Š” ์ฒดํฌ ํ‘œ์‹œ๋œ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด

settings.json ํŒŒ์ผ์ด ๋‚˜์˜จ๋‹ค.

 

 

๐Ÿ“Œ ์ฐธ๊ณ  ๋ช…๋ น์–ด

pnpx prettier --check .  // ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ Prettier ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์ธ
pnpx prettier --write .  // ์Šคํƒ€์ผ์ด ์–ด๊ธ‹๋‚œ ํŒŒ์ผ ์ž๋™ ํฌ๋งทํŒ…

 


โ›” .prettierignore๋ž€

.prettierignore๋Š” ๋ง ๊ทธ๋Œ€๋กœ Prettier๊ฐ€ ๋ฌด์‹œํ•ด์•ผ ํ•  ํŒŒ์ผ ๋ฐ ํด๋”๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ๋กœ,

Git์˜ .gitignore์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ๋ฌผ (coverage/)์ด๋‚˜

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋งŒ๋“  pnpm-lock.yaml ๊ฐ™์€ ํŒŒ์ผ์€

๊ตณ์ด ํฌ๋งทํŒ… ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—

์ด๋Ÿฐ ํŒŒ์ผ๋“ค์„ prettier ์ฒดํฌ์—์„œ ์ œ์™ธํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 


๐Ÿ’ป .prettierignore ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์ƒ์„ฑ

touch .prettierignore

 

 

2๏ธโƒฃ ๋ณดํ†ต ํฌํ•จํ•˜๋Š” ๋‚ด์šฉ

# ๋นŒ๋“œ ํŒŒ์ผ
dist/
build/

# ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
coverage/

# ํ™˜๊ฒฝ ํŒŒ์ผ
.env*

# ํŒจํ‚ค์ง€ ๋ฝ ํŒŒ์ผ
pnpm-lock.yaml
package-lock.json

 

๋ฐ˜์‘ํ˜•