๐ค ESLint์ Prettier์ ์ฐจ์ด์
๐ค ๊ทผ๋ฐ ๋ ๋ค ๊ฒน์น๋ ๊ท์น๋ ์์ง ์๋?
printWidth
์ ESLint์ max-len
๋ชจ๋ ํ ์ค ๊ธธ์ด ์ ํ์ ์ค์ ํ ์ ์๋ค.๐ค 'prettier/prettier': 'error',
ESLint์์ ๊ฒฐ๊ตญ ์ผ์ชฝ ์ฝ๋๋ก ํฉ์น๋๋ฐ ์ ํ์ผ ๋๋์ง?
๐ค ๊ฐ๋ฐ ํ๊ฒฝ? ํ๋ก๋์ ํ๊ฒฝ?
๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋๋ฒ๊น ํธ์๋ฅผ ์ํด ์ผ๋ถ ๊ท์น์ ์ํ.
ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฝ๋ ํ์ง์ ๋์ด๊ธฐ ์ํด ์๊ฒฉํ ๊ท์น ์ ์ฉ.
// ํ๋ก๋์
ํ๊ฒฝ์์๋ง ์ ์ฉ๋๋ ๊ท์น
...(isProduction && {
'no-console': 'error', // ์ฝ์ ๋ก๊ทธ ์ฌ์ฉ ๊ธ์ง
'no-debugger': 'error', // ๋๋ฒ๊ฑฐ ์ฌ์ฉ ๊ธ์ง
}),
๊ทธ๋ผ ์ด๋ป๊ฒ ๊ฐ๋ฐ์ด๋ ํ๋ก๋์ ๋๋ ?
์ ๋๋๊ธฐ ๊ท์ฐฎ๋ค ใ
.env
ํ์ผ ๋๊ฐ๋ก ๊ด๋ฆฌ (ํ ๋ ํฌ์งํ ๋ฆฌ ๋ด์ ๋ฐฐ์น)
// .env.development
NODE_ENV=development
REACT_APP_API_URL=https://dev-api.example.com
REACT_APP_API_KEY=your_development_api_key
// .env.production
NODE_ENV=production
REACT_APP_API_URL=https://api.example.com
REACT_APP_API_KEY=your_production_api_key
dotenv ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ process.env.NODE_ENV ๊ฐ์ ๋ฐ๋ผ ํด๋น ํ๊ฒฝ ๋ณ์๋ฅผ ๋ก๋
https://ko.vite.dev/guide/env-and-mode
dotenv
์ค์น
npm install dotenv
dotenv
์ค์ ์ฝ๋ ์์ฑ
ํ๋ก์ ํธ์ ์ง์
ํ์ผ (์: index.js
๋๋ app.js
)์์ dotenv
๋ฅผ ์ฌ์ฉํด ํ๊ฒฝ์ ๋ฐ๋ผ .env
ํ์ผ์ ์๋์ผ๋ก ๋ก๋ํ๋๋ก ์ค์ .
// app.js ๋๋ index.js
const dotenv = require('dotenv');
// `process.env.NODE_ENV`์ ๋ฐ๋ผ ๋ค๋ฅธ `.env` ํ์ผ์ ๋ก๋
dotenv.config({
path: process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development',
});
// ์ด์ `process.env`๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
console.log('Environment:', process.env.NODE_ENV);
console.log('API URL:', process.env.REACT_APP_API_URL);
GitHub Actions ์ค์ ํ์ผ ๊ตฌ์ฑ
.github/workflows
ํด๋์ ๋ธ๋์น๋ณ CI/CD ์ค์ ํ์ผ์ ์์ฑํ์ฌ, ๋ธ๋์น์ ๋ฐ๋ผ ์๋์ผ๋ก ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.develop.yml
(๊ฐ๋ฐ ํ๊ฒฝ ๋ฐฐํฌ์ฉ)
develop
๋ธ๋์น๋ก ํธ์๋ ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ๋ ์ค์ ์
๋๋ค.main.yml
(ํ๋ก๋์
ํ๊ฒฝ ๋ฐฐํฌ์ฉ)
main
๋ธ๋์น๋ก ํธ์๋ ๋ ํ๋ก๋์
ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ๋ ์ค์ ์
๋๋ค.๐ ๊ทธ๋ผ์ด๋๋ฃฐ๋ก ์ ํ ์ฝ๋ ์ปจ๋ฒค์ ์ ๊ธฐ๋ฐํ์์ต๋๋ค.
.prettierrc
{
"printWidth": 100, // ํ์ค ๊ธธ์ด Airbnb 80์, ๋ค์ด๋ฒ 100์์ธ๋ฐ ์ฐ๋ฆฌ๋ 100์๋ก.
"tabWidth": 2, // ๋ค์ฌ์ฐ๊ธฐ 2์นธ
"singleQuote": true, // ' ' ์์ ๋ฐ์ดํ ์ฌ์ฉ
"trailingComma": "es5", // ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ ๋ง์ง๋ง ์์ ๋ค์ ์ผํ
"semi": true, // ๋ชจ๋ ๋ฌธ์ฅ ๋์ ์ธ๋ฏธ์ฝ๋ก ; ์ถ๊ฐ
"arrowParens": "always" // ํ์ดํ ํจ์ ๋งค๊ฐ๋ณ์์ ํญ์ ๊ดํธ
}