mxnxeonx 2025. 2. 3. 18:14
728x90
728x90

Prettier๋ž€?

์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์ข‹๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ํฌ๋งคํŒ…ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ, ์ค„๋ฐ”๊ฟˆ, ๋“ค์—ฌ์“ฐ๊ธฐ ๊ฐ„๊ฒฉ, ์„ธ๋ฏธ์ฝœ๋ก /ํฐ๋”ฐ์˜ดํ‘œ/์ž‘์€๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋“ฑ์„ ์„ค์ •ํ•˜์—ฌ ํŒŒ์ผ ์ €์žฅ ์‹œ๋งˆ๋‹ค or ๋‹จ์ถ•ํ‚ค ์ž…๋ ฅ ์‹œ๋งˆ๋‹ค ํ˜•์‹์— ๋งž๊ฒŒ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ •๋ ฌํ•ด์ฃผ๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ!

 

Prettier ์„ค์ •

๋จผ์ € VSCode ์‹คํ–‰ ํ›„ ์ขŒ์ธก Extensions ํƒญ์—์„œ Prettier๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ๋‹ค์šด๋กœ๋“œ ์ˆ˜๊ฐ€ ๋งํ•ด์ฃผ๋Š” ํŽธ์˜์„ฑ...

 

์ดํ›„ Ctrl + , ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ VSCode ์„ค์ • ์ฐฝ์„ ์—ฐ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด editor: default fomatter๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋’ค None์œผ๋กœ ๋˜์–ด์žˆ๋Š” ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

์„ค์ • ์ „
์„ค์ • ํ›„ (Prettier - Code formatter)

 

ํŒŒ์ผ ์ €์žฅ ์‹œ์—๋„ ์ž๋™์œผ๋กœ ์ •๋ ฌ์ด ๋˜๋„๋ก editor: format on save mode๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋’ค ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•ด ์ค€๋‹ค.

Editor: Format On Save ์ฒดํฌ

 

Prettier ์„ค์ •์€ ๋™์ผํ•˜๊ฒŒ Prettier๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋‚˜, ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” .prettierrc ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ํŒ€ ์ปจ๋ฒค์…˜์— ๋งž๋Š” ์ •๋ ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

.prettierrc ํŒŒ์ผ ์‚ฌ์šฉ

npm์„ ํ†ตํ•ด ์„œ๋ฒ„์— prettier๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

  • --save-dev : ๋ฐฐํฌ์™€ ๋ฌด๊ด€ํ•œ ๊ฐœ๋ฐœ ๊ด€๋ จ ํŒจํ‚ค์ง€์ธ ๊ฒฝ์šฐ
  • --save-exact : ๋ฒ„์ „์ด ๋‹ฌ๋ผ์ง€๋ฉด์„œ ์ƒ๊ธฐ๋Š” ์Šคํƒ€์ผ ๋ณ€ํ™”๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•จ
$ npm install --save-dev --save-exact prettier
๋”๋ณด๊ธฐ

์ข…์†์„ฑ ์ถฉ๋Œ(์ž˜๋ชป๋˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์†์ƒ๋œ ์ข…์†์„ฑ) ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, npm audit fix --force ๋ช…๋ น์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. npm audit ๋ช…๋ น์€ dependency tree์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ œ๊ณตํ•œ๋‹ค๋Š”๋ฐ, npm audit ๋ช…๋ น์œผ๋กœ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ๊ณ ์ณ์ฃผ๋Š” (high๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š”) ๊ฑฐ๋ผ๊ณ  ํ•œ๋‹ค.

$ npm audit fix --force

 

package.json ํŒŒ์ผ ๋‚ด devDependencied์— prettier๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์น˜๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ฐ€์žฅ ๋ฃจํŠธ ํด๋”์— .prettierrc ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , ์›ํ•˜๋Š” Prettier ์˜ต์…˜์„ ์•„๋ž˜์—์„œ ์„ ํƒํ•ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

{
  "arrowParens": "always", // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ผ ๋•Œ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€
  "bracketSpacing": true, // ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€์— ๊ณต๋ฐฑ ์‚ฝ์ž…ํ• ์ง€ ์—ฌ๋ถ€ 
  "endOfLine": "auto", // EoF ๋ฐฉ์‹, OS๋ณ„๋กœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฆ„ 
  "htmlWhitespaceSensitivity": "css", // HTML ๊ณต๋ฐฑ ๊ฐ๋„ ์„ค์ •
  "jsxBracketSameLine": false, // JSX์˜ ๋งˆ์ง€๋ง‰ `>`๋ฅผ ๋‹ค์Œ ์ค„๋กœ ๋‚ด๋ฆด์ง€ ์—ฌ๋ถ€ 
  "jsxSingleQuote": false, // JSX์— singe ์ฟผํ…Œ์ด์…˜ ์‚ฌ์šฉ ์—ฌ๋ถ€
  "printWidth": 80, //  ํ•œ ์ค„์— ์ถœ๋ ฅ๋˜๋Š” ์ฝ”๋“œ์˜ ์ตœ๋Œ€ ๊ธธ์ด
  "proseWrap": "preserve", // markdown ํ…์ŠคํŠธ์˜ ์ค„๋ฐ”๊ฟˆ ๋ฐฉ์‹ (v1.8.2)
  "quoteProps": "as-needed" // ๊ฐ์ฒด ์†์„ฑ์— ์ฟผํ…Œ์ด์…˜ ์ ์šฉ ๋ฐฉ์‹
  "semi": true, // ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฌ์šฉ ์—ฌ๋ถ€
  "singleQuote": true, // single ์ฟผํ…Œ์ด์…˜ ์‚ฌ์šฉ ์—ฌ๋ถ€
  "tabWidth": 2, // ํƒญ ๊ฐ„๊ฒฉ
  "trailingComma": "all", // ์—ฌ๋Ÿฌ ์ค„์„ ์‚ฌ์šฉํ•  ๋•Œ, ํ›„ํ–‰ ์ฝค๋งˆ ์‚ฌ์šฉ ๋ฐฉ์‹
  "useTabs": false, // ํƒญ ์‚ฌ์šฉ ์—ฌ๋ถ€
  "vueIndentScriptAndStyle": true, // Vue ํŒŒ์ผ์˜ script์™€ style ํƒœ๊ทธ์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ์—ฌ๋ถ€ (v1.19.0)
  "parser": '', // ์‚ฌ์šฉํ•  parser๋ฅผ ์ง€์ •, ์ž๋™์œผ๋กœ ์ง€์ •๋จ
  "filepath": '', // parser๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์„ ์ง€์ •
  "rangeStart": 0, // ํฌ๋งทํŒ…์„ ๋ถ€๋ถ„ ์ ์šฉํ•  ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ผ์ธ ์ง€์ •
  "rangeEnd": Infinity, // ํฌ๋งทํŒ… ๋ถ€๋ถ„ ์ ์šฉํ•  ํŒŒ์ผ์˜ ๋ ๋ผ์ธ ์ง€์ •,
  "requirePragma": false, // ํŒŒ์ผ ์ƒ๋‹จ์— ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ฃผ์„์„ ์ž‘์„ฑํ•˜๊ณ  Pragma๋กœ ํฌ๋งทํŒ… ์‚ฌ์šฉ ์—ฌ๋ถ€ ์ง€์ •
  "insertPragma": false, // ๋ฏธ๋ฆฌ ์ •์˜๋œ @format marker์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€ (v1.8.0)
  "overrides": [ 
    {
      "files": "*.json",
      "options": {
        "printWidth": 200
      }
    }
  ], // ํŠน์ • ํŒŒ์ผ๋ณ„๋กœ ์˜ต์…˜์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•จ, ESLint ๋ฐฉ์‹ ์‚ฌ์šฉ
}

 

VSCode์—์„œ ๊ฐœ๋ณ„๋กœ ์„ค์ •ํ•œ ๊ฐ’๋ณด๋‹ค .prettierrc ํŒŒ์ผ์˜ ์ ์šฉ ์ˆœ์œ„๊ฐ€ ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์„ค์ •๊ฐ’์€ ๋ฌด์‹œ๋˜๋‹ˆ ์ฐธ๊ณ !

728x90
320x100